Puede llegar un momento en que desee poder interactuar con una de sus máquinas de destino, o usar un nuevo y jugoso módulo de explotación de su prueba de penetración favorita o marco de explotación. Esto normalmente, aunque no siempre, requiere alguna forma de ejecución de shellcode. Para ejecutar shellcode sin formato, simplemente necesitamos crear un búfer en la memoria y, utilizando el módulo ctypes, crear un puntero de función a esa memoria y llamar a la función. En nuestro caso, vamos a usar urllib2 para tomar el código shell de un servidor web en formato base64 y luego ejecutarlo.
Para la ejecución de la shell lo único que debemos hacer es:
Fernando$ base64 -i shellcode.raw > shellcode.bin
Fernando$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Simplemente codificamos en base64 el shellcode usando la línea de comando estándar de Linux. El siguiente pequeño truco utiliza el módulo SimpleHTTPServer para tratar su directorio de trabajo actual (en nuestro caso, / tmp /) como su raíz web.
Cualquier solicitud de archivos será atendida automáticamente por usted. Ahora suelte su script shell_exec.py en su VM de Windows y ejecútelo. Debería ver lo siguiente en su terminal Linux:
192.168.112.130 - - [12 / Jan / 2014 21:36:30] "GET /shellcode.bin HTTP / 1.1" 200 -
Esto indica que su script ha recuperado el shellcode del servidor web simple que configuró usando el módulo SimpleHTTPServer. Si todo va bien, recibirás un shell de nuevo en tu marco y aparecerás calc.exe, o mostrarás un cuadro de mensaje o lo que sea que se compiló para tu shellcode.