blagajna
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| blagajna [2025/04/29 21:13] – ppale | blagajna [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| da dobije shell na serveru na kojem se blagajna pokreće. Možeš li ga otkriti i iskoristiti da pročitaš flag? | da dobije shell na serveru na kojem se blagajna pokreće. Možeš li ga otkriti i iskoristiti da pročitaš flag? | ||
| - | Na online servis se možeš spojiti naredbom nc chal.platforma.hacknite.hr 13015 ako koristite Linux ili | + | Na online servis se možeš spojiti naredbom: |
| - | telnet chal.platforma.hacknite.hr 13015 ako koristite Windows. | + | |
| + | telnet chal.platforma.hacknite.hr 13015 ako koristite Windows. | ||
| Hint: Global Offset Table . Entry za exit funkciju | Hint: Global Offset Table . Entry za exit funkciju | ||
| Line 49: | Line 50: | ||
| {{blagajna: | {{blagajna: | ||
| - | Iako je funkcionalnost za vrijeme izvođenja programa naizgled bila samo ispis teksta, analizom funkcije vidi se naredba " | + | Iako je funkcionalnost za vrijeme izvođenja programa naizgled bila samo ispis teksta, analizom funkcije vidi se naredba " |
| funkcije vidimo da je prvi parametar koji je proslijeđen ovoj funkciji isti kao i u prethodnoj, odnosno, upisuje se broj zaposlenika. | funkcije vidimo da je prvi parametar koji je proslijeđen ovoj funkciji isti kao i u prethodnoj, odnosno, upisuje se broj zaposlenika. | ||
| - | Adresa 0x404060 pripada .got sekciji. To je sekcija koja sadrži pointere na funkcije dinamički povezanih datoteka, u ovom slučaju libc. Izmjenom | + | Adresa 0x404060 pripada .got sekciji. To je sekcija koja sadrži pointere na funkcije dinamički povezanih datoteka, u ovom slučaju libc. Napadi uobičajeno, |
| poziv system funkcije s argumentom za shell. | poziv system funkcije s argumentom za shell. | ||
| Jedino što je preostalo jest otkriti koji podatak je drugi parametar funkcije za ispis podataka o programu. Pregledom main funkcije argument kojim se poziva funkcija za ispis ima naziv " | Jedino što je preostalo jest otkriti koji podatak je drugi parametar funkcije za ispis podataka o programu. Pregledom main funkcije argument kojim se poziva funkcija za ispis ima naziv " | ||
| Line 60: | Line 61: | ||
| Kôd kojim se upisuje u varijablu jest dio 3. opcije unutar glavne petlje odgovorne za unos broja stavki. Praćenjem toka programa vidi se da se nakon toga upisa nigdje drugdje ne izmijeni vrijednost unutar te varijable (unutar iste iteracije). | Kôd kojim se upisuje u varijablu jest dio 3. opcije unutar glavne petlje odgovorne za unos broja stavki. Praćenjem toka programa vidi se da se nakon toga upisa nigdje drugdje ne izmijeni vrijednost unutar te varijable (unutar iste iteracije). | ||
| Dakle, kada bi se unutar broja stavki upisala ispravna vrijednost, njome se mogu proizvoljno indeksirati adrese krečući od 0x404060 (s razmacima od 8 bajta) te upisati vrijednost broja zaposlenika na dobivenu adresu. | Dakle, kada bi se unutar broja stavki upisala ispravna vrijednost, njome se mogu proizvoljno indeksirati adrese krečući od 0x404060 (s razmacima od 8 bajta) te upisati vrijednost broja zaposlenika na dobivenu adresu. | ||
| - | Kako bi se pokrenuo shell, treba upisati vrijednost adrese kojom se poziva system funkcija na neku od dostupnih dinamičkih funkcija (tj. one koje se koriste u normalnom toku programa), te kao prvi argument imati vrijednost adrese stringa kojom se pokreče shell. Uobičajeni argument kojim se podiže shell jest "/ | + | Kako bi se pokrenuo shell, treba upisati |
| - | Dakle, koraci potrebni za podizanje | + | Dakle, koraci potrebni za pokretanje |
| -Upisati adresu system funkcije u broj zaposlenika. To može biti vrijednost unutar .plt sekcije ili adresa unutar libc sekcije. Pošto je za unos adrese iz libc sekcije potrebna nekakava vrsta leaka njene adrese (koji nije dostupan) upisivat će se adresa iz .plt. Vrijednost adrese system iz .plt sekcije jest 0x401070 odnosno 4198512. | -Upisati adresu system funkcije u broj zaposlenika. To može biti vrijednost unutar .plt sekcije ili adresa unutar libc sekcije. Pošto je za unos adrese iz libc sekcije potrebna nekakava vrsta leaka njene adrese (koji nije dostupan) upisivat će se adresa iz .plt. Vrijednost adrese system iz .plt sekcije jest 0x401070 odnosno 4198512. | ||
| -Unijeti broj stavki za indeksiranje od adrese 0x404060. Ako se kao broj stavki unese 0, vrijednost će biti zapisana na 0x404060. Ako je uneseno 1, vrijednost će biti zapisana na 0x404060 + 1 * 8 (pointer aritmetika). Zbog funkcije koja se koristi za učitavanje. Na izračunatoj adresi se mora nalaziti funkcija koja se poziva unutar normalnog toka programa, te se ne smije pozivati prije završetka idućeg koraka (još je potrebno unijeti adresu stringa za shell) kako ne bi došlo do greške u izvođenju te izlaza iz programa. Funkcija koja će se prepisivati jest exit upravo iz tog razloga. Indeks potreban za exit jest adresa exit-a unutar .got sekcije oduzeto sa 0x404060 te sve podijeljeno s 8, tj. (0x404070-0x404060)/ | -Unijeti broj stavki za indeksiranje od adrese 0x404060. Ako se kao broj stavki unese 0, vrijednost će biti zapisana na 0x404060. Ako je uneseno 1, vrijednost će biti zapisana na 0x404060 + 1 * 8 (pointer aritmetika). Zbog funkcije koja se koristi za učitavanje. Na izračunatoj adresi se mora nalaziti funkcija koja se poziva unutar normalnog toka programa, te se ne smije pozivati prije završetka idućeg koraka (još je potrebno unijeti adresu stringa za shell) kako ne bi došlo do greške u izvođenju te izlaza iz programa. Funkcija koja će se prepisivati jest exit upravo iz tog razloga. Indeks potreban za exit jest adresa exit-a unutar .got sekcije oduzeto sa 0x404060 te sve podijeljeno s 8, tj. (0x404070-0x404060)/ | ||
| - | -Unos argumenta za podizanje | + | -Unos argumenta za pokretanje |
| Dakle, cijeli proces pokretanja shella jest unos opcije 1 s brojem zaposlenika postavljenim na 0x401070, unošenje vrijednost 2 za broj stavki unutar opcije 3, ispis podataka o programu kako bi se izmijenila adresa unutar got-a za funkciju exit, ponovni upis broja stavki, ali s vrijednošću 0x004022a3 (tj. 4203171) te na kraju pozivanje opcije 4 | Dakle, cijeli proces pokretanja shella jest unos opcije 1 s brojem zaposlenika postavljenim na 0x401070, unošenje vrijednost 2 za broj stavki unutar opcije 3, ispis podataka o programu kako bi se izmijenila adresa unutar got-a za funkciju exit, ponovni upis broja stavki, ali s vrijednošću 0x004022a3 (tj. 4203171) te na kraju pozivanje opcije 4 | ||
blagajna.1745961205.txt.gz · Last modified: 2025/12/01 11:40 (external edit)