31.05.2019 | 06:18

redakcja

Zadanie CTF czeka na śmiałków – życzymy dobrej zabawy

W ramach konferencji EXATEL Security Days zostanie rozegrany finał zawodów CTF. Aby się do niego dostać, należało rozwiązać serię nieprostych zadań. Publikujemy jedno z najciekawszych i zapraszamy do zabawy – spróbujcie się z nim zmierzyć.

CTF to świetny sprawdzian umiejętności, wiedzy i spostrzegawczości. W kwalifikacjach do finału wzięło udział 13 drużyn. W najbliższą środę 5 czerwca najlepsze zespoły staną ze sobą w szranki na PGE Narodowym w trakcie konferencji EXATEL Security Days poświęconej praktycznej stronie cyberbezpieczeństwa. Każdy zespół otrzyma listę zadań. Ten, który rozwiąże najwięcej i najszybciej – zwycięży. Ogłoszenie zwycięzców i wręczenie nagród odbędzie się dzień później.

Security Operations Center EXATEL postanowił podzielić się z wami zadaniem, które było częścią eliminacji do finału. Podejmiecie wyzwanie? :-)

Poniżej także wersja do pobrania w pliku PDF.

Rozwiązanie opublikujemy już w poniedziałek, czyli 3 czerwca. Powodzenia!


Aktualizacja 2019-06-03: Rozwiązanie zadania CTF „All your sixty four are belong to Embler”

Powrót

Komentarze

  • 2019.05.31 09:51 Nikt

    Zapomnieli powiedzieć że nawet eliminacje były tylko dla wybranych…

    Odpowiedz
    • 2019.05.31 11:03 Ja

      Żeby wziąć udział w eliminacjach trzeba było mieć wejściówkę na konferencję albo mieć kogoś, kto nas zarejestruje.

      Ponadto niektóre instytucje państwowe okazały się zbyt mało państwowe żeby otrzymać darmowe wejściówki.

      Odpowiedz
  • 2019.05.31 10:13 Wujek Pawel

    Slabe jak gimnazja tutaj komentujacych.

    Odpowiedz
    • 2019.05.31 10:25 Anna Wasilewska-Śpioch

      Słabe, powiadasz. To podaj flagę w komentarzu (zatwierdzę komentarz w poniedziałek, zaraz po publikacji rozwiązania).

      Odpowiedz
      • 2019.05.31 10:59 Wujek Pawel

        To bedzie flaga wielkiej Polski ;)

        Odpowiedz
        • 2019.05.31 12:26 Anna Wasilewska-Śpioch

          Nie będzie.

          Odpowiedz
      • 2019.05.31 12:50 Monter

        Widzę, że zabawa polega na wyłapaniu różnic tekstu względem oryginału, a na koniec należy ciąg odwrócić i zdekodować (czy to aby nie base64?). Bawiłem się chwilę ale chyba gdzieś coś pominąłem: swMzOmgfRrGuaLAG8wdoFSWocGiUXK8i6wSLxLEPAhjSwzLawMsFiBhAkP7JeQBCzdQ!A= i nie wychodzi mi flaga, no chyba, że to ma być taki ciąg: 3:hFhh%ph\”i2@yBu

        Odpowiedz
        • 2019.05.31 18:02 Anna Wasilewska-Śpioch

          Zgadza się, ale to dopiero początek zabawy – znalezienie flagi wymaga więcej zachodu, tytuł zadania nie jest przypadkowy.
          PS. usuń wykrzyknik i pierwsze „z”

          Odpowiedz
          • 2019.05.31 23:05 Monter

            Znaki proponowane do usunięcia wynikają z różnic względem oryginału.
            Niestety nie wiem co to Embler i kombinacje z literą E nazwą pewnego języka nic nie dają. Nigdy nie rozwiązywałem żadnego zadania tego typu.

          • 2019.05.31 23:08 Monter

            Update: czyżby „C42B” tudzież „\xC4\x2B” ?

          • 2019.05.31 23:14 Monter

            Wg ASCII to dawałoby „-+”. Hmmm.

          • 2019.06.01 00:23 Anna Wasilewska-Śpioch

            Niestety, nie w tę stronę. Co do znaków, o których napisałam, że do usunięcia – weź pod uwagę, że oryginał jest dostępny w kilku wersjach.

    • 2019.05.31 12:22 mat2

      Ja doceniam pomysł i oryginalność zadania.

      Odpowiedz
  • 2019.05.31 13:14 Q

    MOmRrGuaLAG8dFSPcGUXK86ixLEPKMAhwzLaiAkP7JnQBCQA=

    ?

    Odpowiedz
    • 2019.05.31 18:04 Anna Wasilewska-Śpioch

      Myślisz w dobrym kierunku, ale zgubiłeś za dużo znaków.

      Odpowiedz
  • 2019.05.31 17:51 b

    Spróbowałem, poległem :P
    Zapisuje gdzie „doszedłem” czekając na rozwiązanie:

    „`
    echo -n ‚swMz0mgfRrGuaLAG8wdoFSWocGiUXK8i6wSLxLEPAhjSwzLawMsFiBhAkP7JeQBCdQA=’ | base64 -d | hd
    „`

    Odpowiedz
    • 2019.05.31 18:10 Anna Wasilewska-Śpioch

      Do tego miejsca prawidłowo :-) Pomyśl nad tytułem, może wpadniesz na coś jeszcze.

      Odpowiedz
      • 2019.05.31 19:50 b

        Do ukrycia: Chciałbym tylko potwierdzić: to co wrzuciłem zgadza się co do bajta? Tzn czy po zrzuceniu do pliku jego sha256sum wynosi `75d4f7b3809953ba8fee2260844ce566c2f665906e4890d736994304e73597b1`?

        To zadanie miało jakąś kategorię? Czy po prostu `misc`?

        Ten PDF/obrazek to wszystko co jest potrzebne do rozwiązania (tzn. czy nie trzeba było być na tej konferencji :D)?

        Odpowiedz
        • 2019.05.31 23:57 Anna Wasilewska-Śpioch

          1. Sprawdziłam, tak.
          2. Kryptografia / reverse.
          3. Konferencja dopiero się odbędzie ;-) PDF/obrazek wystarczy do rozwiązania zadania.

          Odpowiedz
          • 2019.06.01 15:57 b

            Popróbowałem ale się ostatecznie poddaje ;)

            Nie trzeba publikować/do ukrycia, pomysły/notatki:
            – „All your sixty four” „All your base” = base64, ale to już rozwiązałem wcześniej i w sumie to już zgadłem jak zobaczyłem znak `=`;)
            – Na tych otrzymanych 50 „losowych” bajtach próbowałem standardowo `file`, `binwalk`, `binwalk -A`, oglądanie przez `hd` przez brak rezultatów, pomyślałem więc że to najprawdopodobniej jakiś kod maszynowy, ale na jaką architekturę, nie wiedziałem
            – dużo później zauważyłem, że „are belong to Embler” „are belong to Us” => Us-Embler = assembler ;) więc to jednak pewnie jakiś kod maszynowy
            – testowo próbowałem, odpalać na „pałę” w DOSboxie jako .com
            – odpalałem w Ghidrze ale nie potrafiła sama zgadnąć architektury więc próbowałem losowe
            – oczywiście także wziąłem się za to do czego nawiązaniem jest tytuł = „All your base are belong to us” = Zero Wing i Sega Mega Drive, procesor Motorola 68000/Zilog Z80
            – więc próbowałem Ghidra z architekturą Motorola 68000/Zilog Z80, próbowałem emulator Segi, odpalać ten plik jako ROM
            – nawet pobrałem ROM z grą Zero Wing, odpaliłem, pograłem i próbowałem patchować, po znalezieniu 2 bajtów z otrzymanych danych wstawiłem całość – 50 bajtów, i odpaliłem, działała/nie zauważyłem zmian, obejrzałem intro, pograłem/przegrałem, jeśli okaże się że to było to, tylko trzeba było przejść grę to – „xD”
            – i jeszcze kilka losowych rzeczy
            – próbowałem też odwracać kolejność bajtów (tak jak oryginalny b64 był odwrócony) i powtarzałem powyższe – także bez sukcesu

            ¯\_(ツ)_/¯

          • 2019.06.01 18:13 Anna Wasilewska-Śpioch

            Spróbuj z tą najbardziej oczywistą na dzień dzisiejszy (przestarzałą, ale powszechną).

  • 2019.05.31 19:22 Borygo

    =AQdCBQeJ7PkAbBFrMaLzwjhMKPELxLS6i8
    KXUGc:PSFu8GALaucrR0:M::

    Pierwsza linijka to Base64. Druga to zapis konta linuksowego?

    Odpowiedz
    • 2019.06.01 00:25 Anna Wasilewska-Śpioch

      Za dużo zgubionych znaków, niepotrzebny podział.

      Odpowiedz
  • 2019.05.31 19:40 Ktos

    Ale gdzieś tego typu rozwiązania były używane w ataku/kampanii/malware „in the wild”, czy to tylko taka „sztuka dla sztuki” jak połowa zadań typu ctf?

    Odpowiedz
    • 2019.06.01 00:29 Anna Wasilewska-Śpioch

      Raczej sztuka dla sztuki ;-)

      Odpowiedz
  • 2019.05.31 21:55 dex

    Patrzac po tresci to base64

    Odpowiedz
    • 2019.06.01 00:01 Anna Wasilewska-Śpioch

      Tak, ale tylko w pierwszym etapie.

      Odpowiedz
  • 2019.05.31 22:32 Jacek W.

    Mi wyszło coś takiego: ESC{greenbastrd}

    Odpowiedz
    • 2019.06.01 00:02 Anna Wasilewska-Śpioch

      I to jest prawidłowa odpowiedź, gratuluję :-)

      Odpowiedz
  • 2019.06.01 20:10 adrb

    Chodzi o odwrócenie i zdekodowanie ciągu base64?

    Tego?

    =AQdCBQeJ7PkAhBiFsMwaLzwSjhAKMKPSELxLSw6i8KXUiGcoWPSFodN8GALauGrRfgm0zMws

    Odpowiedz
    • 2019.06.01 20:26 Anna Wasilewska-Śpioch

      Tak, ale to dopiero początek zabawy, no i ciąg jest nie do końca prawidłowy (o kilka znaków za dużo)

      Odpowiedz
      • 2019.06.02 08:51 adrb

        Okazuje się, że kluczowe jest jednak znalezienie właściwego tekstu źródłowego. Co dało rezultat w postaci:

        =AQdCBQeJ7PkAhBiFsMwaLzwSjhAPELxLSw6i8KXUiGcoWSFodw8GALauGrRfgm0zMws

        Wygląda na to, że jest to kod asEmbler-a który deszyfruje (po dopieszczeniu) wartości umieszczone na stosie z:

        0x94 0x5c 0xaf 0x22 0x15 0x25 0xa8 0x70
        0xb0 0x06 0xf3 0x07 0x1f 0x46 0xb1 0xae

        na:

        0x5e 0x75 0x24 0x23 0x0e 0x66 0xe0 0x82
        0xc8 0x9d 0x90 0xcb 0xba 0x00 0x1b 0x4e

        Poprawnie? Czy jest jeszcze jakiś trzeci wymiar?

        Odpowiedz
        • 2019.06.02 10:43 Anna Wasilewska-Śpioch

          Jest jeszcze trzeci ;-) Trzeba poprawić błędy i wykonać.

          Odpowiedz
          • 2019.06.02 10:57 adrb

            Tak, ten drugi ciąg danych który podałem wcześniej jest już po poprawieniu i wykonaniu kodu ;)

          • 2019.06.02 11:43 Anna Wasilewska-Śpioch

            Dobra, inaczej – kod musi wykonać się do końca, 1 iteracja pętli nie wystarczy. Czekam na flagę, z takim kodem powinieneś już do niej dotrzeć :-)

          • 2019.06.02 15:20 adrb

            Po przejściu „do końca” dostaje:

            3c 53 33 87 f8 2e f0 f1 fd fa 45 b4 51 30 66 1b

            o to chodzi?

          • 2019.06.02 15:39 Anna Wasilewska-Śpioch

            To masz na stosie? Bo coś mi się nie zgadza.

          • 2019.06.02 16:30 adrb

            To może całość, stos przed i po wykonaniu. Drugi break jest na końcu kodu:

            (gdb) x/16xb $sp
            0xffffcd90: 0x94 0x5c 0xaf 0x22 0x15 0x25 0xa8 0x70
            0xffffcd98: 0xb0 0x06 0xf3 0x07 0x1f 0x46 0xb1 0xae
            (gdb) cont
            Continuing.

            Breakpoint 2, 0x08048092 in ?? ()
            (gdb) x/16xb $sp
            0xffffcd90: 0x53 0x3c 0x87 0x33 0x2e 0xf8 0xf1 0xf0
            0xffffcd98: 0xfa 0xfd 0xb4 0x45 0x30 0x51 0x1b 0x66

            kod:

            section?.text
            global _start
            _start: ;entry point

            mov bl,0x3
            xor edx,edx
            push 0xaeb1461f
            push 0x7f306b0
            push 0x70a82515
            push 0x22af5c94
            jmp init_loop

            outer_loop:
            mov eax,esp
            mov cl,0xf

            next_byte:
            add bl,BYTE [eax]
            rol bl,cl
            xor bl,dl
            ror bl,0x5
            mov BYTE [eax],bl
            inc eax
            nop
            dec cl
            jns next_byte
            init_loop:
            inc edx
            jne outer_loop

            ; write result to stdout
            mov edx, 0x10 ;length+1
            mov ecx, esp ;message
            mov ebx, 1 ;file descriptor
            mov eax, 4 ;sys_write
            int 0x80 ;call kernel
            mov eax, 1 ;sys_exit
            int 0x80 ;call kernel

          • 2019.06.02 20:33 Anna Wasilewska-Śpioch

            Hm… kod wydaje się prawidłowy. Co masz na stosie przy drugim breaku? To, co podałeś we wcześniejszym komentarzu?

          • 2019.06.02 20:52 adrb

            Dokładnie to:

            (gdb) x/16xb $sp
            0xffffcd90: 0x53 0x3c 0x87 0x33 0x2e 0xf8 0xf1 0xf0
            0xffffcd98: 0xfa 0xfd 0xb4 0x45 0x30 0x51 0x1b 0x66

            lub jako liczby 32-bit:

            (gdb) x/4xw $sp
            0xffffcd90: 0x33873c53 0xf0f1f82e 0x45b4fdfa 0x661b5130

          • 2019.06.02 21:01 Anna Wasilewska-Śpioch

            Po ilu iteracjach?

          • 2019.06.02 21:14 adrb

            Po wszystkich. Może mój procesor krzywo liczy ;] Problem jest z kolejnością, czy to kompletnie nie te dane? Pewnie jutro sie dowiem w czym tkwił problem jak opublikujecie rozwiązanie.

          • 2019.06.02 22:27 Anna Wasilewska-Śpioch

            Zaczynasz od tego, co trzeba, pierwsza iteracja (podawana przez Ciebie wcześniej) też się zgadza, ale końcowe dane już nie.

          • 2019.06.02 23:28 adrb

            Rzutem na taśmę, {greenbastrd} ?

          • 2019.06.02 23:31 Anna Wasilewska-Śpioch

            A gdzie trzy pierwsze litery podziałeś? ;-) Dawaj wszystkie i będzie flaga.

          • 2019.06.02 23:38 adrb

            A tak racja, błąd copyego pejsta: ESC{greenbastrd}

          • 2019.06.02 23:41 Anna Wasilewska-Śpioch

            No, to teraz mogę Ci oficjalnie pogratulować :-)
            PS. Co zmieniłeś, że w końcu wyszło?

          • 2019.06.02 23:52 adrb

            Dzięki ;)

            Jaki był błąd? Za pierwszym razem założyłem że chodzi o jedną iterację i pierwszy skok po prostu pominąłem, bo inaczej nie było szans na wykonanie kodu. Spowodowało to, że szyfrowanie odbyło się z wyzerowanym rejestrem edx.

            Za drugim razem, założyłem, że trzeba zmodyfikować tylko skoki więc w pierwszą iterację wchodziło z edx ustawionym na 1.

            Po informacji, że pierwsza iteracja jest poprawna, domyśliłem się o co chodziło ;]

            Gratulacje się należą osobie która jako pierwsza zdobyła flagę, mi bez ciągnięcia za uszy by się nie udało :/

  • 2019.06.01 20:35 John Sharkrat

    Szczęście od boga, że takim testom nie poddano Różyckiego, Zygalskiego i Rajewskiego, bo mogliby nie przejść testu.

    Odpowiedz
  • 2019.06.02 00:04 que

    „All your sixty four are belong to embler” — doobre, z pół minuty mi zajęło skojarzenie, ale dobre, uśmiałem się :) :) trzeba jednak troche miec na karku żeby to szybko skojarzyć.. no i po wypowiedzeniu na głos łatwiej zajarzyć „embler” :)

    Odpowiedz
    • 2019.06.02 12:45 adrb

      „trzeba jednak troche miec na karku żeby to szybko skojarzyć”

      Nie koniecznie, ciąg ma charakterystyczne dopełnienie używane w base64

      Odpowiedz
  • 2019.06.02 21:19 Robert

    „Bez względu na wszystko”
    to dobry kierunek?

    Odpowiedz
  • 2019.06.02 22:54 b

    Jednak się nie poddałem!

    ESC{greenbastrd}

    Zdecydowanie za długo mi zeszło, ale jak na CTFowego nooba to jestem bardzo zadowolony, że się w ogóle udało =D No i sporo też błądziłem po „głupich” pomysłach ;)

    Dobrze się bawiłem, dzięki za wyzwanie ♥

    PS. Wiecie „za ile punktów” było to zadanie?

    Odpowiedz
    • 2019.06.02 23:01 Anna Wasilewska-Śpioch

      Super, gratuluję, to prawidłowa odpowiedź :-) Ile można było zgarnąć za to punktów, nie wiem, ale dopytam organizatorów.

      Odpowiedz
    • 2019.06.03 10:39 Anna Wasilewska-Śpioch

      Odpowiedź organizatorów: Pierwszy zespół, który rozwiązał zadanie, dostawał 300 pkt. Każdy kolejny mniej.

      Odpowiedz
      • 2019.06.03 18:12 adrb

        A tak żeby umiejscowić to gdzieś na skali trudności, to jakie było/jest zadanie o maksymalnej liczbie punktów?

        Odpowiedz
        • 2019.06.04 06:35 Anna Wasilewska-Śpioch

          Maksymalne było za 500 pkt. i nikt go nie rozwiązał.

          Odpowiedz

Zostaw odpowiedź do Anna Wasilewska-Śpioch

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Zadanie CTF czeka na śmiałków – życzymy dobrej zabawy

Komentarze