Normalmente el desarollo de exploits requiere más tiempo del que uno tiene, de manera que hay que ingeniarse técnicas y herramientas que faciliten el trabajo.
Personalmente, antes que parchear una aplicación cliente, o utilizar las apis de ciertos protocolos, prefiero capturar el tráfico y enviar las cabeceras a bajo nivel, alterando los campos variables, con rfc y código del servidor en mano.
En 2008 publiqué un proxy multi-protocolo, para la intercepción y modificación de paquetes emitidos sobre TCP, sin embargo recientemente le he dado soporte UDP.
Este sencillo proxy tiene 3 modos:
- En primer lugar, el modo view. Intercepta pero no altera el tráfico, mostrando los datos tanto en hexadecimal como en alfanumérico. Los colores facilitan la ingeniería inversa de los bloques y tipos de datos.
- En segundo lugar, el modo trap, que permite alterar los datos. Esto es útil sobretodo para TCP, porque la sesión se mantiene establecida.
- El tercer modo, consiste en preparar un fichero que permite “parchear al vuelo”, donde se indica el número de petición a alterar, offset dentro de la petición y reemplazo, donde se puede indicar en formato string y/o hexadecimal.
- Este fichero de parche se puede lanzar en modo view, o combinarlo con parcheos manuales en modo trap. Se puede apreciar en la siguiente captura la petición 1 sin parchear y la petición 1 parcheada.
Por ejemplo el exploit del vnc bypass, se podría implementar en una simple línea mediante sha0proxy.
A continuación expongo un caso real, de reversing de protocolo + explotación en win32. No se puede revelar el nombre del producto porque todavía no está corregida la vulnerabilidad.
El activeX, recibe del servidor una cabecera y un bloque de datos; gracias al coloreado, se puede apreciar rápidamente que la cabecera está compuesta por 2 valores de 4 byets en little-endian
Puesto que el lado cliente, hace un recv() del tamaño indicado por la header, es posible desbordar el buffer de recepción. En este caso hubo que evadir el /gs y safe-seh gracias a un problema de concurrencia, en el que otro thread acceder a datos sobreescritos por este envío. La web debería de cargar el activeX 20 veces para que una de ellas se diera esta concurrenicia.
sha0proxy, a parte de permitir analizar los protocolos, permite a calibrar la explotación o incluso hacer el exploit en sha0proxy, mediante los ficheros de parche.
En este caso se puede apreciar la header de respuesta, el bloque para ajustar el incio d ela shellcode, un grupo de “A” para ajustar el offset, el cual será un salto a al user32.dll.
Próximamente incorporaré nuevas funcionalidades como fuzzing, o aplicar expresiones regulares en el contenido del tráfico.
Podeis descargarlo desde aquí: sha0proxy.pl