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 adrb

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