Home OP Holmgang 2023
Post
Cancel

OP Holmgang 2023

20-21. September kjørte Kripos en ny runde med OP Holmgang. CTFen er litt annerledes enn de “standard” CTFene, fordi man blir presentert med en del bevismateriale (man får ei mappe med en god del rapporter, bilder og andre filer, og vi må finne ut selv hvilke beviser som kan hjelpe med å løse hvilke oppgaver), og må ut ifra disse finne frem til flaggene. En slags etterforsknings-CTF altså.

Geolocalisation

Help the cop find the shop

Challenge

Vi skal finne koordinatene til en butikk som vi har et bilde av, og som var markert med first ransomware attempt da det ble beslaglagt av politiet. Hvis vi ser gjennom rapportene på bevismaterialet vi har kan vi se denne rapporten som sier vi har 2 bilder som kom fra en seized mappe First Ransomware attempt Oscar Jensen.

Report Politirapport

Hvis vi tar en kikk på de to bildene fra rapporten kan vi se en fisk og en butikk. Vi skal altså finne koordinatene til denne butikken.

Fishy.jpgWyatt.jpg
FishyWyatt

Hvis vi gjør et bilde-søk med fiskebildet får vi opp treff som sier at fisken er lokalisert i Djurs Sommerland i Danmark. De har en egen Western-landsby som det ser ut som om Wyatt Earp suvenir butikken kan høre til.

Med Google Maps kan vi bevege oss rundt i denne Western-landsbyen i Djurs Sommerland, og finner til slutt butikken på koordinatene 56.424, 10.550, som er flagget til oppgaven.

Wyatt Earp Google street view av samme lokasjon

No OSINT for you

Challenge

Oppgave hinter til at man ikke skal bruke OSINT til å løse denne oppgaven. Intended løsning for denne oppgaven involverte at man skulle se at bildet var større enn hva man forventet av et vanlig PNG bilde, som betyr at bildet kan inneholde noe skjult informasjon. Men, jeg løste denne oppgaven mens jeg holdt på å løse en annen oppgave, og endte dermed opp med å løse denne accidentally ved bruk av OSINT istedet.

Beslaglagsrapporten og bildet tilhørende oppgaven ser slik ut.

Rapport Beslaglagsrapport

Lokasjon Map view av lokasjon vi skal finne

Jeg gjorde et bilde-søk med dette bildet og fikk et treff på et X (Twitter)-innlegg fra 2020. Bletchely Park Tilfeldig X (Twitter) post av samme lokasjon

Lokasjonen på bildet, og flagget, er Bletchley Park.

Entity Finding

Snapchat snapshot

Challenge

Vi har en politirapport for noen snapchat bilder og videoer, samt selve bildene og videoene. De to bildene og den ene videoen inneholder ikke noe nyttig for å løse oppgaven.

Report Politirapport

Video Èn av snapchat videoene som var beslaglagt

Videoen er bare på 2 sekunder, og zoomer litt frem og tilbake på en telegram chat. Hvis man zoomer godt inn på videoen, og pauser på riktige frames kan man se at teksten 1NBiXjaXup4jAq8dDNtatCxddGaCaYxBm er skrevet inn i meldings-feltet i chatten, men ikke sendt ennå. Siden oppgaven spør etter en gyldig betalings-identitet kan dette ligne en wallet adresse for kryptovaluta.

Hvis man søker etter denne wallet adressen er det noen transaksjons-nettsider som ikke gir noe resultat for denne adressen. Det kommer av at adressen som vi ser i videoen er ett tegn for kort. Heldigvis genereres disse adressene på en slik måte at hvis man har en stor nok del av adressen, men ikke hele, så kan man fortsatt få tak i hele adressen.

For å finne hele adressen brukte jeg WalletExplorer, som finner det siste tegnet som mangler for å få den fulle adressen. Det viser seg at det er en Bitcoin wallet adresse, 1NBiXjaXup4jAq8dDNtatCxddGaCaYxBmb. Dette er også flagget til oppgaven.

Web Navigation

A key role

Challenge

Hvis vi leter i beslaglagsrapportene finner vi en rapport som refererer til en csv-fil som inneholder en chat-log.

Report Beslaglagsrapport

Chat-meldingene inneholder hint til flere forskjellige oppgaver, men for akkurat denne oppgaven er det èn melding som viser seg å være nyttig (for den løsningen som var intended ihvertfall).

1
chn-boy-xx: jeez, here you go grumpy : CHK@vRoXuzacqww8e0Jre8aHKIPStlq7W2d5CH6qr-kDn6Y,BIW62k1Y20Zxl~t617164~WBLt7l39d1zowMlGvq~XE,AAMC--8/ShadowEmpire.jpg

For å løse denne oppgaven på den “riktige” måten skulle man laste ned Hyphanet (tidligere Freenet), fordi denne keyen som det hintes til i oppgaveteksten kan brukes gjennom Hyphanet for å laste ned bildet ShadowEmpire.jpg (det er en routing-key som vi ser fra chat-meldingen, som kan brukes for selve nedlastningen).

Dette cluet kom jeg ikke fram til underveis i CTFen, men jeg løste allikavel oppgaven. Hvordan spør du? Jo, nå skal du få høre. Vi vet at oppgaven er ute etter en bygning, og vi vet fra oppgaveteksten at bildet ShadowEmpire er et bilde av denne bygningen. ShadowEmpire er nok ikke et tilfeldig navn gikk jeg ut ifra, og jeg kommer i farta bare på èn bygning som har et navn relatert til Empire, nettopp Empire State Building. Det viser seg at Empire State Building er flagget til oppgaven!

Software Analysis

Mind your Ps and Qs - part 1 of 2

Challenge

I bevismaterialet finner vi en politirapport, en beslaglagsrapport og en zip-fil, SafeFortifiedSecureLockCryptorSentinelVaultPro.zip, med programmet som politirapporten refererer til.

Seizure Report Beslaglagsrapport

Police Report Politirapport

Det er flere filer inni mappa, men alle filene tilhører det samme programmet; et krypteringsprogram for å kryptere filer. Oppgaveteksten hinter til developer mode, som er en funksjonalitet vi kan se i main.py filen.

1
2
3
4
5
6
7
8
9
10
11
12
dev_tools = None

def main():
    arguments = parse_arguments()
    if arguments.developer:
        try:
            global dev_tools
            import dev_tools
        except ModuleNotFoundError:
            exit("If you're a developer you need to add our internal dev_tools module to your working directory.\n"
                 "If you're not then please don't use the --developer option; "
                 "there is no way for you to git a hold of this file.")

I fra utdraget av main.py ser vi at dev_tools importeres hvis vi kjører programmet i developer mode. Ifølge oppgaveteksten skal vi finne denne filen, hvor flagget er md5summen dens.

Hvis vi ser nøyere i mappa vi unzippet ser vi en .git mappe med mange commit-meldinger. Det er dermed stor sannsynlighet for at dev_tools.py ligger et sted i denne loggen.

Vi leter i git loggen etter ei fil har dev som deler av navnet.

1
2
3
4
5
6
7
8
9
10
11
12
$ git log --all -- "*dev*"
commit 94d2bf5c50b4d9c24d3977d0a196a2bec8a6520e (origin/added-randomization)
Author: DarkCipherShadowPhreakBandit <dev.null@goaway.local>
Date:   Fri Nov 11 16:59:40 2022 +0300

    LGTM! Pretty messy, but I'll just squash it later. Weekend here I come!

commit 1bb11b80c97b546dcdd672a80df5569cefcfce3d (HEAD)
Author: xXx_ScriptyMcKidface420_xXx <dev.null@goaway.local>
Date:   Fri Nov 11 16:55:18 2022 +0300

    Gotta run, sorry! Generated additional randomization factors for the new guys and myself

Hvis vi sjekker committen 1bb11b80c97b546dcdd672a80df5569cefcfce3d finner vi ei __pycache__ mappe som inneholder ei fil som heter dev_tools.cpython-37.pyc. Md5summen av denne filen er flagget til oppgaven.

1
2
$ md5sum dev_tools.cpython-37.pyc
e9b30c1aa425379eac38b833c376fa53  dev_tools.cpython-37.pyc

Reversal rehearsal - part 1 of 2

Challenge

Vi har følgende beslaglagsrapport og politirapport. Seizure Report Beslaglagsrapport

Police Report Politirapport

Vi har også en executable som ifølge rapportene kan være malware, og ligner en DDoS bot.

Hvis man reverserer binaryen kan man se at blant annet funksjonene execve, connect, socket og send kalles av programmet. Kjører vi strings på binaryen finner vi tekststrengen c2.shadows-empire.invali, som ligner et ufullstendig hostname.

Leter vi litt i funksjonene definert i binaryen finner vi følgende kodesnutt Reversed

Siden flagget vårt bare er hostname:port som binaryen kommuniserer med kan vi bruke ltrace til å vise oss noen av funksjonene som blir kalt, fordi da får vi også se argumentene til funksjonene, og siden getaddrinfo blir kalt kan vi få se hvilken hostname og port den prøver å connecte med.

1
2
3
4
5
6
7
8
┌──(loevland㉿kali)-[~/ctf]
└─$ ltrace ./bot
calloc(26,1) = 0x559fc4d852a0
calloc(9, 1) = 0x559fc4d852d0
snprintf("31313", 8, "%d", 31313) = 5
getaddrinfo("c2.shadows-empire.invalid", "31337", 0x7ffc32ad4d30, 0x7ffc32ad4d28) = -2
exit(1 <no return ...>
+++ exited (status 1) +++

Binaryen prøver å koble til c2.shadows-empire.invalid på port 31337, som gir oss flagget c2.shadows-empire.invalid:31337.

Oppsummering

Alt i alt endte det med en 21. plass totalt. Kunne godt ha likt å sittet med denne CTFen noen timer ekstra, men det er ikke alltid like lett å ha timer til overs til en CTF midt i uka.

Likte CTFen godt og kommer nok til å delta neste år også hvis de arrangerer igjen. Dette er en CTF som kan anbefales å prøve ut, spesielt hvis man synes denne typen etterforskning er interessant.

This post is licensed under CC BY 4.0 by the author.