Trasteando el fin de semana me encontré con esta vulnerabilidad, bastante antigua, con la que quise probar un poco. El CVE es CVE-2006-3952 un stack buffer overflow y como podéis ver en el exploit es algo bastante sencillo de explotar. La aplicación es un servidor FTP que proporciona la posibilidad de utilizar SSL para la transferencia de archivos.
En el exploit nos presentan la posibilidad de lanzar una calculadora tras explotar la vulnerabilidad. Leyendo el código del exploit, el cual es bastante intuitivo, hay un comentario en el que se visualiza que se ha utilizado la herramienta msfpayload y msfencode para preparar la shellcode, en este caso una calculadora. Por lo que, cuando se explote la vulnerabilidad en la máquina remota se ejecutará calc.exe.
También tenemos que tener en cuenta la dirección IP de la máquina remota que tiene el servidor FTP, ya que viene 'a pelo' en el código, por lo que si decidís probarlo cambiar la dirección IP. A continuación os adjuntamos una imagen donde se puede ver lo comentado previamente.
Llegado a este punto la prueba de concepto es normal. Al ver dónde cae la shellcode, decidí cambiar la shellcode y hacer que en vez de ejecutar una calculadora, se ejecute una shell remota y que se devuelva el control remota al handler. Entonces, necesitamos primero generar la shellcode correspondiente con la ejecución de una shell y decirle 'a dónde tiene que retornar el control', es decir, a la máquina del atacante, y por otro lado necesitamos configurar el módulo exploit/multi/handler de Metasploit para recibir la conexión.
Para generar la shellcode de tipo shell inversa utilizamos msfpayload conjuntamente con la herramienta msfencode. Se utilizará el parámetro '-b' en msfencode para evitar bytes nulos. En la siguiente imagen se puede visualizar la generación. Tras esto la shellcode se debe copiar en el exploit escrito en python, sustituyendo a la de la calculadora.
Ahora que se tiene el exploit modificado se ejecuta contra una máquina Windows. En la descripción se indica que se ha probado en Windows XP SP3 versión inglesa, aunque yo lo he probado en la versión española y funciona igual, Windows 7 SP 1 y Windows 8.1. Para recibir la conexión de la shell debemos configurar el handler. Para ello, a través de msfconsole accedemos con use exploit/multi/handler y realizamos la configuración del módulo.
Cuando se ejecuta el exploit se obtiene la sesión y se dispone de una shell en la máquina comprometida. A partir de aquí se abre un gran abanico de opciones sobre las cosas que se pueden llevar a cabo. Algo que puede interesar es realizar un upgrade a la shellcode para convertirla en un meterpreter. Para esto, dejamos en background la shellcode actual y ejecutamos la instrucción sessions -u <id sesión>.
Ahora obtenemos una nueva sesión con un meterpreter para ampliar las funcionalidades a realizar en la máquina comprometida. En este caso disponemos de la sesión 1 con una shell y la sesión 2 con un meterpreter. Se puede ver las sesiones disponibles con la ejecución de la instrucción sessions -l.