shellforge

Een compiler die een C-programma transformeert in Linux / X86-shellcode
Download nu

shellforge Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • GPL
  • Prijs:
  • FREE
  • Naam uitgever:
  • Philippe Biondi
  • Uitgever website:
  • http://www.secdev.org/projects/etherpuppet

shellforge Tags


shellforge Beschrijving

Een compiler die een C-programma transformeert in Linux / X86-shellcode Shellforge is een programma geschreven in Python dat Shellcodes uit C. Het is geïnspireerd op Stealth's Hellkit.Sommige wrapperfuncties Arround System-oproepen worden gedefinieerd in header-bestanden. Het C-programma gebruikt ze in plaats van libc-oproepen. Shellforge gebruikt GCC om het om te zetten in assembler. Het wijzigt het dan een beetje, stelt het samen, de extractiecode uit het object, kan het coderen en een lader toevoegen aan het begin. De beschikbare laders zijn, voor het moment: * XOR: Codeer de Shellcode om null bytes te vermijden en een eenvoudige bytes te voorkomen XOR-decoder * Alpha: Maak een bijna alfanumerieke shellcode (zie voorbeeld) Toekomstige evoluties: * Maak shellforge in staat om shellcodes te genereren voor meer architecturen, native of het gebruik van cross-compilers * voeg meer laders toe (en voltooi de alpha loader) Voorbeeld: hier is de Hallo World Program (hallo.c). # omvatten "omvatten / sfssyscall.h" int main (void) {char buf [] = "hallo wereld! N"; schrijf (1, buf, sizeof (buf)); Afsluiten (0);} We kunnen de onbewerkte shellcode hebben: $ ./shellforge.py hello.c ** Compileer hallo.c ** Tuning Original assembler code ** Montage gewijzigde ASM ** Ophalen Machinecode ** Computing XOR-coderingssleutel ** commandoregelcode gesmeed x55x89xe5x83xecx24x53xe8x00x00x00x00x5bx83xc3xf4x8bx83x67x00x00x00x89x45xf0x8bx83x6bx00x00x00x89x45xf4x8bx83x6fx00x00x00x89x45xf8x0fxb7x83x73x00x00x00x66x89x45xfcx8dx4dxf0xbax0ex00x00x00xb8x04x00x00x00xc7x45xecx01x00x00x00x53x8bx59xfcxcdx80x5bxb8x01x00x00x00xc7x45xecx00x00x00x00x53x8bx59xfcxcdx80x5bx5bxc9xc3x48x65x6cx6cx6fx20x77x6fx72x6cx64x21x0ax00We kan het te testen: $ ./shellforge.py -tt hello.c ** Het samenstellen hello.c ** Tuning originele assembler code ** in elkaar zetten gewijzigd aSM ** worden opgehaald machine code ** Computing xor encryptiesleutel * * Gesmeed Shellcode! ** Compileer testprogramma ** Running Test Programhello World! ** Test gedaan! Geretourneerde status = 0We kan commandoregelcode gereed voor C insluiting: $ ./shellforge.py -v0 -C hello.c unsigned char commandoregelcode [] = "x55x89xe5x83xecx24x53xe8x00x00x00x00x5bx83xc3xf4x8bx83x67" "x00x00x00x89x45xf0x8bx83x6bx00x00x00x89x45xf4x8bx83x6fx00" "x00x00x89x45xf8x0fxb7x83x73x00x00x00x66x89x45xfcx8dx4dxf0" "xbax0ex00x00x00xb8x04x00x00x00xc7x45xecx01x00x00x00x53x8b" "x59xfcxcdx80x5bxb8x01x00x00x00xc7x45xecx00x00x00x00x53x8b" "x59xfcxcdx80x5bx5bxc9xc3x48x65x6cx6cx6fx20x77x6fx72x6cx64" "X21X0AX00"; INT MAIN (void) {((ongeldige (*) ()) shellcode) (); } We kunnen een XOR loader te vermijden x00 gebruiken bytes in de commandoregelcode $ ./shellforge.py -v0 -x hello.cxebx0dx5ex31xc9xb1x75x80x36x02x46xe2xfaxebx05xe8xeexffxffxffx57x8bxe7x81xeex26x51xeax02x02x02x02x59x81xc1xf6x89x81x65x02x02x02x8bx47xf2x89x81x69x02x02x02x8bx47xf6x89x81x6dx02x02x02x8bx47xfax0dxb5x81x71x02x02x02x64x8bx47xfex8fx4fxf2xb8x0cx02x02x02xbax06x02x02x02xc5x47xeex03x02x02x02x51x89x5bxfexcfx82x59xbax03x02x02x02xc5x47xeex02x02x02x02x51x89x5bxfexcfx82x59x59xcbxc1x4ax67x6ex6ex6dx22x75x6dx70x6ex66x23x08x02We kan een alfa-lader gebruiken om een bijna alfanumerieke commandoregelcode hebben (geef me wat meer tijd om zich te ontdoen van de twee duren niet alfanumerieke bytes) $ ./shellforge.py -v0 -R --loader = alpha hello.c hAAAAX5AAAAHPPPPPPPPah0B20X5Tc80Ph0504X5GZBXPh445AX5XXZaPhAD00X5wxxUPTYII19hA000X5sOkkPTYII19h0000X5cDi3PTY19I19I19I19h0000X50000Ph0A0AX50yuRPTY19I19I19I19h0000X5w100PTYIII19h0A00X53sOkPTYI19h0000X50cDiPTYI19I19hA000X5R100PTYIII19h00A0X500yuPTYI19I19h0000X50w40PTYII19I19h0600X5u800PTYIII19h0046X53By9PTY19 I19I19h0000X50VFuPTYI19I19h0000X5LC00PTYIII19h0060X5u79xPTY19I19I19I19h0000X5000FPTY19I19h2005X59DLZPTYI19h0000X500FuPTYI19I19h0010X5DLZ0PTYII19h0006X50Fu9PTY19I19I19I19h0000X5LW00PTYIII19h0D20X5Lx9DPTY19h0000X5000kPhA0A0X5ecV0PTYI19I19h0B0AX5FXLRPTY19h5550X5ZZZePTYI19 ?? De klassieke exec / bin / sh: #include "omvatten / sfsyscall.h" int main (void) {char * a [] = { "/ bin / sh", 0}; Execve (a , a, 0);} complexer voorbeeld: om een schelptiecode te maken die ports van localhost scant: #include "omvatten / sfssyscall.h" #include "omvatten / sfSocket.h" #define eerste 1 # Definieer de laatste 1024int Main (void) {struct Sockaddr_in SA; int s, i; char buf ; SA.SIN_FAMILY = PF_INET; SA.SIN_ADDR.S_ADDR = 0X0100007F; i = eerste-1; Schrijf (1, "begin einde", 4); sluiten (1); afsluiten (0);}


shellforge Gerelateerde software