hacktricks/binary-exploitation/basic-binary-exploitation-methodology
2024-04-07 22:24:39 +00:00
..
tools Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 22:24:39 +00:00
elf-tricks.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 04:42:46 +00:00
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 04:42:46 +00:00

Osnovna metodologija binarne eksploatacije

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije o ELF-u

Pre nego što počnete eksploatisati bilo šta, korisno je razumeti deo strukture ELF binarnog fajla:

{% content-ref url="elf-tricks.md" %} elf-tricks.md {% endcontent-ref %}

Alati za eksploataciju

{% content-ref url="tools/" %} tools {% endcontent-ref %}

Metodologija preplavljivanja steka

S obzirom na toliko tehnika, dobro je imati šemu kada će svaka tehnika biti korisna. Imajte na umu da će iste zaštite uticati na različite tehnike. Naći ćete načine zaobilaženja zaštita u svakom delu zaštite, ali ne u ovoj metodologiji.

Kontrolisanje toka

Postoje različiti načini na koje možete kontrolisati tok programa:

  • Preplavljivanje steka prepisivanjem pokazivača povratka sa steka ili EBP -> ESP -> EIP.
  • Možda će biti potrebno zloupotrebiti Prekoračenje celobrojne vrednosti da biste izazvali prekoračenje.
  • Ili putem Proizvoljnog pisanja + Pisanja šta gde do Izvršenja
  • Formatiranje stringova: Zloupotreba printf za pisanje proizvoljnog sadržaja na proizvoljne adrese.
  • Indeksiranje nizova: Zloupotreba loše dizajniranog indeksiranja kako biste mogli kontrolisati neke nizove i dobiti proizvoljno pisanje.
  • Možda će biti potrebno zloupotrebiti Prekoračenje celobrojne vrednosti da biste izazvali prekoračenje
  • bof do WWW putem ROP-a: Zloupotreba prekoračenja bafera za konstruisanje ROP-a i mogućnost dobijanja WWW.

Tehnike Pisanja šta gde do Izvršenja možete pronaći u:

{% content-ref url="../arbitrary-write-2-exec/" %} arbitrary-write-2-exec {% endcontent-ref %}

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šan eksploatacija, posebno ako neke zaštite treba zaobići. Stoga, korisno je razmotriti neke opcije kako učiniti jednu ranjivost eksploatabilnom više puta u istom izvršavanju binarnog fajla:

  • Upisati adresu main funkcije ili adresu gde se ranjivost dešava u ROP lanac.
  • Kontrolisanjem odgovarajućeg ROP lanca možda ćete moći izvršiti sve radnje u tom lancu
  • Upisati adresu exit u GOT (ili bilo koju drugu funkciju koju koristi binarni fajl pre završetka) adresu da se vrati nazad do ranjivosti
  • Kao što je objašnjeno u .fini_array, ovde čuvajte 2 funkcije, jednu da ponovo pozove ranjivost i drugu da pozove __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 određenim parametrima) kako biste dobili zastavicu.
  • U običnom bof-u bez PIE i canary samo treba upisati adresu u adresu povratka sačuvanu 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 postaviti više parametara da biste pravilno pozvali funkciju ret2win možete koristiti:
  • ROP lanac ako postoji dovoljno gedžeta da pripremite sve parametre
  • SROP (u slučaju da možete pozvati ovaj sistemski poziv) da kontrolišete mnoge registre
  • Gedžeti iz ret2csu i ret2vdso da kontrolišete nekoliko registara
  • Putem Pisanja šta gde do Izvršenja možete zloupotrebiti druge ranjivosti (ne bof) da biste pozvali funkciju win.
  • Preusmeravanje pokazivača: U slučaju da stek sadrži pokazivače ka funkciji koja će biti pozvana ili ka stringu koji će biti korišćen od strane zanimljive funkcije (system ili printf), moguće je prepisati tu adresu.
  • ASLR ili PIE mogu uticati na adrese.
  • Neinicijalizovane promenljive: Nikad ne znate.

Cilj: RCE

Putem shell koda, ako je nx onemogućen ili mešanje shell koda sa ROP-om:

  • (Stack) Shell kod: Ovo je korisno za smeštanje shell koda na stek pre ili posle prepisivanja pokazivača povratka, a zatim skočiti na njega da ga izvršite:
  • U svakom slučaju, ako postoji canary, u običnom bof-u moraćete da je zaobiđete (procurite)
  • Bez ASLR i nx moguće je skočiti na adresu steka jer se nikada neće promeniti
  • Sa ASLR moraćete koristiti tehnike poput ret2esp/ret2reg da biste skočili na nju
  • Sa nx, moraćete koristiti neki ROP da biste pozvali memprotect i napravili neku stranicu rwx, kako biste zatim smeštali shell kod tamo (pozivanjem read na primer) i zatim skočili tamo.
  • Ovo će mešati shell kod sa ROP lancem.

Putem syscalls-a

  • Ret2syscall: Korisno za pozivanje execve kako bi se pokrenule proizvoljne komande. Potrebno je pronaći gadgete za pozivanje određenog syscall-a sa parametrima.
  • Ako su ASLR ili PIE omogućeni, moraćete ih pobediti kako biste koristili ROP gadgete iz binarnog koda ili biblioteka.
  • SROP može biti koristan za pripremu ret2execve
  • Gadgeti iz ret2csu i ret2vdso za kontrolu nekoliko registara

Putem libc-a

  • Ret2lib: Korisno za pozivanje funkcije iz biblioteke (obično iz libc) poput system sa nekim pripremljenim argumentima (npr. '/bin/sh'). Potrebno je da binarni kod učita biblioteku sa funkcijom koju želite pozvati (obično libc).
  • Ako je statički kompajliran i nema PIE, adresa system-a i /bin/sh se neće promeniti, pa je moguće statički ih koristiti.
  • Bez ASLR i poznavanja verzije libc-a koja je učitana, adresa system-a i /bin/sh se neće promeniti, pa je moguće statički ih koristiti.
  • Sa ASLR ali bez PIE, poznavanjem libc-a i sa binarnim kodom koji koristi system funkciju moguće je ret na adresu system-a u GOT-u sa adresom '/bin/sh' u parametru (morate ovo da otkrijete).
  • Sa ASLR ali bez PIE, poznavanjem libc-a i bez binarnog koda koji koristi system:
  • Koristite ret2dlresolve da rešite adresu system-a i pozovete je
  • Pobedite ASLR i izračunajte adresu system-a i '/bin/sh' u memoriji.
  • Sa ASLR i PIE i bez poznavanja libc-a: Potrebno je:
  • Pobediti PIE
  • Pronaći korišćenu verziju libc-a (procureti nekoliko adresa funkcija)
  • Proveriti prethodne scenarije sa ASLR-om kako biste nastavili.

Putem EBP/RBP

  • Stack Pivoting / EBP2Ret / EBP Chaining: Kontrolišite ESP kako biste kontrolisali RET putem sačuvanog EBP-a na steku.
  • Korisno za off-by-one preplavljivanje steka
  • Korisno kao alternativni način za završetak kontrole EIP-a dok zloupotrebljavate EIP za konstruisanje payload-a u memoriji, a zatim skakanje na njega putem EBP-a

Razno