Stack Shellcode
Basiese Inligting
Stok shellcode is 'n tegniek wat gebruik word in binêre uitbuiting waar 'n aanvaller shellcode skryf na 'n kwesbare program se stok en dan die Instruksie-aanwyser (IP) of Uitgebreide Instruksie-aanwyser (EIP) wysig om na die plek van hierdie shellcode te wys, wat veroorsaak dat dit uitgevoer word. Dit is 'n klassieke metode wat gebruik word om ongemagtigde toegang te verkry of arbitrêre bevele uit te voer op 'n teikensisteem. Hier is 'n uiteensetting van die proses, insluitend 'n eenvoudige C-voorbeeld en hoe jy 'n ooreenstemmende uitbuiting met Python en pwntools kan skryf.
C-voorbeeld: 'n Kwesbare Program
Kom ons begin met 'n eenvoudige voorbeeld van 'n kwesbare C-program:
Hierdie program is vatbaar vir 'n buffer overflow as gevolg van die gebruik van die gets()
funksie.
Kompilasie
Om hierdie program te kompileer terwyl verskeie beskermings gedeaktiveer word (om 'n vatbare omgewing te simuleer), kan jy die volgende bevel gebruik:
-fno-stack-protector
: Deaktiveer stapelbeskerming.-z execstack
: Maak die stapel uitvoerbaar, wat nodig is vir die uitvoering van shellcode wat op die stapel gestoor word.-no-pie
: Deaktiveer Posisioneel Onafhanklike Uitvoerbare, wat dit makliker maak om die geheue-adres te voorspel waar ons shellcode geleë sal wees.-m32
: Kompileer die program as 'n 32-bis uitvoerbare, dikwels gebruik vir eenvoudigheid in uitbuitingsontwikkeling.
Python Uitbuiting met behulp van Pwntools
Hier is hoe jy 'n uitbuiting in Python kan skryf met behulp van pwntools om 'n ret2shellcode aanval uit te voer:
Hierdie skrip konstrueer 'n lading wat bestaan uit 'n NOP-glybaan, die shellcode, en dan oorskryf die EIP met die adres wat na die NOP-glybaan wys, om te verseker dat die shellcode uitgevoer word.
Die NOP-glybaan (asm('nop')
) word gebruik om die kans te verhoog dat die uitvoering in ons shellcode "gly" ongeag die presiese adres. Pas die p32()
argument aan na die beginadres van jou buffer plus 'n offset om in die NOP-glybaan te land.
Beskermings
ASLR moet gedeaktiveer word sodat die adres betroubaar oor uitvoerings heen is, anders sal die adres waar die funksie gestoor word nie altyd dieselfde wees nie en sal jy 'n lek nodig hê om uit te vind waar die wenfunksie gelaai is.
Stapelkanaries moet ook gedeaktiveer word, anders sal die gekompromitteerde EIP terugkeeradres nooit gevolg word nie.
NX stapel beskerming sal die uitvoering van die shellcode binne die stapel voorkom omdat daardie gebied nie uitvoerbaar sal wees nie.
Ander Voorbeelde & Verwysings
64-bit, ASLR met stapeladreslek, skryf shellcode en spring daarna
32-bit, ASLR met stapellek, skryf shellcode en spring daarna
32-bit, ASLR met stapellek, vergelyking om oproep na exit() te voorkom, oorskryf veranderlike met 'n waarde en skryf shellcode en spring daarna
arm64, geen ASLR, ROP-gadget om stapel uitvoerbaar te maak en na shellcode in stapel te spring
Last updated