De nuevo una entrada más de la serie Hacking desde 0. En este caso vamos directos al nivel alto de la vulnerabilidad "file inclusion". En este enlace tenéis un ejemplo (que casualmente coincide con el nivel básico de DVWA) en el que podéis leer a cerca de la vulnerabilidad.
Vamos directos al curro.
Si probamos la idea que nos sugiere la gente de OWASP, nos daremos cuenta del funcionamiento de la aplicación y del filtrado de este nivel.
Nos encontramos de primeras con esta pantalla.
Si pinchamos en cada uno de los enlaces obtenemos (por orden) lo siguiente.
Como decía, si probásemos la idea de la gente de OWASP vemos lo siguiente.
Obviamente, nos dice que el archivo no lo encuentra, y es que el filtrado está trabajando. Antes de mirar el código con "View Source" ya me imagino lo que está pasando. Seguramente nos están filtrando los caracteres ../../ o ..\..\ o ambos. Vamos a probar lo siguiente más lógico (aunque ya me imagino que tampoco va a funcionar) que es "URLencodear" los caracteres ../../ de manera que pasamos ..%2F..%2F..%2F..%2F en su lugar.
Como suponía, no funciona, e incluso si lo pasásemos a hexadecimal o cualquier otro tipo de codificación, casi seguro que no funcionaría. Vamos a ser más prácticos y a cambiar totalmente de tercio. Vamos a pedirle con "file" el archivo que queremos obtener, de la siguiente manera.
?page=file:///etc/passwd
Pues ahí lo tenemos, el resultado esperado. Hemos bypaseado el filtro y obtenido lo que queríamos, así que, hemos pasado el nivel.
<?php// The page we wish to display $file = $_GET[ 'page' ];// Input validation if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}?>
Ese es el código del nivel "high".
Roberto García (@1GbDeInfo)