viernes 6 de noviembre de 2009

Local File Disclosure

Este Bug puede ser demaciado peligroso... no solo por que nos pueden ver el codigo fuente sino que por el mismo pueden ganar accesos a todo...

Ahora si vayamos a lo que nos gusta... la Acción...

En primer lugar vamos a tener un par de documentos... test.php y vuln.php

codigo de test.php:


<?php
echo 'hola que tal esto es una prueba';
?>


bueno... si ustedes entraran a http://webvuln.com/test.php básicamente verían... Hola que tal esto es una prueba... pero ahora vamos a ver el codigo de vuln.php que podría cambiar toda la historia...


<?php
$llamar = $_GET['llamar'];
$leer = readfile($llamar);
?>



Para los que saben aun que sea un poco de php ya se han dado cuenta lo que hace este código, aun que las variables dicen mucho tambien...

ustedes diran lo llama y lo lee con una simple función pero... ¿cual es el problema?

intenten ir a http://webvuln.com/vuln.php?llamar=test.php

pero que ha pasado no muestra nada? y que pasó con nuestro texto? lo que pasa es que al usar esta función si nosotros vemos el codigo fuente de esa URL no veremos solo el texto sino que veremos el codigo PHP...

Ahora entonces por que usamos el readfile()? pues no lo se... a que me refiero? pues teniendo en cuenta las buenas prácticas de programación en php readfile lo deberíamos hacer para sierto tipo de descargas... mas no para la lectura de archivos pero si nos toca hacer hardening en la web de una empresa que tiene eso, no le vamos a restructurar todo si su página son catalogos de ropa de 500 páginas entonces lo que podriamos hacer es simple:

if ($_GET['llamar'] == "index")
{
readfile("/2009/11/test.html");
}
else
{
echo 'sapo';
}


Este Codigo sigue sin ser 100% seguro pero lo hacemos menos vulnerable por que no lo dejamos convocar cualquier clase de archivos, solo strings sin formato...


Igual les recomiendo no poner archivos comprometedores para que sean llamados por la funcion readfile()


Espero les haya gustado el tuto y cuidado con sus codes ;)


Saludos
Dr.White