Web

XML-kontroll

En webbsida som är sårbar för XML eXternal Entity (XXE)-injektion: https://en.wikipedia.org/wiki/XML_external_entity_attack. På Linux-system lagras användarkonton i /etc/passwd, så genom att läsa ut den filen hittar man flaggan.

Robotfilter

En uppsättning CAPTCHA-aktiga sidor som till slut blir omöjliga att lösa. Varje nivå har en egen domän och alla möjliga subdomäner syns i certifikatet som webbsidan använder. Det går att hoppa direkt till den subdomänen som börjar på flag.

Fillagringstjänst

Från källkoden kan man se att filer läses ut via readFile(`./uploaded/${req.session}/${path}`). Detta är sårbart för path traversal för att läsa valfri fil på systemet, men sådana angrepp filtreras bort från path-variablen. Dock så går det att utnyttja session-kakan som saknar denna kontroll.

Sök

En MongoDB-injection som låter en filtrera på användares lösenord (som sparas i klartext). Det går dock inte att returnera lösenordet direkt, men med MongoDB-filter går det att gissa lösenordet tecken för tecken.

KaKlickare

Variabeln som sparar hur många clicks som är genomförda styrs av klienten via en kaka samt via JavaScript.

Exploatering

Riscy Business 1

En buffer overflow på RISCV-arkitekturen, kan t.ex. köras via QEMU. En win-funktion skriver ut flaggan.

Golf SM

Även fast programmet filtrerar bort negativa tal, så uppfattas tal större än 2**31 som negativa tal av resterande operationer i programmet, se Two's compliment. Sista hålet kan lösas med att göra: 2**32-900 = 4294966396 armhävningar.

Heapie

Ett Zig-program där är möjligt att få ett stycke och ett dokument som ligger på samma adress med sekvenser av allokeringar och deallokeringar. Det är sedan möjligt att skriva över metadata som pekar ut var dokumentet finns i minnet för att peka om det till flaggan och få utskrivningen av dokumentet att visa den.

JSFS

Om man skriver ett kommando som inte finns så får man hela "minifierade" källkoden utskriven till sig som en del av felmeddelandet. Terminalen är implementerad som en state machine och om "writeflag" finns i state:t så sparas flaggan till file i state:t. Via JavaScript prototype pollution är det möjligt att få detta att hända utan att känna till lösenordet.

Note

När JSON tolkas som en struct i Go så görs ingen skillnad på gemener/versaler, men om den tolkas som en map[string]any så blir det skillnad. Det går därför att sätta "IS-ADMIN":true (med versaler) för att kringgå kontrollen och samtidigt bli admin.

Kryptografi

Kassaskåpet 2 - "Bättre tur är skicklighet"

Eftersom random-funktionen i kontraktet nyttjar sig av blockhashen kan man beräkna i förhand vad den kommer att returnera. Kontrollen tx.origin != msg.sender medger att man måste deploya ett proxykontrakt att agera genom.

Zebran, Koordinatera och Piraterna

Se Zero-Knowledge Proof. Programmet bestämmer vilket tal den frågar efter beroende på tiden, vilket gör det möjligt att förutsäga vilken fråga som kommer dyka upp och anpassa sina valda tal för att lösa uppgiften utan att känna till hemligheten.

Skyltsmedjan

Utmaningen bygger på https://en.wikipedia.org/wiki/Digital_signature_forgery.Kortfattat beskriver artikeln att om du kan signaturen till m1 och m2, kan du beräkna signaturen för m1*m2. Genom att faktorisera Kund nr. {userid} får hämta flaggan kan man få programmet att signera dessa m1 och m2, detta medger att man kan förfalska signaturen till det kompletta meddelandet.

KrEncyclopedia

Genomför frekvensanalys på artiklarna, nyckeln som har använts för krypteringen kan då deriveras.

Forensik

Protokollkoll

En server som implementerar ett litet TLV (type-length-value)-protokoll. Typ 5 ger flaggan som svar och övriga typer ger "Error". En PCAP-fil finns given där typ 0-3 skickas. Typ- och längdfälten kan då identifieras genom att kolla på konversationerna i PCAP:en. Genom att testa olika typer kan flaggan hittas.

Stulen Konst

Datan är tagen från /dev/input/mice. När man har parsat formatet av datan kan det nyttjas ett visualiseringsbibliotek, t.ex. Pythons turtle för att rita en bild. Bilden innehåller flaggan.

Red teaming?

Datan är infraröda signaler från en Samsung TV-fjärrkontroll. Modellen kan gissas utifrån från det repeterade mönstret som börjar med 0xe0e0, vilket vid en sökning kan leda en till IR-protokoll. Med en översättningstabell kan man översätta datan till flaggan.

Långtidsminne

Minnesdumpen kommer från en VM där programmet C:\Users\Administrator\Downloads\metasploit_psexec_session_stager.exe har körts vid 2024-08-23 14:12:29. Filen kan analyseras med t.ex. Volatility, och genom att testa processrelaterade kommandon från en cheat sheet går det att hitta programmet via modulen windows.registry.userassist.

Reversering

Autentiseringsknas

Autentisering sker via PAM med en modul som hittas i /lib/security/pam_weird.so (filen refereras till från /etc/pam.d/sshd). Genom att SSH:a in som games kan man få containern att hämta DNS-uppslag från spelaren (ngrok och bind9 kan vara till nytta). När man ssh:ar in som flagholder kommer PAM-modulen att få PAM_RHOST som ett argument. Den kontrollerar sedan lösenordet man stoppar in mot chiffertext.end.flag.crate. Där chiffertet.end.flag.crate är ditt DNS-uppslag. Om den dekrypterade chiffertexten (en privat och publik RSA-nyckel finns i binären) stämmer med lösenordet som stoppades in får man flaggan.

Extraterrestriell Kommunikation

Pythonprogrammet enkodar morse till en bild. Bilden ses som ett koordinatsystem, mängden - och . i en bokstav ses som en X- och Y-koordinat. Den blåa färgkanalen avgör vilken position i flaggan bokstaven har, den röda färgkanalen avgör vilken bokstav pixeln syftar på i händelse av kollision. Med kollision menas att bokstäverna d,r och u pekar på samma koordinat eftersom ['d', 'r', 'u'] i morse är ['-..', '.-.', '..-'].

Fallet Om KÄRNkraftverket

Den öppna porten kör ett enkelt C-program som skickar data varje sekund. Kärnmodulen nyttjar två netfilter-krokar. Den för inkommande trafik kontrollerar vilka portar som får SYN-paket. För att modulen ska parsa paketen du skickar måste du inkludera 8 bytes som återfinns i binären. För att skicka TCP-paket som har SYN-flaggan satt och samtidigt innehålla data kan programmet hping3 nyttjas. Genom att slå på tre portar i rad: 1288, 5134 och 36112, så kommer den utåtgående kroken att ersätta trafik som kommer från port 50014 med flaggan.

Uppvärmning

Den stora if-satsen kan lösas med en SMT-lösare, såsom z3. Även fast man vinner skrivs flaggan aldrig ut. Efter varje gång man har lyckats så sparas det en historik av vinsten du använde. I och med att buffern av historik växer, så allokeras mer och mer minne. Efter att man förlorar frias detta minne. Flaggan printas inte när man vinner men den laddas in i en buffer. Genom att vinna tillräckligt många gånger och sen förlora med mening, kan man se till att flaggbuffern och historik buffern är en del av samma chunck i heapens fast-bin. flag kommer då få historikens gamla pekare och det leder till en use-after-free när spelaren ber programmet skriva ut historikbuffern.

Packman

En tjänst där man laddar upp filer, och sedan packar dem. Formatet följer byte, short: Där det motsvarar offset (från ett fast värde), count. Offseten kan beräknas genom att ladda upp egna filer med känt innehåll och se hur de packas, vilket låter en reversera processen.

Osint

Intern 2

Ossian har skaffat en webbsida på ossianwallengren.se. Dess källkod finns på GitHub. Dessutom finns en GitHub action som automatiskt deployar sidan från repot. Detta görs via SSH med en nyckel som sparas i en GitHub action secret. Tidigare var nyckeln sparad direkt i actionen, vilket fixades genom en rebase och en force push (enligt blogginlägget). Tyvärr för Ossian så sparar GitHub commits även om de har ersatts, så genom att plocka ut commithashen från bilden och gå till den på GitHub går det att hitta nyckeln och använda den för att logga in på servern.

HittaHit 1

Leta med hjälp av karta, Google Streetview, eller något annat liknande verktyg.

HittaHit 2

Via en sökning på adressen för huset i korsningen går det att hitta en nyhetsartikel om att huset har sålts med namn på nuvarande och föregående ägare. En sökning på "brastad bil" ger en bilfirma med samma namn som en av personerna i artikeln.

Övriga

Neovim

En simulering av spelet Nim. Artikeln beskriver hur man spelar optimalt. Första spelet går att lösa för hand, men det andra är tillräckligt stort för att medföra att man behöver scripta det.

Hönan och Ägget

Genom att ladda upp filer som är konstiga kan man se i error-loggen att det är make som körs för att kompilera filerna. Genom att ladda upp en fil som heter Makefile som innehåller en regel för att göra Makefile kan man få tjänsten att köra kommandot make Makefile. I regeln för hur den ska göra Makefile kan man då exekvera kod.

Kassaskåpet 1 - "Den Berömda Bosse"

Python-biblioteket web3 kan användas för att kommunicera med blockkedjan. Man skulle kunna tro att string private password inte går att komma åt, men detta kontrollerar endast att variabeln inte kan läsas genom kontraktets ABI. Funktionsanropet:

web3.eth.get_storage_at(CONTRACT, 0)

läser minnet och lösenordet vid kontrakets address.

Buggigt

En GDB-session där ett program har fastnat i ett segmenteringsfel. Funktionen print_flag() ska skriva ut flaggan, men den kraschar på grund av att mode-argumentet till fopen() är "open" istället för "r" (för "read"). Genom att sätta en breakpoint på print_flag(), starta om programmet, stega fram till efter att argumenten skrivits men innan fopen() anropas och byta ut strängen går det att få programmet att skriva ut flaggan.

Frågeformulär

Svara på frågorna och få en flagga.