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

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 , parte 2 y parte 3 .

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 22


Después de analizar el código fuente, queda claro que veremos la contraseña si el parámetro GET revelio no está vacío.

imagen

Pero en la primera comprobación, si la sesión de administración no está instalada, se nos redirige a esta página sin parámetros.

imagen

Solo necesita usar el agente web, no un navegador, por ejemplo curl.

imagen

imagen

Le quitamos la contraseña.

nivel 23


Analizamos el código fuente. La función strstr (s1, s2) devuelve una subcadena de s1 que comienza con s2. También php automáticamente arroja tipos. Es decir, al compararlo, conducirá la cadena a un número y descartará caracteres adicionales.

imagen

La cadena "11iloveyou" será adecuada para nuestra condición. En la primera comprobación, devuelve "iloveyou", es decir, True. En la segunda comprobación, 11> 10, es decir, Verdadero.

imagen

nivel 24


Este nivel también contiene un error lógico. La condición es verdadera de todos modos si strcmp devuelve FALSE. Pero strcmp devolverá FALSE incluso en caso de error.

imagen

Aunque php convierte tipos automáticamente, no puede convertir una matriz en una cadena. Para hacer esto, abra el código fuente de la página y cambie el nombre del campo de "passwd" a "passwd []".

imagen

Enviamos cualquier línea.

imagen

Le quitamos la contraseña.

nivel 25


Al analizar el código fuente, lo más interesante es la función logRequest (), que procesa los campos que el usuario puede controlar. Este es el encabezado HTTP de User_Agent y cookie session_id.

imagen

imagen

imagen

Cabe señalar que todas las secuencias "../" se eliminan de la cadena, pero esto se puede hacer mediante: "... /. /" => "../".

Idea de la solución: dado que la ruta para grabar registros depende de session_id, que podemos controlar, y al elegir el idioma de visualización se selecciona la ruta en el servidor, debido a LFI podemos leer el archivo de registro.

imagen

imagen

imagen

imagen

Ahora queda escribir la contraseña de / etc / natas_webpass / natas26 en nuestro archivo de registro. Como nuestro Web-Agent primero se graba y luego se genera desde el archivo, agregaremos el código php a este campo.

imagen

imagen

Obtenemos la contraseña.

nivel 26


En este ejemplo, existe una vulnerabilidad muy grave: la deserialización sin filtro de los objetos. La función unserialize () toma una variable serializada y la convierte de nuevo en un objeto PHP.

imagen

Se devuelve el valor convertido, que puede ser entero, flotante, cadena, matriz u objeto. Es decir Puedes ejecutar cualquier código. La clase Logger, cuando se crea, escribe cierta información en el archivo.

imagen

La idea es la siguiente:

  1. Vuelva a escribir la clase Logger, donde en lugar de uno de los mensajes se incluirá un código php que generará una contraseña.
  2. Codifíquelo en Base64.
  3. Pegar en galleta.
  4. Acceda al archivo de registro.
  5. Quitar contraseña

<?php class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ $this->initMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->exitMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->logFile = "img/phpobjinj.php"; } function log($msg){ ; } function __destruct(){ ; } } $obj = new Logger("obj"); echo urlencode(base64_encode(serialize($obj))); ?> 

imagen

imagen

imagen

Obtenemos la contraseña.

nivel 27


Este servicio proporciona datos del usuario. Pero si el usuario no existe, lo crea con el nombre de usuario y contraseña especificados.

imagen

El problema es que después de crear el usuario, el servicio no verifica su contraseña al iniciar sesión. Al mismo tiempo, solo los primeros 64 caracteres del inicio de sesión y la contraseña después del filtrado caen en la base de datos. No solo eso, sabemos el nombre de usuario: natas28.

imagen

Cree un usuario con una contraseña y un nombre vacíos: "natas28_60-spaces_ any-character". (Por lo tanto, durante la verificación, no habrá coincidencia con el usuario natas28, pero durante la creación se filtrará y se agregará a la base de datos. Es decir, la contraseña no se comprobará en la próxima llamada).

imagen

imagen

Vamos bajo el nombre de natas28 y una contraseña vacía. Obtenemos los datos del usuario natas28.

Continuará Puedes unirte a nosotros en Telegram .

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


All Articles