blagajna
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| blagajna [2025/02/11 14:19] – lss | blagajna [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| < | < | ||
| - | Postoje glasine da jedan proizvođač online blagajni ima backdoor u programu koji dopušta napadaču da dobije shell na serveru na kojem se blagajna pokreće. Možeš li ga otkriti i iskoristiti da pročitaš flag? | + | Postoje glasine da jedan proizvođač online blagajni ima backdoor u programu koji dopušta napadaču |
| + | 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 telnet chal.platforma.hacknite.hr 13015 ako koristite Windows | + | Na online servis se možeš spojiti naredbom: |
| + | | ||
| + | | ||
| Hint: Global Offset Table . Entry za exit funkciju | Hint: Global Offset Table . Entry za exit funkciju | ||
| </ | </ | ||
| - | Ovo je reversing zadatak u kojemu je potrebno pronaći način za pokretanje shella. Program korišten za reversing je Ghidra. | + | Ovo je reversing zadatak u kojem treba naći način za pokretanje shella. Program korišten za reversing je Ghidra. |
| - | Pokretanjem programa korisnika se pita za unos opcije 1-4. | + | Pokretanjem programa, korisnika se pita za unos opcije 1 do 4. |
| {{blagajna: | {{blagajna: | ||
| - | Ponuđene opcije su prijava blagajnika, ispis podataka o programu, početak unosa stavki te izlaz. | + | Ponuđene opcije su: prijava blagajnika, ispis podataka o programu, početak unosa stavki te izlaz. |
| Prijava blagajnika uključuje unos naziva blagajnika te broj zaposlenika. | Prijava blagajnika uključuje unos naziva blagajnika te broj zaposlenika. | ||
| Line 31: | Line 34: | ||
| Zadnja opcija jest izlaz iz programa. | Zadnja opcija jest izlaz iz programa. | ||
| - | Kako bi se riješio zadatak najprije je potrebno dekompajlirati | + | Kako bi se riješio zadatak, najprije je potrebno dekompajlirati |
| - | Postavljenjem unutar main funkcije može se pronaći glavni switch odgovoran za loop unosa opcija. | + | Postavljenjem unutar main funkcije može se pronaći glavni switch odgovoran za petlju |
| {{blagajna: | {{blagajna: | ||
| - | Svaka opcija poziva svoju zasebnu funkciju. Funkcija za opciju jedan jest prikazana na sljedećoj slici. | + | Svaka opcija poziva svoju zasebnu funkciju. Funkcija za opciju jedan je prikazana na sljedećoj slici. |
| {{blagajna: | {{blagajna: | ||
| - | Buffer u koji se upisuju podaci | + | Spremnik (engl. |
| - | koji predstavlja broj zaposlenika. | + | |
| Funkcija za opciju 2 je prikazana na sljedećoj slici. | Funkcija za opciju 2 je prikazana na sljedećoj slici. | ||
| Line 48: | Line 50: | ||
| {{blagajna: | {{blagajna: | ||
| - | Iako je funkcionalnost za vrijeme izvođenja programa naizgled bila samo ispis teksta, analizom funkcije vidi se if statement koji pregledava je li broj na offsetu 38 | + | Iako je funkcionalnost za vrijeme izvođenja programa naizgled bila samo ispis teksta, analizom funkcije vidi se naredba "if" koja pregledava je li broj na offsetu 38 prvog parametra veći od 100 te, ako je, se od adrese 0x404060 indeksira parametrom |
| - | prvog parametra veći od 100 te ako je se od adrese 0x404060 indeksira parametrom param2 te upisuje podatak koji se nalazi na offsetu 38 prvog parametra. | + | funkcije |
| - | funkcije prvi parametar koji je proslijeđen ovoj funkciji | + | 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, |
| - | Adresa 0x404060 pripada .got sekciji. To je sekcija koja sadrži pointere na funkcije dinamički povezanih datoteka, u ovom slučaju libc. Izmjenjivanjem neki od podataka | + | |
| - | zapisanih u .got sekciji | + | |
| 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 | + | 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 "local_b0" |
| - | ima naziv local_b0 (sami naziv može varirati od analize do analize, bitno je da se prati gdje se ta varijabla koristi). Pregledom ostatka funkcije main može se pronaći | + | odsječak |
| - | odsječak | + | |
| {{blagajna: | {{blagajna: | ||
| - | Kod kojim se upisuje u varijablu jest dio 3. opcije unutar | + | Kôd kojim se upisuje u varijablu jest dio 3. opcije unutar |
| - | ne izmijenjuje | + | 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) | + | Kako bi se pokrenuo |
| - | te upisati vrijednost broja zaposlenika na dobivenu adresu. | + | |
| - | Kako bi se podigao | + | |
| - | toku programa), te kao prvi argument imati vrijednost adrese stringa kojom se podiže shell. Uobičajeni argument kojim se podiže shell jest "/ | + | |
| - | 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 | + | -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 |
| - | -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 | + | 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 |
| - | 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 | + | za završetak programa. |
| - | za završetka programa. | + | |
| {{blagajna: | {{blagajna: | ||
blagajna.1739283565.txt.gz · Last modified: 2025/12/01 11:40 (external edit)