N3tG34R (Web 300)

By @dark1t

Descripcion:

Con las credenciales obtenidas en la MovilApp, trata de ingresar a la zona 
restringida aqui:

http://70.37.x.x/dev_only/

Creemos existe un firmware de un ruteador viejo Netgear WNAP320 el cual valida 
el acceso a la red interna del Banco! 

De acuerdo a la version del firmware, tenia esta vulnerabilidad: CVE-2016-1555,
los desarrolladores del Banco parcharon el script vulnerable: boardDataWW.php 
pero tenemos la esperanza de que no lo hayan hecho correctamente.

Descarga el firmware, analiza la version vulnerable del script, y encuentra  
una nueva forma de explotarlo, y con esto,  lee el contenido del archivo: 
 
path_to_hidden_service.txt

El sitio web lo encuentras en: http://40.84.x.x:1343/

Esta herramienta te puede ayudar: 

https://github.com/ReFirmLabs/binwalk

La flag sera el resultado de: 

cat path_to_hidden_service.txt | md5sum


Después de leer el CVE el participante descubrirá que el modelo del Netgear es vulnerable a RCE.
El CVE hace referencia a 5 archivos vulnerables que utilizar el mismo sistema operativo del Netgear: (1)boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5)
boardDataWW.php.

En este caso, este modelo de Netgear solo tendrá el archivo boardDataWW.php , por lo que si manda una petición a otro archivo de los listados recibirá Error 404.

Al encontrar la página vulnerable (boardDataWW.php) se observa un simple input que pide una MAC Address.

La MAC debe cumplir el formato, de lo contario marca error en Javascript que el formato es incorrecto.

Formato correcto:



Formato incorrecto:

Para hacer bypass a esta validación en Javascript se puede interceptar la petición con Burpsuite. Ya en Burpsuite se intentan mandar caracteres que concatenan ejecución de comandos y se descubre que los más conocidos ya han sido restringidos por el desarrollador, los caracteres filtrados son:

";","&","`","<",">","#","*","~","^","{",”}"

Como ejemplo, enviando punto y coma ; en el payload. La aplicación responde que ya se arregló la
vulnerabilidad:


Un caracter que pueden probar los participantes para validar la ejecución de comandos es %0A , | o $() junto con el comando sleep (en la parte inferior derecha se puede ver que se ejecuta el comando correctamente porque la aplicación tardó poco más de 5 segs en responder).

Los participantes pueden sacar ideas de el siguiente repositorio para hacer bypass a los caracteres
filtrados: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection



Después de descubrir los caracteres permitidos, los participantes podrian intentar redireccionar la salida de un comando (por ejemplo cat /home/<archivo>), sin embargo debido al firewall de iptables configurado en el Netgear no podrán recibir ninguna salida en el listener.

También si los participantes intentan escribir un archivo no podrán porque están filtrados los carácteres de redireccionamiento <,>
En este punto los participantes deben comenzar a buscar un metodo de inyección de comandos que ayude a validar la salida de cada comando y saber qué resultado tiene.

Un método es Time Based Data Exfiltration:

Este método consiste en validar cada carácter de salida de un comando mediante una comparación true/false y si la comparación es verdadera entonces ejecutará un comando sleep (que fue el que se validó en el paso anterior)

Payload original: 

if [ $(echo mayas|cut -c 1) == m ]; then sleep 5; fi

Payload codificado y haciendo bypass a los caracteres filtrados:

001122334455%0A%20if%20[%20$(echo%20mayas|cut%20-
c%201)%20%3d%3d%20m%20]%0A%20then%20sleep%205%0A%20fi%0A

%0A - Salto de linea
%20  - Espacio

En este payload se está ejecutando el comando echo mayas y se valida si el primer caracter es la letra m, en estecaso se cumple la condición por lo que la respuesta del servidor tiene un retraso de 5 segs.

De la misma forma si se envia un caracter diferente a "mayas" la respuesta sera inmediata sin retraso con lo que se validara que no se cumplio la condicion.

Ya con la validación del payload se puede comenzar a resolver el reto, el cual tiene como objetivo leer un archivo.
Digamos que el contenido de archivo /home/.htpasswd es:

 bunker_admin:$apr1$befth354$6C2ZcPV4NjIhqbeqcKFcA0

Los participantes pueden crear un script o utilizar el Intruder de BurpSuite para obtener el contenido del archivo iterando por todos los caracteres del alfabeto. En la Figura de abajo se puede ver que la primer letra 'b' tuvo un delay de 4915 milisegundos, confirmando que el caracter se ha encontrado:

El mismo delay se day para el segundo caracter la letra 'u' de (bunker...):


Y asi finalmente se extra el contenido del archivo el cual nos daba el socker de un servicio escondido en el Gateway Interno!!

Comments