Osnovna Metodologija Eksploatacije Binarnih Datoteka
Reading time: 8 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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
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.
Osnovne Informacije o ELF-u
Pre nego što počnete sa eksploatacijom bilo čega, zanimljivo je razumeti deo strukture ELF binarne datoteke:
Alati za Eksploataciju
Metodologija Stack Overflow-a
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 Tokova
Postoje različiti načini na koje možete kontrolisati tok programa:
- Stack Overflows prepisivanjem povratne adrese sa 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 kontrolisati neke nizove i dobiti 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 datoteci:
- 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 koju drugu funkciju koju koristi binarna datoteka pre završetka) adresu 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 na 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.
- Gadgete iz ret2csu i ret2vdso da kontrolišete nekoliko 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.
- Uninitialized variables: Nikad ne znate.
Cilj: RCE
Putem shellcode-a, ako je nx onemogućen ili mešanjem shellcode-a sa ROP-om:
- (Stack) Shellcode: Ovo je korisno za smeštanje shellcode-a na 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 unutra (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 gadget-e iz binarne datoteke ili biblioteka.
- SROP može biti koristan za pripremu ret2execve.
- Gadgeti iz ret2csu i ret2vdso za kontrolu nekoliko 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 binarna datoteka učita biblioteku sa funkcijom koju želite da pozovete (libc obično). - Ako je staticki kompajlirana i bez PIE, adresa
system
i/bin/sh
se neće menjati, tako da je moguće koristiti ih statički. - Bez ASLR i znajući verziju libc koja je učitana, adresa
system
i/bin/sh
se neće menjati, tako da je moguće koristiti ih statički. - Sa ASLR ali bez PIE, znajući libc i sa binarnom datotekom koja 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, znajući libc i bez binarne datoteke koja 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
libc
verziju 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 na steku.
- Korisno za off-by-one prelivanja steka.
- Korisno kao alternativni način za 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.
- Uninitialized variables: Nikad 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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
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.