Stack Shellcode
Osnovne informacije
Stack shellcode je tehnika korišćena u binarnom eksploatisanju gde napadač piše shellcode u stack ranjivog programa, a zatim modifikuje Instruction Pointer (IP) ili Extended Instruction Pointer (EIP) da pokazuje na lokaciju ovog shellcode-a, uzrokujući njegovo izvršavanje. Ovo je klasična metoda korišćena za sticanje neovlašćenog pristupa ili izvršavanje proizvoljnih komandi na ciljnom sistemu. Evo detaljnog objašnjenja procesa, uključujući jednostavan C primer i kako biste mogli napisati odgovarajući exploit koristeći Python sa pwntools.
C Primer: Ranjiv program
Započnimo sa jednostavnim primerom ranjivog C programa:
Ovaj program je ranjiv na preplavljivanje bafera zbog korišćenja gets()
funkcije.
Kompilacija
Da biste kompajlirali ovaj program isključujući različite zaštite (kako biste simulirali ranjivo okruženje), možete koristiti sledeću komandu:
-fno-stack-protector
: Onemogućava zaštitu steka.-z execstack
: Čini stek izvršivim, što je neophodno za izvršavanje shell koda smeštenog na steku.-no-pie
: Onemogućava izvršavanje poziciono nezavisnog izvršnog fajla, olakšavajući predviđanje memorijske adrese gde će se nalaziti naš shell kod.-m32
: Kompajlira program kao 32-bitni izvršni fajl, često korišćeno radi jednostavnosti u razvoju eksploatacije.
Python Eksploatacija korišćenjem Pwntools
Evo kako biste mogli napisati eksploataciju u Pythonu koristeći pwntools za izvođenje napada ret2shellcode:
Ovaj skript konstruiše payload koji se sastoji od NOP slide-a, shellcode-a, i zatim prepisuje EIP sa adresom koja pokazuje na NOP slide, osiguravajući izvršenje shellcode-a.
NOP slide (asm('nop')
) se koristi kako bi se povećala šansa da izvršavanje "klizi" u naš shellcode bez obzira na tačnu adresu. Prilagodite argument p32()
na početnu adresu vašeg bafera plus offset kako biste dospele do NOP slide-a.
Zaštite
ASLR treba biti onemogućen kako bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i trebalo bi da imate neki leak kako biste saznali gde je funkcija učitana.
Stack Canaries takođe treba da budu onemogućeni ili kompromitovana povratna adresa EIP-a neće biti praćena.
NX zaštita stack-a bi sprečila izvršavanje shellcode-a unutar stack-a jer ta regija neće biti izvršiva.
Ostali Primeri & Reference
64-bit, ASLR sa leak-om adrese stack-a, pisanje shellcode-a i skakanje na njega
32-bit, ASLR sa leak-om adrese stack-a, pisanje shellcode-a i skakanje na njega
32-bit, ASLR sa leak-om adrese stack-a, upoređivanje kako bi se sprečilo pozivanje exit(), prepisivanje promenljive sa vrednošću, pisanje shellcode-a i skakanje na njega
arm64, bez ASLR-a, ROP gedžet za omogućavanje izvršavanja stack-a i skakanje na shellcode u stack-u
Last updated