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

ELF Osnovne informacije

Pre nego što počnete da eksploatišete bilo šta, zanimljivo je razumeti deo strukture ELF binarnog fajla:

ELF Basic Information

Alati za eksploataciju

Exploiting Tools

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:

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