28. 10. 2023

CTF - The Catch 2023 - Web protocols

Ďalšia úloha z drillovania posádky za 2 body. Tento výcvik sa zameriava na webové protokoly. Vieme len virtuálnu adresu a že na nej bežia viaceré weby, ktoré potrebujú správnu komunikáciu a z odpovedí vyskladáme vlajku.


Ahoy, officer,

almost all interfaces of the ship's systems are web-based, so we will focus the exercise on the relevant protocols. Your task is to identify all webs on given server, communicate with them properly and assembly the control string from responses.



Hľadanie portov


Vieme o adrese web-protocols.cns-jv.tcc

Prvá časť úlohy bude nájsť všetky weby, keďže vieme adresu a po bežnom otvorení v prehliadači vráti chybu, je jasné že začíname hľadať porty, teda tzv. PORTSCAN.

Pre túto úlohu je vhodné použiť linuxovú utilitu nmap, avšak ja som sa snažil fungovať kvôli openVPN pod windowsom. Naštartoval som preto mobaXterm, ktorý má v sebe niečo ako veľmi zjednodušený cygwin. Nmap sa mi doň však doinštalovať nepodarilo. Ďalšou voľbou bol netcat resp nc. Ten však bežal extra pomaly, zhruba 2 sekundy na port. Neskôr som si všimol, že priamo moba má utility, kde je aj rýchly port scan.

port scanner v mobaXterm

Pingom som zistil IP 10.99.0.122, spustil celý rozsah. Po prebehnutí vyšli s bežiacimi službami porty 5009, 5011, 5020, 8011, 8020.


Komunikácia s webmi


Weby na portoch 5011, 5020, 8011 šli otvoriť po pridaní za adresu cez wget, teda klasicky:
http://web-protocols.cns-jv.tcc:5011

Po stiahnutí priamo vrátili rôzne cca 500KB PNG obrázky s mačkami zakódované v base64. Bez html kódu.

ako písali v pomôcke, server vráti aspoň jednu mačku

Port 8020 nefungoval, avšak dalo sa z chyby dovtípiť, že ide o šifrovanú komunikáciu a stačilo zmeniť http na https. Odpoveď bola opäť mierne zmenené počty mačiek otočené tvárami.

Najväčší oriešok bol na koniec port 5009. Tu nefungoval ani wget, ako písala pomôcka k úlohe, nerobí všetko čo tvrdí. Číslo portu nenápadne odkazuje na protokol http 0.9. Ako sa teda k tomu webu dostať?

telnet 10.99.0.122 5009

Trying 10.99.0.122...
Connected to 10.99.0.122.
Escape character is '^]'.

GET / HTTP/0.9

HTTP/0.9 200 OK

SESSION=RkxBR3trckx0; iVBORw0KGgoAAAANSUhEUgAAB4AAAAeACAYAAAAvokrGAAAAmmVYSWZNTQAqAAAACAAGARIAAwAAAAEAAQAAARoABQAAAAEAAABWARsABQAAAAEAAABeASgAAwAAAAEAAgAAATEAAgAAABYAAABmh2kABAAAAAEAAAB8AAAAAAAAAEgAAAABAAAASAAAAAFQaXhlbG...

Príkaz telnet nás postaví do úlohy browsera a keďže viem, ako sa pýta GET príkazom web v protokole 1.1 (vidím to pri wget), spravím požiadavku verzie 0.9 a dostaneme.. ďalšie mačky.


Mačky ? Nie, račšej koláče !


Po dlhom pátraní a kombinovaní obrázkov mačiek v editore, porovnávaní rozdielov v súboroch som dospel k tomu, že s mačkami to asi ani nič nemá. Potom ma však čosi napadlo.

Odpoveď v telnete začínala reťazcom SESSION. Krátky reťazec ktorý nedáva zmysel, ale môže byť bežne súčasťou webu pre odlíšenie klientov.

Hľadal som teda session aj pri ostatných portoch a áno, bolo uložené v cookies. Teda nedávalo to veľmi zmysel lebo na časti portov sa session reťazec v cookies opakoval, pre istotu som cookies predtým vždy zmazal a teda malo by byť rôzne no nebolo:

port 5009:  session RkxBR3trckx0
port 5011:  session LXJ2YnEtYWJJ
port 5020:  session Ui00MzNBfQ==
port 8011:  session rovnaká ako v 5011
port 8020:  session rovnaká ako v 5020

Tretia hodnota cookie session s rovná sa dáva tušiť, že ide o base64, nažhavíme cyberChef, výtupy sú:

FLAG{krLt
-rvbq-abI
R-433A}

Spolu je to teda vlajka, riešenie vyzerá byť jednoduché, no pátranie kam pozerať zabralo dosť času. Nešťastné mačky, čo som sa nakombinoval tých obrázkov.
FLAG{krLt-rvbq-abIR-433A}


Žiadne komentáre:

Zverejnenie komentára