Osnovna metodologija binarnog eksploatisanja
Reading time: 7 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
ELF Osnovne informacije
Pre nego što počnete da eksploatišete bilo šta, zanimljivo je razumeti deo strukture ELF binarnog fajla:
Alati za eksploataciju
Metodologija prelivanja steka
Sa toliko tehnika, dobro je imati shemu kada će svaka tehnika biti korisna. Imajte na umu da će iste zaštite uticati na različite tehnike. Možete pronaći načine da zaobiđete zaštite u svakoj sekciji zaštite, ali ne u ovoj metodologiji.
Kontrola toka
Postoje različiti načini na koje možete kontrolisati tok programa:
- Stack Overflows prepisivanjem povratne adrese iz steka ili EBP -> ESP -> EIP.
- Možda će biti potrebno da zloupotrebite Integer Overflows da izazovete prelivanje.
- Ili putem Arbitrary Writes + Write What Where to Execution.
- Format strings: Zloupotreba
printf
za pisanje proizvoljnog sadržaja na proizvoljne adrese. - Array Indexing: Zloupotreba loše dizajniranog indeksiranja kako biste mogli da kontrolišete neke nizove i dobijete proizvoljno pisanje.
- Možda će biti potrebno da zloupotrebite Integer Overflows da izazovete prelivanje.
- bof to WWW via ROP: Zloupotreba prelivanja bafera za konstrukciju ROP-a i mogućnost dobijanja WWW.
Možete pronaći tehnike Write What Where to Execution u:
Večne petlje
Nešto što treba uzeti u obzir je da obično samo jedna eksploatacija ranjivosti možda neće biti dovoljna da se izvrši uspešna eksploatacija, posebno neke zaštite treba zaobići. Stoga, zanimljivo je raspraviti o nekim opcijama za učiniti jednu ranjivost eksploatabilnom više puta u istoj izvršnoj instanci binarnog fajla:
- Pisanje u ROP lancu adrese
main
funkcije ili na adresu gde se ranjivost dešava. - Kontrolisanjem odgovarajućeg ROP lanca možda ćete moći da izvršite sve akcije u tom lancu.
- Pisanje u
exit
adresu u GOT (ili bilo kojoj drugoj funkciji koju koristi binarni fajl pre završetka) adrese za povratak na ranjivost. - Kao što je objašnjeno u .fini_array, ovde čuvajte 2 funkcije, jednu za ponovno pozivanje ranjivosti i drugu za pozivanje
__libc_csu_fini
koja će ponovo pozvati funkciju iz.fini_array
.
Ciljevi eksploatacije
Cilj: Pozvati postojeću funkciju
- ret2win: Postoji funkcija u kodu koju treba pozvati (možda sa nekim specifičnim parametrima) kako biste dobili zastavicu.
- U običnom bof-u bez PIE i canary samo treba da upišete adresu u povratnu adresu smeštenu u steku.
- U bof-u sa PIE, moraćete da je zaobiđete.
- U bof-u sa canary, moraćete da je zaobiđete.
- Ako treba da postavite nekoliko parametara da biste ispravno pozvali ret2win funkciju, možete koristiti:
- ROP lanac ako ima dovoljno gadgeta da pripremite sve parametre.
- SROP (u slučaju da možete pozvati ovaj syscall) da kontrolišete mnogo registara.
- Gadgeti iz ret2csu i ret2vdso za kontrolu više registara.
- Putem Write What Where mogli biste zloupotrebiti druge ranjivosti (ne bof) da pozovete
win
funkciju. - Pointers Redirecting: U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- ASLR ili PIE mogu uticati na adrese.
- Neinicijalizovane promenljive: Nikada ne znate.
Cilj: RCE
Putem shellcode-a, ako je nx onemogućen ili mešanjem shellcode-a sa ROP:
- (Stack) Shellcode: Ovo je korisno za smeštanje shellcode-a u stek pre ili posle prepisivanja povratne adrese i zatim skakanja na njega da ga izvršite:
- U svakom slučaju, ako postoji canary, u običnom bof-u moraćete da je zaobiđete (leak).
- Bez ASLR i nx moguće je skočiti na adresu steka jer se nikada neće promeniti.
- Sa ASLR moraćete da koristite tehnike kao što su ret2esp/ret2reg da biste skočili na njega.
- Sa nx, moraćete da koristite neki ROP da pozovete
memprotect
i učinite neku stranicurwx
, kako biste zatim smeštali shellcode u nju (pozivajući read na primer) i zatim skočili tamo. - Ovo će mešati shellcode sa ROP lancem.
Putem syscalls
- Ret2syscall: Korisno za pozivanje
execve
da izvrši proizvoljne komande. Morate biti u mogućnosti da pronađete gadget-e za pozivanje specifičnog syscall-a sa parametrima. - Ako su ASLR ili PIE omogućeni, moraćete da ih savladate da biste koristili ROP gadgete iz binarnog fajla ili biblioteka.
- SROP može biti koristan za pripremu ret2execve.
- Gadgeti iz ret2csu i ret2vdso za kontrolu više registara.
Putem libc
- Ret2lib: Korisno za pozivanje funkcije iz biblioteke (obično iz
libc
) kao što jesystem
sa nekim pripremljenim argumentima (npr.'/bin/sh'
). Potrebno je da binarni fajl učita biblioteku sa funkcijom koju želite da pozovete (libc obično). - Ako je staticki kompajliran i bez PIE, adrese
system
i/bin/sh
se neće menjati, tako da ih je moguće koristiti statički. - Bez ASLR i poznavanja verzije libc koja je učitana, adrese
system
i/bin/sh
se neće menjati, tako da ih je moguće koristiti statički. - Sa ASLR ali bez PIE, poznavanjem libc i sa binarnim fajlom koji koristi
system
funkciju moguće jeret
na adresu system u GOT sa adresom'/bin/sh'
u parametru (to ćete morati da otkrijete). - Sa ASLR ali bez PIE, poznavanjem libc i bez binarnog fajla koji koristi
system
: - Koristite
ret2dlresolve
da rešite adresusystem
i pozovete je. - Zaobiđite ASLR i izračunajte adresu
system
i'/bin/sh'
u memoriji. - Sa ASLR i PIE i ne znajući libc: Morate:
- Zaobići PIE.
- Pronaći verziju
libc
koja se koristi (leak nekoliko adresa funkcija). - Proveriti prethodne scenarije sa ASLR da nastavite.
Putem EBP/RBP
- Stack Pivoting / EBP2Ret / EBP Chaining: Kontrola ESP-a da kontrolišete RET putem smeštenog EBP-a u steku.
- Korisno za off-by-one prelivanja steka.
- Korisno kao alternativni način da završite kontrolu EIP-a dok zloupotrebljavate EIP za konstrukciju payload-a u memoriji i zatim skakanje na njega putem EBP-a.
Razno
- Pointers Redirecting: U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- ASLR ili PIE mogu uticati na adrese.
- Neinicijalizovane promenljive: Nikada ne znate.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.