Report - FE Hackerakademi Større Faglige Opgave

FE Report Source code: Download FE_COGNITIO.zip Paths referenced in this report (e.g. src/U5FS_Extractor/) refer to the structure inside the archive. Summary This report details how I unpacked the U5FS image and my work on the NetUp Protocol attack vector and Update service attack vector including my observations along the way. By reading the U5 Filesystem Reference Manual carefully and building an extraction script I was able to get to the three main assignments. I chose to work mainly on the NetUp Protocol (that is my primary attack vector). ...

June 19, 2026 · 43 min · Jeppe Sørensen

Alog

Filer: Download challenge files Writeup: alog Indledende Observationer Jeg fik udleveret en access.log fil og skulle finde et flag gemt i loggen. Filnavnet og konteksten indikerede, at der var tale om webserver logs, sandsynligvis Apache eller Nginx. Jeg startede med at undersøge loggen manuelt og søge efter usædvanlige mønstre. Recon / Kortlægning Første skridt var at søge efter flagformatet direkte: 1 grep "DDC{" access.log Dette returnerede en interessant request, hvor flaget så ud til at være delvist til stede i URL’en. ...

June 18, 2026 · 2 min · Jeppe Sørensen

Binary Caesar

Filer: Download challenge files Writeup: Binary Caesar Indledende Observationer Jeg fik udleveret: encryption.txt (ciphertext) main.py (krypteringslogik) Ciphertextet var: 1 pporkmhce}taii_}tomi}m{s Ved første øjekast lignede det ikke klassisk Caesar (ingen simpel rotation). Recon / Kortlægning Jeg åbnede main.py og analyserede krypteringsfunktionen. Jeg observerede følgende: Der bruges et custom alphabet: 1 abcdefghijklmnopqrstuvwxyzæøå{}_ Hvert tegn bliver konverteret til sit indeks i alfabetet. Krypteringen sker via: 1 encrypted_index = char_index ^ key_index Samme key-char bruges for hele teksten. ...

June 18, 2026 · 2 min · Jeppe Sørensen

Broken Invoice

Filer: Download challenge files Writeup: Broken Invoice Indledende Observationer Jeg fik udleveret en fil, som ifølge challenge-beskrivelsen var en beskadiget faktura. Efter download kørte jeg: 1 file broken_invoice Outputtet viste blot: 1 data Der var altså ingen genkendt filtype, hvilket indikerede, at filens header (magic bytes) sandsynligvis var ødelagt. Recon / Kortlægning Jeg åbnede filen i HxD for at inspicere rå bytes. Allerede i de første bytes kunne jeg se: ...

June 18, 2026 · 2 min · Jeppe Sørensen

Call Me Maybe

Filer: Download challenge files Writeup: Call Me Maybe Indledende Observationer Jeg fik udleveret en fil ved navn call_me_maybe, som ved afvikling bad om en passphrase til en “NoTech Security Terminal”. Ved forkert input gav programmet en tydelig hint-tekst: Hint: Maybe you should trace the calls... Jeg åbnede binæren i Detect It Easy og så, at det var en ELF64 Linux-binary (AMD64), så den skulle køres og analyseres i et Linux-miljø (f.eks. via WSL/VM). ...

June 18, 2026 · 2 min · Jeppe Sørensen

Disk Encryption

Filer: Download challenge files Writeup: Disk Encryption Indledende Observationer Jeg fik udleveret: server.py passwd.txt Serveren: Krypterede passwd.txt i memory med AES-XTS Brugte nøgle = SHA512(flag) (64 bytes = to AES-256 nøgler) Gav adgang til en ECB encryption oracle i debug-mode Tillod restore af én vilkårlig ciphertext-blok Printede flaget hvis en ikke-root bruger fik uid=0 og gid=0 Der var kun én integritetskontrol: Usernames måtte ikke ændres. Recon / Kortlægning I server.py så jeg: ...

June 18, 2026 · 3 min · Jeppe Sørensen

Existential Loading Bar

Writeup: Existential Loading Bar Indledende Observationer Jeg tilgik websitet og blev mødt af en admin-login side med en loadingbar der aldrig kom videre. Wappalyzer viste at backend kørte: Flask 3.1.5 Python 3.12.12 Der var ingen yderligere hints i UI’et, så jeg fortsatte med at undersøge koden. Recon / Kortlægning Jeg åbnede koden via View Source. I bunden af HTML’en fandt jeg følgende JavaScript: 1 2 3 4 5 6 7 8 <script> // Admin credentials (view source to see – don’t do this in production.) var ADMIN_USER = "admin"; var ADMIN_PASSWORD = "vibe_coding_ftw_2024"; if (window.location.search.indexOf("error=1") !== -1) { document.getElementById("err").textContent = "Nope. Try again. (Or just view source.)"; } </script> Her lå admin credentials hardcoded direkte i klient-side kode. ...

June 18, 2026 · 2 min · Jeppe Sørensen

Fear of long words

Filer: Download challenge files Writeup: Fear of long words Indledende Observationer Jeg fik udleveret en 32-bit ELF binær samt kildekoden. Servicen kunne tilgås via: 1 nc fear-of-long-words.cfire 1337 Ved første forbindelse blev følgende interface præsenteret: 1 2 I made a dictionary! Commands: add <length>, show, exit Programmet fungerede som en simpel ordbog hvor man kunne: add <length> – tilføje et ord show – vise alle gemte ord exit – afslutte programmet ...

June 18, 2026 · 2 min · Jeppe Sørensen

Fibonacci Caesar

Filer: Download challenge files Writeup: Fibonacci Caesar Indledende Observationer Jeg fik udleveret: main.py encryption.txt Beskrivelsen indikerede en modificeret Caesar-cipher, hvor forskydningen afhænger af Fibonacci-sekvensen. I main.py fandt jeg følgende logik: 1 2 3 4 5 6 7 a = fib(n) b = fib(n + 1) for ch in text: k = a % 26 ... a, b = b, a + b Det betød: Start-shift = Fₙ Næste shift = Fₙ₊₁ Derefter klassisk Fibonacci-opdatering pr. bogstav Alle shifts reduceres modulus 26 (alfabetets længde) Recon / Kortlægning Krypteringen pr. bogstav er: ...

June 18, 2026 · 2 min · Jeppe Sørensen

Hasher: Trust the Hash (They Said)

Writeup: Hasher: Trust the Hash (They Said) I denne challenge fik jeg kun udleveret et hash: 1 BB707DD63F792BFA73AD00C993875811 Jeg kunne se, at den bestod af 32 hex-tegn, hvilket tydede på, at det var en MD5-hash. I stedet for at brute force den selv, brugte jeg CrackStation til at slå hashen op. Jeg indsatte hashen i søgefeltet, og CrackStation fandt hurtigt det oprindelige input. Hashen svarede til: 1 letmeinplease Da flagformatet skulle være DDC{dit_svar_her}, indsatte jeg derfor: ...

June 18, 2026 · 1 min · Jeppe Sørensen