Script en Python para trabajar con shellcode bajo Windows

Descripción de la herramienta

Cualquiera que trabaje con exploits y shellcode, ya sabrá lo que son y cómo prepararlos. A veces los exploits vienen en C, Perl, Python… y son algo así:

payload = (b"xbfxabxd0x9ax5bxdaxc7xd9x74x24xf4x5ax2bxc9" + "xb1x45x83xc2x04x31x7ax11x03x7ax11xe2x5ex2c" + "x72xd2xa0xcdx83x85x29x28xb2x97x4dx38xe7x27" + ...

Pero a veces se necesita una representación en fichero binario de ese shellcode para poder inyectarlo en un fichero, depurarlo o por cualquier razón. Existen toda clase de scripts ahí fuera para trabajar con shellcode y realizar diferentes tareas. Binario a shellcode, shellcode a binario (solo para bash)… Pero no hemos sido capaces de encontrar un script simple para conseguirlo bajo Windows. Incluso encontrar el comando “xxd” (realizar un volcado hexadecimal) portado a Windows es posible pero no sencillo (parece que viene con Vim para Windows, y que antes estaba disponible junto a las unixtools…)

En cualquier caso, este es un script simple en Python que funciona en Windows y hará el trabajo. Tolera shellcode sucio (con espacios, retornos de carro, comandos de concatenación…) y solo se quedará con los caracteres hexadecimales. Después utiliza un “write” con “wb” para obtener un fichero binario. Quick and dirty.

Funcionalidades

Aquí está el pequeño código. Se puede copiar y pegar simplemente en un fichero .py. Comprobado en la rama 2.7.

import binascii
import fileinput
import os
import re
import sys

def shell2bin(args):
if len(args) < 2:
print "Usage: %s shellcodefile binfile" % args[0]
return
else:
try:
with open(sys.argv[1], "r") as fileshell:
flux = fileshell.read()
flux = re.sub("[^0-9,^a-f,^A-F]", "",flux)
with open(sys.argv[2], "wb") as filebin:
filebin.write(binascii.unhexlify(flux))
print "Done!"
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except:
print "Unexpected error:", sys.exc_info()[0]
if __name__=='__main__':
shell2bin(sys.argv)
Nuestras herramientas

Neto

AMENAZAS Y VULNERABILIDADES

Neto es la herramienta para analizar extensiones de navegador.

EmetRules

CONFIANZA EN INTERNET

EmetRules crea una configuración para ser importada a EMET, de manera que el usuario no necesite realizar ninguna acción.

DirtyTooth para Raspberry Pi

AMENAZAS Y VULNERABILIDADES

Esta herramienta es una implementación del DirtyTooth Speaker en formato software, un paquete .deb para la Raspberry Pi.