BF Addresses in the Stack
Last updated
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)
Ako se suočavate sa binarnim fajlom zaštićenim kanarincem i PIE-om (Izvršivi sa nezavisnim položajem) verovatno ćete morati da pronađete način da ih zaobiđete.
Imajte na umu da checksec
možda neće otkriti da je binarni fajl zaštićen kanarincem ako je statički kompajliran i nije sposoban da identifikuje funkciju.
Međutim, to možete ručno primetiti ako primetite da je vrednost sačuvana na stack-u na početku poziva funkcije i ta vrednost se proverava pre izlaska.
Da biste zaobišli PIE morate procureti neku adresu. Ako binarni fajl ne procuri nijednu adresu, najbolje je brute-force-ovati RBP i RIP sačuvane na stack-u u ranjivoj funkciji. Na primer, ako je binarni fajl zaštićen i kanarincem i PIE-om, možete početi sa brute-force-ovanjem kanarinca, zatim će sledećih 8 bajtova (x64) biti sačuvani RBP i sledećih 8 bajtova će biti sačuvani RIP.
Pretpostavlja se da se povratna adresa unutar stack-a odnosi na glavni binarni kod, što će obično biti slučaj ako je ranjivost locirana u binarnom kodu.
Da biste brute-force-ovali RBP i RIP iz binarnog fajla, možete zaključiti da je validan pogodak bajta tačan ako program nešto izbaci ili se jednostavno ne sruši. Ista funkcija kao ona koja je pružena za brute-force-ovanje kanarinca može se koristiti za brute-force-ovanje RBP i RIP:
Poslednje što vam je potrebno da biste pobedili PIE jeste da izračunate korisne adrese iz procurjelih adresa: RBP i RIP.
Iz RBP-a možete izračunati gde pišete svoj shell na steku. Ovo može biti veoma korisno kako biste znali gde ćete upisati string "/bin/sh\x00" unutar steka. Da biste izračunali udaljenost između procurjelog RBP-a i vašeg shell koda, jednostavno postavite prekidnu tačku nakon što procuri RBP i proverite gde se nalazi vaš shell kod, zatim možete izračunati udaljenost između shell koda i RBP-a:
Iz RIP-a možete izračunati baznu adresu PIE binarnog fajla što će vam biti potrebno za kreiranje validnog ROP lanca.
Za izračunavanje bazne adrese jednostavno uradite objdump -d vunbinary
i proverite poslednje adrese disasemblovanog koda:
U ovom primeru možete videti da je potrebno samo 1 bajt i po da biste locirali sav kod, zatim, bazna adresa u ovom slučaju će biti procuren RIP ali završava na "000". Na primer, ako je procurena vrednost 0x562002970ecf
, bazna adresa će biti 0x562002970000
Prema nekim posmatranjima iz ovog posta, moguće je da server neće "pucati" sa nekim vrednostima koje nisu tačne kada procure vrednosti RBP i RIP, a BF skripta će misliti da su dobijene dobre vrednosti. To je zato što je moguće da neke adrese jednostavno neće uzrokovati pad čak i ako nisu tačne.
Prema tom blog postu preporučuje se dodavanje kratkog kašnjenja između zahteva ka serveru.
Naučite i vežbajte hakovanje AWS:HackTricks Obuka AWS Red Tim Ekspert (ARTE) Naučite i vežbajte hakovanje GCP: HackTricks Obuka GCP Red Tim Ekspert (GRTE)