ret2libc
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ret2libc [2023/11/15 17:51] – kresimir | ret2libc [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====Ret2Libc==== | ||
| + | |||
| + | Ret2Libc je naziv za binarnu eksploataciju kojom napadač preplavljuje povratnu adresu na izvršni kod unutar neke od funkcija iz libc-*.so (najčešće funkcija system()). | ||
| + | |||
| ====Tajne čokolade==== | ====Tajne čokolade==== | ||
| + | |||
| + | ===Opis zadatka:=== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Ante neće uspjeti ostvariti dominaciju tržišta sladoleda bez savršenog recepta za čokoladu, što u konačnici znači da neće imati dovoljno novaca za najbolje novo računalo kojim bi mogao igrati RTX Minecraft na 4k rezoluciji i 144Hz. | ||
| + | |||
| + | Ante je načuo da isti program koji je čuvao recept za sladoled od vanilije zapravo negdje čuva i recept za savršeni sladoled od čokolade. Preciznije, na istom računalu/ | ||
| + | |||
| + | Možeš li se spojiti na program, ostvariti pristup poslužitelju - tako da možeš izvršavati naredbe u ljusci (engl. shell) operacijskog sustava, tzv. remote code execution - te pronaći i taj recept čime bi osigurao da Ante u potpunosti dominira tržištem sladoleda? | ||
| + | |||
| + | Podaci za spajanje i podaci o programu (izvorni kod i izvršna datoteka) su isti kao i u zadatku Tajne vanilije. Program je na poslužitelju pokrenut unutar Alpine Linux 3.16 containera (to ne bi trebalo bitno utjecati na rješavanje zadatka). | ||
| + | |||
| + | ===Rješenje: | ||
| Potrebno je napraviti sistemski poziv za pretraživanje datoteke " | Potrebno je napraviti sistemski poziv za pretraživanje datoteke " | ||
| Line 12: | Line 30: | ||
| Unos stringa "/ | Unos stringa "/ | ||
| - | Rješenje će biti izvedeno uz pomoć već postojećeg stringa. Razlika će dakle biti u adresi koja sadrži "/ | + | Rješenje će biti izvedeno uz pomoć postojećeg stringa. Razlika će dakle biti u adresi koja sadrži "/ |
| - | rješenje koristi username ili password varijablu, unutar payloada je potrebno | + | |
| odgovarajuće varijable. | odgovarajuće varijable. | ||
| Line 41: | Line 58: | ||
| U rješenju će se koristiti adresa 0x4050d9. | U rješenju će se koristiti adresa 0x4050d9. | ||
| - | Zbog x64 calling konvencije pointer na adresu na kojoj se nalazi string "/ | + | Zbog x64 calling konvencije pointer na adresu na kojoj se nalazi string "/ |
| To znači da kako bi se sistemski poziv system ispravno pozvao, prije samog poziva potrebno je postaviti | To znači da kako bi se sistemski poziv system ispravno pozvao, prije samog poziva potrebno je postaviti | ||
| željenu adresu u registar rdi. | željenu adresu u registar rdi. | ||
| Line 51: | Line 68: | ||
| Kako bi se pronašla takva funkcija koriste se rop alati. U ovom primjeru korišteni alat je ROPGadget no postoje i brojni drugi (npr. Ropper, PWN tools...). | Kako bi se pronašla takva funkcija koriste se rop alati. U ovom primjeru korišteni alat je ROPGadget no postoje i brojni drugi (npr. Ropper, PWN tools...). | ||
| - | Nareba za pronalazak " | + | Nareba za pronalazak " |
| ROPGadget --silent --ropchain --binary main | ROPGadget --silent --ropchain --binary main | ||
| Line 72: | Line 89: | ||
| 4. Prepisati povratnu adresu s adresom system poziva //0x4015b6 (adresa system poziva se može saznati s npr. disas system) --> ret; | 4. Prepisati povratnu adresu s adresom system poziva //0x4015b6 (adresa system poziva se može saznati s npr. disas system) --> ret; | ||
| - | Nakon uspješnog unosa sastavljenog payloada na udaljenom računalu | + | Nakon uspješnog unosa sastavljenog payloada na udaljenom računalu |
| Napomena 1.: | Napomena 1.: | ||
| - | x64 calling konvencija zahtjeva da su povratne adrese poredane | + | x64 calling konvencija zahtjeva da su povratne adrese poredane |
| Napomena 2.: | Napomena 2.: | ||
ret2libc.1700070718.txt.gz · Last modified: 2025/12/01 11:40 (external edit)