Dit is een korte “writeup” van de jotihack2024.
Dit jaar bestond de challenge uit 10 steppen, deze worden los beschreven.

Step 1: Frequent gebruiker.

Bij de eerste challenge krijgen we een hoop ruis te horen als we de website openen.
Na wat draaien aan de “knop” vinden we de goede frequentie.
De andere makkelijkere optie is om de source van de pagina te bekijken.
Daar vinden we een linkje naar de mp3, hierin wordt de volgende URL gegeven.\

https://jotihack.com/nl/frequently

Stap 2: Groene vingers

De volgende stap is weer een website die audio speelt, nu is het echter geen ruis, maar een hoop gekke piepjes. We openen wederom de source van de pagina en zien hier dat het om een SSTV fragment gaat.
SSTV is een methode om beeld te versturen via de zender, de afbeelding wordt gecodeerd naar piepjes, de ontvangende partij zet vervolgens de ontvangen piepjes weer om naar beeld.
TODO: beter uitleg SSTV
Er is verschillende software om dit voor elkaar te krijgen. Ik heb gebruik gemaakt van Black Cat SSTV. Deze kan zelf detecteren welke codering er gebruikt is. Hier kwam uiteindelijk de volgende afbeelding uit:
Groene vingers
Het is wat slecht te zien, maar onderop staat de volgende URL:\

https://frequently-green.jotihack.com/

Stap 3: H4x0rs

Nu krijgen we een login scherm, maar gelukkig is het van een onhandige gebruiker die een postit gebruikt heeft om hints naar het wachtwoord te bewaren.
1337 h4x0rs
Na het inloggen krijgen we toegang tot de volgende stap:

https://frequently-green.jotihack.com/nl/special/admin

Stap 4: Encrypted h4x

Bij deze stap zien we dat we toegang hebben tot een admin paneel, maar helaas alles in versleuteld.
Gelukkig staat er bovenaan gelijk welke encryptiemethode er gebruikt is namelijk PGP.
PGP staat voor Pretty Good Privacy, maakt gebruik van assymetrische cryptografie, dit houd in dat er 2 sleutels zijn.
1 om berichten te versleutelen (dit is het publieke deel)
1 om berichten te ontsleutelen (dit deel is prive en moet dat blijven)
Als iemand dus een versleuteld bericht naar mij wil sturen dan deel ik mijn “public key” met ze, hiermee versleutelen ze het bericht.
Vervolgens kan ik met mijn “private key” het bericht weer ontsleutelen.

Er staan meerdere berichten op de website, maar degene die we nodig hebben om verder te kunnen is de laatste.
Ik heb gebruik gemaakt van een online PGP decoder, https://8gwifi.org/pgpencdec.jsp
Onder het security tab staat de “private key”, deze heb je nodig om berichten te ontsleutelen. In combinatie met de passphrase die onderop de pagina genoemd wordt.
Hiernaast wordt er nog een TOKEN gegeven, deze hebben we nu nog niet nodig, naar we slaan hem wel op voor de zekerheid.\

Als we het laatste bericht ontsleutelen dan komen we op de volgende informatie:
alt text

De volgende URL is dus: https://jotihack.com/complicated

Stap 5: Gecompliceerd vraagstuk

Nu krijgen we alleen een plaatje te zien, als we het plaatje downloaden en vervolgens de exif info bekijken zien we dat er in de ImageDescription een URL verstopt zit: https://jotihack.com/img/2024/stega.png
Dit kun je ook met een online EXIF reader bekijken.

De volgende URL is: https://jotihack.com/stega-2024

Stap 6: Verduisterde code

Nu krijgen we heel weinig informatie om op af te gaan, het enige wat we weten is dat het wachtwoord gechecked wordt middels een MD5 hash.
De MD5 hash waar tegen gecontroleerd wordt is in de source van de pagina te vinden:

alt text

Nu wordt het wat lastiger, want een MD5 is niet te decrypten. De gebruikelijke methode om deze informatie toch te krijgen is via een Rainbow Table.
In dit geval is het iets makkelijker en is het wachtwoord het thema van dit jaar, in kleine letters en aan elkaar geschreven. (net als in stap 3)

Na het invoeren van het juiste wachtwoord krijg je een API key en de URL naar de API.\

Stap 7: Aapies kijken

Een API is een (Application Programming Interface) deze worden veel gebruikt door software om geautomatiseerd bepaalde dingen te regelen in andere applicaties/services etc. Als je op de link in de vorige stap klikt kom je op een website waar je de endpoints van de API kunt zien:
alt text

Ik heb Postman gebruikt om rond te kijken in de API, maar er zijn vast nog andere opties.\

Eerst kijken we welke editions er zijn:\

GET https://api.jotihack.com/api/editions
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":true,"data":[
        {"id":"e1968eba-36ef-4aa3-b1b2-7698a4943e60","name":"HackingDots"},
        {"id":"1234c299-e4d4-4b5d-a7a0-4332f6e24bab","name":"HackinglyGreen"},
        {"id":"51afb9e4-1394-4eda-ae23-d064cb7932ea","name":"Hacking Proof"}
    ]
}

Vervolgens willen we meer info over de editie van dit jaar:\

GET https://api.jotihack.com/api/edition/1234c299-e4d4-4b5d-a7a0-4332f6e24bab
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":true,"data":
    {
        "id":"1234c299-e4d4-4b5d-a7a0-4332f6e24bab",
        "name":"Hackingly Green",
        "start":"2024-10-18 18:00",
        "end":"2024-10-20 16:00",
        "status":"active",
        "year":2024,
        "objectivesKey":"7bd2bb7c-59dd-4566-afa2-10d978322b01"
    }
}

Vervolgens willen we de objectives voor dit jaar bekijken:\

GET https://api.jotihack.com/api/objectives/7bd2bb7c-59dd-4566-afa2-10d978322b01
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":true,"data":[
        {"id":"bf792989-6606-4a00-a08e-1ce7bed80d56","name":"FrequentFlyer","step":1},
        {"id":"f92f3950-0c8b-4056-9b01-4ae3b5cdb08f","name":"Greenfingers","step":2},
        {"id":"fcccb2b7-52ec-4cd2-8648-7fe73f3cf486","name":"H4x0rs","step":3},
        {"id":"b394e7a7-0b35-46ec-b8e4-0c5e5ea50215","name":"Encryptedh4x","step":4},
        {"id":"64557e49-73a0-48a6-9a49-568dbdcd6509","name":"Complicatedquestion","step":5},
        {"id":"3b738a5c-1fa9-432e-a380-4c099885f4e4","name":"ObfuscatedCode","step":6},
        {"id":"43028bc1-b8e7-414e-9327-733ab8c24c69","name":"API","step":7},
        {"id":"6d122808-2466-4fab-b215-54d899f9b70c","name":"Keying the Hall of Fame","step":8},
        {"id":"17a41a63-e407-4b26-99f6-0616363ff069","name":"Solve 8 to reach this goal","step":9},
        {"id":"b420161e-eb2c-4cde-967c-1d0eb0747c3c","name":"Email","step":10}
    ]
}

We bekijken alle losse objectives voor hints wat er van ons verwacht wordt:\

GET https://api.jotihack.com/api/objective/6d122808-2466-4fab-b215-54d899f9b70c
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":true,"data":{
        "id":"6d122808-2466-4fab-b215-54d899f9b70c",
        "name":"Keying the Hall of Fame","step":8,
        "goal":"Try to insert yourself into the Hall Of Fame under the team name \"jotih4x\""
    }
}

Ok dat is duidelijk, we weten nu wat we moeten doen voor de volgende stap.

Stap 8: Hall of (SH/F)ame

Om een beter idee te krijgen hoe ons PUT request eruit moet zien kijken we eerst eens naar de huidige HallOfFame:\

GET https://api.jotihack.com/api/hallOfFame/1234c299-e4d4-4b5d-a7a0-4332f6e24bab
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":true,"data":{
        "id":"47cdf2eb-69cd-4f31-99d9-4325ae071bc0",
        "categories":[
            {"id":"b4cfd112-1053-47d1-9ee4-8c0fb97bc5cf","name":"Explorers"},
            {"id":"be0a8b71-e6c7-40f4-976d-1479ca6d6caf","name":"Roverscouts"},
            {"id":"54a8546e-ef98-445e-9c35-62f68040841b","name":"Plusscouts"}
        ],
        "entries":[]
    }
}

Ok dat gaf niet heel veel informatie maar het request zou er zo uit moeten zien:
/hallOfFame/{editionId}/{categoryId}

Dus hieruit volgt dat we een PUT request moeten doen naar (het voorbeeld is voor plusscouts):

PUT https://api.jotihack.com/api/hallOfFame/1234c299-e4d4-4b5d-a7a0-4332f6e24bab/54a8546e-ef98-445e-9c35-62f68040841b
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
RESPONSE: 

{
    "success":false,
    "data":[],
    "message":"Can not alter the Hall of Fame without the X-HOF-TOKEN"
}

Blijkbaar hebben we nog een token nodig om te mogen schrijven naar de API, gelukkig hebben we die bij stap4 opgeslagen:\

PUT https://api.jotihack.com/api/hallOfFame/1234c299-e4d4-4b5d-a7a0-4332f6e24bab/54a8546e-ef98-445e-9c35-62f68040841b
HEADER: X-AUTHENTICATION-TOKEN: 05482377dc926018639d573e11a02ad7
HEADER: X-HOF-TOKEN: 1734f547c056909b3db37fd2f41aaefe
BODY: {"name":"jotih4x","participants":"Wouter","finishmoment":"2024-10-18 16:58"}
RESPONSE: 

{
    "success":true,
    "data":{
        "nextUrl":"https:\/\/frequentlygreen.jotihack.com\/luchtverkeer"
    }
}

Stap 9: Luchtverkeer

We krijgen wat informatie over een weerballon die opgelaten is op 3 oktober en een formule om wat informatie van die ballon om te rekenen naar de uiteindelijke URL. Het eerste probleem is dat er behoorlijk weinig info te vinden is over een weerballon. Gelukkig zit er in het openingsfilmpje van de jota/joti een hint verstopt. alt text
Hier kunnen we de volgende code lezen: W2430193
En naast deze code is te zien in het filmpje dat de sonde vanaf de Bilt opgestegen is. Na wat googlen komen we uit op een website om radiosondes te tracken: https://radiosondy.info/ Echter, de sonde die in het filmpje te zien is, is helaas niet op 3 oktober de lucht in gegaan, maar op 9 oktober.
Gelukkig heeft de genoemde website een mogelijkheid om alle lanceringen vanaf een bepaalde locatie te tonen, hier filteren we op ‘De Bilt’ en vervolgens zoeken we in de tabel op de juiste datum:
Sondelijst

Hieruit vinden we de volgende sonde: W2410847
Gelanceerd vanuit de Bilt, en een “Date Of Manufacture” van 2024-10-03.\

De gegevens van deze probe gebruiken we vervolgens in de formule:
eerste 3 getallen van de lengtegraad na de komma (XXX) van de startlocatie
Vermenigvuldigen met het aantal kms wat de sonde als hoogste bereikt heeft. (YY)
Dit vermenigvuldigen we met zichzelf. en als laatste een XOR met de serial van sonde. )ZZZZZZZ)\

XXX = 177
Startlocatie

YY = 34
Radiosonde

ZZZZZZZ = 2410847

Je krijgt dan deze formule: ANTWOORD = ((XXX * YY) ^ 2) || ZZZZZZZ

34363227 = ((177 * 34)) ^ 2 || 2410847

Ga naar https://jotihack.com/result-34363227

Stap 10: Email

In de laatste stap hoef je alleen wat info te mailen aan de organisatie om in de Hall of Fame te komen (dat is inmiddels niet meer mogelijk)