![](https://securitybeztabu.pl/wp-content/uploads/2023/09/DownUnderCTF-2023-czyli-writeup-najwiekszego-australijskiego-CTF-1024x512.png)
Co to jest i dlaczego warto brać w nich udział
Turnieje CTF (ang. Capture the flag – zdobądź flagę) to popularny sposób na naukę przez zabawę w dziedzinie cyberbezpieczeństwa (i nie tylko). CTF-y polegają na rozwiązywaniu zadań z wielu różnych kategorii takich jak: OSINT, kryptografia, inżynieria wsteczna, eksploatacja binarna itd.
Dlaczego warto brać w nich udział?
- Możesz legalnie „pohackować” – z wyłączeniem oczywiście DDoS, bruteforce i innych technik przewidzianych przez regulaminy
- Nauka. CTF-y bardzo często składają się z zadań w kilku kategoriach, dzięki czemu każdy może znaleźć coś dla siebie. Znalazłem dwa cytaty, które doskonale to opisują:
„Nawet jeżeli w tasku nie dotrzesz do flagi, to nie ma siły, byś po drodze nie musiał czegoś poszukać i doczytać :)” – bl4de, artykuł na sekurak.pl
„Najmądrzejszy jest ten, który wie, czego nie wie…” – Sokrates
DownUnderCTF
DownUnderCTF to największy australijski CTF, organizowany corocznie od 2020 r. W tegorocznej edycji wzięło udział ponad 2000 drużyn i 4300 uczestników. Do rozwiązania było 68 zadań w 8 kategoriach: beginner, blockchain, crypto, misc, osint, pwn, rev i web.
Z założenia CTF przeznaczony był dla australijskich graczy, dlatego wraz z Cappybarą zaczęliśmy rozwiązywać zadania o 11.30, gdy w Sydney była już 19.30 J.
Wybrałem 7 najciekawszych zadań, które udało się nam rozwiązać.
Writeup
Poniżej znajdują się rozwiązania poszczególnych zadań, podzielone na kategorie.
Begginer
Proxed
Autor rozwiązania: Oskar
Zadanie składa się z dwóch części: linku do strony internetowej i archiwum z plikami.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/DownUnderCTF-2023-czyli-writeup-najwiekszego-australijskiego-CTF-1.png)
Poniższy link prowadzi do strony internetowej, na której widnieje komunikat:
untrusted IP: 10.152.0.17
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/DownUnderCTF-2023-czyli-writeup-najwiekszego-australijskiego-CTF-2.png)
Przejdźmy w takim razie do analizy archiwum, które zostało dołączone do zadania. W katalogu cmd znajduje się katalog secret_server, a w nim plik main.go.
Analizując plik znaleźliśmy dość interesujący fragment:
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104707466.png)
Oznacza to, iż możemy otrzymać flagę, o ile zapytanie zostanie wysłane z adresu IP 31.33.33.7. Można to zrobić dzięki cURL i nagłówka http „X-Forwarded-For:[ip]” – być może uda się dzięki temu nabrać serwer, iż wysyłamy zapytanie z konkretnego adresu. Pora to sprawdzić.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/DownUnderCTF-2023-czyli-writeup-najwiekszego-australijskiego-CTF-4.png)
Bingo! Mamy flagę J
Blinky Bill
Autor rozwiązania: Oskar
Zadanie składa się z pliku blinkybill.wav. W tle utworu można usłyszeć charakterystyczne sygnały, podobne do kodu Morse’a. Aby zobaczyć czy piosenka ma jakieś ukryte dno użyłem Audacity i opcji Spektogram.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104751824.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104757763.png)
Można zauważyć charakterystyczne dla kodu Morse’a sygnały. Odfiltrujmy je zmieniając zakres decybeli.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104805139.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104810486.png)
Udało się! Mamy widoczne krótkie i długie sygnały. Teraz pora je „przetłumaczyć” na litery.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104828491.png)
Mamy sensowne zdanie! Flaga to DUCTF{BRINGBACKTHETREES}.
Randomly chosen
Autor rozwiązania: Cappybara
Zadanie składa się z dwóch plików: randomly-chosen.py i output.txt.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_104953776.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105000213.png)
randomly-chosen.py generuje seed (liczbę) z przedziału od 0 do 1337, a następnie otwiera plik flag.txt. Następnie zmienna out dodaje losowy znak z pliku flag.txt pewną ilość razy. Jaka to ilość?
k = len(flag)*5))
Czyli – liczba dodanych losowo znaków jest 5 razy większa od liczby znaków flagi. Jak nam to może pomóc w dojściu do flagi?
Plik output.txt ma 305 znaków, czyli flaga ma 5 razy mniej znaków. Dzieląc 305 na 5 dostaniemy 61 – tyle znaków ma flaga!
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105007308.png)
Następnym krokiem jest stworzenie flagi pomocniczej o długości 61 znaków. Przykładową flagę zawierającą możliwe znaki flagi widać powyżej.
Aby dojść do flagi, należy znaleźć seed. Udało się Cappybarzewpaść na pomysł, aby porównać miejsca gdzie znajdują się znaki „{” i „}” w wybranych miejscach, ponieważ te miejsca są wspólne dla pliku output.txt i ciągu znaków wygenerowanego dzięki dobrego seedu dla pomocniczej flagi – zapisanego później jako output2.txt.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105014669.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105020871.png)
Udało się znaleźć seed, który wynosi 252.
Teraz pora na podmienienie znaków w pomocniczej fladze na znaki prawdziwej flagi. Potrzebne nam do tego są trzy pliki: flag.txt (flaga pomocnicza), output.txt i output2.txt.
Na podstawie tych trzech plików możemy dojść do prawdziwej flagi. Program zamienia literę w pomocniczej fladze na literę, która odpowiada jej na podstawie plików output.txt i output2.txt. Przykładowo – dla „a” będzie to litera „i” itd.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105027854.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105033517.png)
Zasada działania programu
Static file server
Autor rozwiązania: Cappybara
Zadanie składa się z archiwum i strony internetowej.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105040093.png)
Po wejściu na stronę widać logo CTF i zakładkę not the flag.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105107412.png)
Po wejściu w zakładkę zostajemy przekierowani na stronę o takim komunikacie. Spróbujmy więc wejść na /flag.txt.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105117360.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105123135.png)
Coś tu nie gra… Sprawdźmy pliki dołączone do zadania.
W pliku app.py widać odwołanie do lokalizacji /files, tak jakbyśmy byli zmuszeni do odwoływania się do niej podczas wysyłania zapytania.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105139389.png)
Spróbujmy w takim razie wykonać atak path traversal, czyli dojścia do pliku inną ścieżką, obchodząc zabezpieczenia serwera. Można wykorzystać do tego BurpSuite.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105144111.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105149442.png)
Udało się! Doszliśmy do /flag.txt wykorzystując obowiązkowe odwołanie do /files.
OSINT
Monke bars
Autor rozwiązania: Oskar
Myślę, iż to najciekawsze zadanie tego CTF. Nie mamy dołączonego żadnego pliku do zadania.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105159270.png)
Naszym celem jest znalezienie piosenki monke bars wraz z flagą. Zacznijmy więc poszukiwania!
Zacząłem poszukiwania od SoundClouda. Natknąłem się na piosenkę o identycznym tytule od nijakiego MC Fat Monke.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105205759.png)
Próbowałem na początku kombinować z autorem piosenki jako flagą, ale gdy wsłuchałem się w treść piosenki, wyłapałem charakterystyczny prefiks flagi: DUCTF, a następnie bardzo szybką składankę kilku słów. Wyłapałem również słowo bracket (nawias) – od tego momentu wiedziałem, iż flaga jest podana wprost w piosence! Dość oryginalny zabieg jak na CTF.
Przez godzinę próbowałem różnych kombinacji zasłyszanych słów, po czym ukazał się komentarz od autora piosenki.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105212275.png)
Dzięki temu udało mi się ustalić, iż flaga to DUCTF{smackithackitdropthatpacketcrackthistrack}. Piosenki można wysłuchać tutaj.
Faraday
Autor rozwiązania: Oskar
Dość nietypowe zadanie. Dostaliśmy numer telefonu kogoś nazywanego Faraday wraz z stroną internetową, która pozwala na znajdowanie urządzeń dzięki API. Wiemy również, iż nasz cel znajduje się w stanie Wiktoria w Australii, a to znacząco zawęża obszar poszukiwań w skali całej Ziemi J.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105230882.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105237514.png)
Wiktoria – na czerwono
Po wejściu na stronę widzimy dość ciekawą opcję – możliwość wysyłania zapytań do API telefonów. Oczywiście nie była to prawdziwa strona – działała tylko na spreparowany numer telefonu.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105244004.png)
Przykładowe zapytanie wyglądało tak:
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105251925.png)
Z dokumentacji dowiedziałem się, iż wartość promienia może zostać ustawiona maksymalnie na 200.000, dlatego ustawiłem taką wartość. W pole phoneNumber wpisałem numer telefonu podany w zadaniu.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105300286.png)
Zapytanie wyglądało tak:
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105305135.png)
Dostałem odpowiedź, ale nie mówiła zbyt wiele.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105312631.png)
Postanowiłem, iż skupię się bardziej na numerze telefonu. Wpisałem go w Google i dowiedziałem się, iż najprawdopodobniej pochodzi z Sydney.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105319145.png)
Uznałem, iż w takim wypadku wybiorę do badań punkt bliżej Sydney. Kliknąłem na losowy punkt w Wiktorii stosunkowo blisko Sydney.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105323727.png)
Źródło: Google Maps
Przepisałem jego współrzędne geograficzne: -36.869844, 147.578239.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105332931.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105339297.png)
Bingo! Wiemy, iż punkt znajduje się gdzieś w promieniu 200000 (prawdopodobnie metrów) od mojego losowo wybranego punktu. Próbowałem więc dalej szukać dokładniejszej lokalizacji, zmniejszając promień do 100000.
- Zakres szerokości geograficznych dla parametru „TRUE”: od -35 do -38
- Zakres długości geograficznych dla parametru „TRUE”: od 145 do 148
- Średnia szerokość: -36,5
- Średnia długość: 146,5
Wpisałem więc ten punkt i stopniowo zmniejszałem promień. Najmniejsza wartość promienia dla tego punktu, która dawała pozytywny rezultat to 9000.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105347949.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105353116.png)
Zawężając poszukiwania do 9 kilometrów od tego punktu, próbowałem wpisywać różne miasta i wsie jako flagi.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105359700.png)
Źródło: Google Maps
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105412031.png)
Źródło: Google Maps
Podświetlony został przybliżony zasięg poszukiwań. Po kilku próbach okazało się, iż szukane miasto to Milawa.
DUCTF{milawa}
Web
Grades_grades_grades
Autor rozwiązania: Cappybara
Zadanie składa się z linku do strony internetowej i archiwum grades_grades_grades.tar.gz.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105419568.png)
Po wejściu na stronę naszym oczom ukazuje się dość prosta strona, na której możemy się zalogować i zarejestrować nowe konto. Po utworzeniu nowego konta nie pojawiły się żadne cenne informacje – jedynie oceny.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105425460.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105431605-1024x438.png)
W takim razie – sprawdźmy, czy nie zostało utworzone ciasteczko (cookie).
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105438154.png)
Mamy ciasteczko o nazwie auth_token i wartości zaczynającej się od ey, która jest charakterystyczna dla tokenów JWT zapisanych dzięki base64. W takim razie pora sprawdzić, czy nasze przypuszczenia są trafne.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105444253.png)
Faktycznie jest to token JWT, ale nie ma w nim co zmieniać. W takim razie pora wrócić do dołączonego archiwum.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105451299.png)
Przeglądając plik auth.py można zauważyć jak tworzone jest ciasteczko. Co ważne, każdy token tworzony przez użytkownika po dekodowaniu otrzymuje wartość „is_teacher”:”False”.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105456823.png)
Stwórzmy więc token JWT z dopisaną wartością „is_teacher”:”True”. Co ważne – każda z wartości tokenu musi być zakodowana oddzielnie. Aby obejść fakt, iż HS256 jest jedynym przyjmowanym algorytmem, Cappybara dopisał „alg”:”none”
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105501716.png)
Niestety mimo tego token nie jest prawidłowy.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105507304.png)
Pora przejść do BurpSuite. Utwórzmy więc nowy token i zobaczmy go w Burpie.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105513068.png)
Spróbujmy dopisać is_teacher=true.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105518954.png)
Serwer zwrócił prawidłowy token!
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105528554.png)
Użyjmy go w przeglądarce. Na stronie pojawiła się nowa zakładka – Grading Tool. Wejdźmy w nią.
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105536731.png)
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/image_2023-09-11_105540918.png)
Bingo! Mamy flagę J.
Podsumowanie
![](https://securitybeztabu.pl/wp-content/uploads/2023/09/DownUnderCTF-2023-czyli-writeup-najwiekszego-australijskiego-CTF-podsumowanie-1024x512.png)
DownUnder CTF był ciekawym doświadczeniem – pozwolił na naukę w praktyce wielu tematów, których ciężko nauczyć się w innych warunkach. Z całego serca polecam branie udziału w CTF-ach – często rozgrywane są w weekendy. Writeupy i listę nadchodzących CTF-ów można zobaczyć na CTFTime.