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

Osnovne Informacije o ELF-u

Pre nego što počnete sa eksploatacijom bilo čega, zanimljivo je razumeti deo strukture ELF binarne datoteke:

ELF Basic Information

Alati za Eksploataciju

Exploiting Tools

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:

Write What Where 2 Exec

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 stranicu rwx, 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 je system 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 je ret 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 adresu system 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