Redes Sociales

viernes, 14 de marzo de 2014

Probando el DVWA (Parte I)

Hoy me decidí a instalar DVWA para hacer pruebas de conocimientos de sql injection y demás. DVWA es la Damn Vulnerable Web Application y su nombre lo dice todo. Básicamente se trata de una XAMPP con PHP y MySQL.

Tras instalarla, el primer problema que encuentro (aparte de un error de MySQL que habia que cambiar la contraseña del usuario root) es que me aparece la página de login y no tengo ni idea de qué usuario y contraseña utilizar:

Por suerte lo tengo instalado en local y puedo ver el fuente de login.php, que tira de la base de datos de MySQL 'dvwa' y dentro, de la tabla 'users'. Dicha tabla es algo asi:

Esas contraseñas parecen un MD5... vamos a intentar descifrarlas. Vamos a alguna de las multiples páginas que hacen resolucion inversa de MD5, por ejemplo gromweb y le damos:

Ok, pues para el usuario admin, la contraseña es password. Vamos a ver el resto.... Para el usuario gordonb es abc123, para el usuario 1337 es charley y para el usuario pablo es letmein.

Una vez dentro me sale esta página principal:

Command Execution

Pruebo a comenzar con la ejecución de comandos. Me sale esta pantalla donde se supone que introduciendo una IP, me hará ping a dicha IP. De hecho funciona. Pero hay algo más, seguro. Tras unas cuantas pruebas:

...me empiezo a escamar y miro el código fuente... hasta que me doy cuenta de que estoy en modo NO-VULNERABLE, opción que se puede modificar en el fichero config.inc.php:

Según la documentación, el modo de seguridad 'high' es seguro contra contra todas las vulnerabilidades y además nos muestra buenas prácticas de programación.

En este modo la herramienta del ping "con vulnerabilidad de ejecución de comandos" esta escrita asi:

Es decir, se "explota" la IP por el simbolo punto y luego se comprueba si cada parte es numerica con la funcion is_numeric de PHP. Tras investigar un poco, no hay forma de saltarse esta comprobación.

Así pues, pasemos al modo 'medium' (Tampoco es plan de ir a lo facil).

Ahora si. Simplemente poniendo un simbolo "pipe" nos permite ejecutar cualquier comando linux:

En este modo, se filtran los codigos '&&' y ';', pero todo lo demás, lo deja ejecutar.

File Upload

Pruebo a continuación la opción de subida de ficheros (Upload). Para ello voy a escribir un script PHP que me haga un simple ls. Algo así:

Al subirlo me da un error muy explicativo:

Your image was not uploaded. O sea que esta esperando una imagen. ¿Y si le ponemos una extension jpg al php?. A ver... ¡¡Vaya, y nos pone la ruta completa!!:

Entiendo que ahora solo hay que ejecutar ese jpg... Vaya... ¡pues no!:

Ah! pero para eso tenemos la ejecución de comandos que probamos antes. Si vamos a Command Execution y le pedimos que nos haga ping a:

8.8.8.8|mv ../../hackable/uploads/prueba.jpg ../../hackable/uploads/prueba.php

...ahora ya podremos ejecutar dicho PHP:

Y hasta aquí por ahora. Esta wapo este DVWA, permite probar conceptos y aprender como se debe programar en PHP de forma segura.

No hay comentarios:

Publicar un comentario