P4 CTF 2015 - Write-upy i rozwiązania

Odpowiedz Nowy wątek
2015-12-20 22:23
5

P4 CTF Dobiegł końca. Serdecznie dziękujemy wszystkim za udział. Mamy nadzieję że dobrze się bawiliscie! Niedługo wrzucimy jakieś statystyki z konkursu, ale póki co możemy się pochwalić że wystartowało aż 121 osób z czego 80 poradziło sobie przynajmniej z jednym prawdziwym zadaniem. Gratulacje!

Zakładamy ten wątek jako zbiorcze miejsce gdzie możecie pochwalić sie swoimi rozwiązaniami / podyskutować na ich temat.

Liczymy na to że użytkownicy sami się pochwalą rozwiązaniami (a rozwiązane zostały wszystkie zadania!), niemniej jeśli będzie czegoś brakowało to możemy pokazać jak zakładaliśmy że rozwiążecie dane zadanie :)

i pamiętajcie o ankiecie https://docs.google.com/forms[...]NBhVn33U2ueO1r8FsnKU/viewform !

Infrastruktura póki co nadal działa i będzie dopóki @Rev nie zabije więc możecie jeszcze jakiś czas coś popróbować / porobić screenshoty do opisu rozwiązać etc :)

edit: jakby ktoś chciał poczytać jak wyglądają zadania na otwartych, międzynarodowych CTFach to zachęcam do czytania https://github.com/p4-team/ctf ;) </kryptoreklama>

edit:
Weby są dostępne tutaj: https://dl.dropboxusercontent.com/u/25622690/ctf.zip
Misce są dostępne tutaj: https://www.dropbox.com/sh/5b[...]AArenFZGsReFynCPfHZUdAJa?dl=0


Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]
edytowany 5x, ostatnio: Shalom, 2015-12-21 14:33
Pokaż pozostałe 15 komentarzy
@katelx jestes mega , że uratowałaś honor zarejestrowanych :P - karolinaa 2015-12-21 12:43
@Shalom, no ja w pierwszym kilka razy kopiowałem flagę i nie chciało przyjąć. Na następny dzień przyjęło normalnie za pierwszym razem :D - some_ONE 2015-12-21 12:55
@some_ONE zapewne kopiowałeś ze spacjami z przodu albo z wykrzyknikiem na końcu :P - Shalom 2015-12-21 12:58
@karolinaa zobaczylam ze tobie sie nie chce (bo za latwe) no to musialam - katelx 2015-12-21 13:04
tak tak za łatwe xd - karolinaa 2015-12-21 14:41

Pozostało 580 znaków

2015-12-20 22:26
6

Na wstępie dzięki wszystkim, którzy przygotowali tego CTF'a. Domyślam się, że nie było to łatwe, a i zadania były na dobrym poziomie (niektóre faktycznie poza moim zakresem).
Choć pewnie w niektórych zadaniach kręciłem się koło rozwiązania to zabrakło mi pewnie kilku kroków, a co za tym idzie umiejętności. Na dole napisze o zadania w których myślałem, że jestem blisko.
Samą organizację oceniam na 5. Szybko pojawiały się update'y tam gdzie były błedy, a dodatkowo w ciągu trwania konkursu były dokładane kolejne zadania.
Na duży minus (IMO) jest to, że sporo kont zostało założonych właśnie tylko na tego ctf'a. O ile założenie ogólne było takie że jest to dla początkujących to w praktyce wyszło inaczej. Jestem przekonany że jakieś 70% osoób z TOP 20 brało już udział w innych CTF'ach, a książkę albo mają albo im niepotrzebna :D

Moje założenia na początku były takie:

  • TOP 20 - jednak po zobaczeniu że konta które dopiero się zarejestrowały mają już kupe punktów przeszedłem do założenia 2
  • minimun 1000 punktów - udało się zrobić prawie 2 razy więcej
  • nie bawię się w skrypty, kod - lenistwo, brak umiejętności, ale jedno zadanie (pewnie inne też) aż prosiło się o kilka linijek więc jeden skrypt napisałem :D
  • z każdego działu chociaż po jednym zadaniu postaram się rozwiązać
  • sprawdzenie samego siebie, książkę już mam więc mi nie zależało na nagrodzie

Podsumowywując:

Cebula 1
Rozwiązanie - konwersja cyfr z dziesiętnego na tekst i mamy flagę

Cebula 2
Rozwiązanie - rzutem na taśmę :D base64 - decode i flaga zdobyta

Where is my password#1
Rozwiązanie - pierwsze dwa znaki 70 34 dały mi od razu pomysł HEX to TEXT i flaga zdobyta

Capture the data #1
Rozwiązanie - otwarcie pliku w wiresharku, popatrzenie co było wysyłane na serwer FTP i flaga zdobyta

English, do you speak it?
Rozwiązanie - to jest zadanie do którego napisałem skrypt w pythonie. Użyłem libki detect language, puściłem telneta ze skryptu i na zwrotce wysyłałem rozpozanany język, po 300 elementach flaga zdobyta

Easymod
Rozwiązanie - pobrałem exe, otwarłem to blees hex editorem i flaga zdobyta

SS-93 #1
Rozwiązanie - pobrałem wav, otwarłem to blees hex editorem i po zobaczeniu ile tego jest, przejechałem ze zrezygnowaniem na sam koniec. W nagrodę czekała na mnie flaga :D

Centrum NS@
Rozwiązanie - pierwsze co zrobiłem po wejściu na tą stronę popatrzyłem w ciasteczka (w zasadzie nie wiem dlaczego). Jedno ciastko o nazwie admin, podmiana wartości z 0 na 1 i flaga zdobyta. @katelx takie trudne zadania rozwiązałaś a do ciasteczka nie popatrzyłaś :D btw respect za Rémy Suárez Ascánder (pewnie piszesz/pisałaś w ocaml'u)

D0 Y0u 3v3n PHP? #1
Rozwiązanie - jak zobaczyłem dwa pola na dane to od razu w kod a tam piękna informacja o debugu w gecie :) oczywiście trochę się naszukałem bo w PHP nie piszę, ale ?debug = 1 i flaga zdobyta

D0 Y0u 3v3n PHP? #2
Rozwiązanie - tutaj musiałem zrobić większy research. strcmp był dziurawy. Podmiana na żywo w kodzie z value="password" na value="password[]" i flaga zdobyta

Koty MSMa
Rozwiązanie - jak zobaczyłem w pasku show.php?cat=Amber.jpg to od razu wpisałem show.php?cat=show.php i tutaj zadanie mogło by się prawie zakończyć, ale ja spodziwałem się pliku php pokazanego na stronie (Hackme 3.0 miał takie zadanie). Dopiero później zrobiłem zapisz jako, zobaczyłem że skrypt przyjmuje tylko JPG, ale zapisując plik do dobrego rozszerzenia pokazywał wszytko i tak cat=/home/flag.txt zapisane jako flag.txt i flaga zdobyta

42
Rozwiązanie - SQLInjection - brak podwiedzi w źródle, brak info w pasku no to jedyne co mi przyszło do głowy do SQL Injection i flaga zdobyta

Obfuscated
Rozwiązanie - skrpyt JS w kodzie strony, chwila z kartką i flaga zdobyta

Zadania przy których węszyłem, ale nie wiem czy dobrze

Capture the data #2
Wszedłem na serwer FTP dzięki danych logowania, przełączałem się na tryb bianarny (wzięte z pcap'a), ale nie pomogło. Był jeszcze plik confidential.zip ładowany do folderu upload, ale go tam nie umiałem znaleźć

Kapitan Rozdil
Po zobaczeniu że jest to obrazek przeskanowałem go pod względem ukrytego tekstu, niestety nie było go tam (lub źle to zrobiłem) i odpuściłem. Jeszcze zastanawiałem się czy przypadkiem nie ma tam drugiego obrazka w nim ale nie sprawdziłem tego.

Dzięki jeszcze raz za tego ctf'a. Czekam na wzorce i następny konkurs!

P.S Sorki za brak flag, ale nie spisywałem tego na bieżąco.


PEBKAC - Problem Exists Between Keyboard And Chair
Pokaż pozostałe 4 komentarze
zobaczymy jak będzie następny raz. już ja się w tym podszkolę xd - karolinaa 2015-12-20 22:46
a ja siadłem tak z dupy, nawet książki zrozumieć programowanie nie przeczytałem całej :D ot tyle ile wiedziałem to zrobiłem - panryz 2015-12-20 22:47
tak tak pewnie ktoś Ci pomagał o! - karolinaa 2015-12-20 22:49
ja mam taką komendę sv_musk 1 - panryz 2015-12-20 22:50
@karolinaa bo zadania na CTFach sie tak projektuje żeby automatyczne skanery ich nie zrobiły :P więc odpalanie sqlmapa czy w3af zwykle daje marne skutki, co najwyżej bana za generowanie dużego loadu :P - Shalom 2015-12-20 23:10

Pozostało 580 znaków

2015-12-20 22:27
msm
0

wystartowało aż 121 osób

Nie wiem czy wejście pod adres ctf.4programmers.net można nazwać wystartowaniem :P. Powiedziałbym że wystartowało 80 osób (bo jedno zadanie było celowo trywialne). Tak czy inaczej nieźle.

Nie no jak ktoś wysłał example flag to znaczy że nie tylko sie zalogował ale że cośtam spróbował :P - Shalom 2015-12-20 22:31

Pozostało 580 znaków

2015-12-20 22:30
0

Jestem ciekaw czy userzy, który tak chętnie udzielają się na forum w programowaniu (i mają przy tym sporą wiedzę)
a) zapomniało
b) nie miało czasu
c) weszli popatrzyli na zadania i powiedzieli o kur**


PEBKAC - Problem Exists Between Keyboard And Chair
weszli popatrzyli na zadania i powiedzieli o https://upload.wikimedia.org/wikipedia/commons/1/1d/Kura.JPG xd - karolinaa 2015-12-20 22:42

Pozostało 580 znaków

2015-12-20 22:32
12

Mój writeup - nie udało się zrobić wszystkiego, ale na usprawiedliwienie powiem, że dowiedziałem się o konkursie o 17:50 w sobotę (wg historii przeglądarki):

Cebula

Flaga 1:
Widzimy, że tekst z zadania to liczby do 128 - zatem pewnie ASCII. W Pythonie potwierdziło się.

s="82 49 107 122 81 48 70 79 85 108 90 70 81 84 78 69 83 48 108 67 86 48 100 90 85 85 82 78 84 107 112 66
82 49 107 121 85 48 70 79 85 108 90 70 81 84 78 69 84 85 108 67 86 48 100 90 85 85 82 78 84 108 74 66 82 
49 107 121 85 48 70 79 85 108 90 70 81 84 78 69 84 85 108 67 86 48 100 86 85 85 82 78 84 107 112 66 82 49
107 121 85 48 70 79 85 108 90 70 81 84 78 69 84 85 108 67 86 48 100 86 85 85 82 78 84 107 112 66 82 49 
107 121 85 48 70 79 85 108 100 70 81 84 78 69 84 85 108 67 86 48 100 86 85 85 82 78 84 107 112 66 82 49 
107 121 85 48 70 79 85 108 90 70 81 84 78 69 83 48 108 67 86 48 100 90 85 85 82 78 84 108 74 66 82 122 81
48 85 48 70 79 87 108 108 70 81 84 78 85 84 85 108 67 87 85 104 70 85 85 82 80 84 48 112 66 82 122 81 48
81 48 70 79 85 108 112 70 81 84 78 85 84 48 108 67 87 69 104 70 85 85 82 82 84 86 74 66 82 49 107 48 85 
48 70 85 85 48 112 74 84 86 112 86 86 86 81 121 81 48 115 49 82 86 90 74 85 48 78 86 83 107 74 66 86 107 
107 57 80 84 49 81 85 106 77 122 86 70 108 102 82 122 65 119 82 65 61 61 71 48 48 68 83 84 52 82 84"
r="".join([chr(int(x)) for x in s.split(" ")])
print r
R1kzQ0FOUlZFQTNES0lCV0dZUURNTkpBR1kyU0FOUlZFQTNETUlCV0dZUURNTlJBR1kyU0FOUlZFQTNETUlCV0dVUURNT
kpBR1kyU0FOUlZFQTNETUlCV0dVUURNTkpBR1kyU0FOUldFQTNETUlCV0dVUURNTkpBR1kyU0FOUlZFQTNES0lCV0dZUU
RNTlJBRzQ0U0FOWllFQTNUTUlCWUhFUURPT0pBRzQ0Q0FOUlpFQTNUT0lCWEhFUURRTVJBR1k0U0FUU0pJTVpVVVQyQ0s
1RVZJU0NVSkJBVkk9PT1QUjMzVFlfRzAwRA==G00DST4RT

Zatem flaga to G00DST4RT.

Flaga 2:
Poprzednia warstwa kończyła się dwoma znakami równości, a sama składała się z liter i cyfr. Prawdopodobnie to Base64:

s="R1kzQ0FOUlZFQTNES0lCV0dZUURNTkpBR1kyU0FOUlZFQTNETUlCV0dZUURNTlJBR1kyU0FOUlZFQTNETUlCV0dVUURNTkpBR1kyU0FOUlZFQT
NETUlCV0dVUURNTkpBR1kyU0FOUldFQTNETUlCV0dVUURNTkpBR1kyU0FOUlZFQTNES0lCV0dZUURNTlJBRzQ0U0FOWllFQTNUTUlCWUhFUURPT0p
BRzQ0Q0FOUlpFQTNUT0lCWEhFUURRTVJBR1k0U0FUU0pJTVpVVVQyQ0s1RVZJU0NVSkJBVkk9PT1QUjMzVFlfRzAwRA=="
import base64
base64.b64decode(s)
'GY3CANRVEA3DKIBWGYQDMNJAGY2SANRVEA3DMIBWGYQDMNRAGY2SANRVEA3DMIBWGU
QDMNJAGY2SANRVEA3DMIBWGUQDMNJAGY2SANRWEA3DMIBWGUQDMNJA
GY2SANRVEA3DKIBWGYQDMNRAG44SANZYEA3TMIBYHEQDOOJAG44CANRZEA3TOIBXHEQ
DQMRAGY4SATSJIMZUUT2CK5EVISCUJBAVI===PR33TY_G00D'

Flaga to PR33TY_G00D.

Flaga 3:
Podobnie jak poprzednio. Tym razem tekst to wielkie litery i cyfry, oraz === na końcu. Po chwili googlania, wychodzi base32:

s='GY3CANRVEA3DKIBWGYQDMNJAGY2SANRVEA3DMIBWGYQDMNRAGY2SANRVEA3DMIBWGUQ
DMNJAGY2SANRVEA3DMIBWGUQDMNJAGY2SANRWEA3DMIBWGUQDMNJAGY2SANR
VEA3DKIBWGYQDMNRAG44SANZYEA3TMIBYHEQDOOJAG44CANRZEA3TOIBXHEQDQMRAGY4S
ATSJIMZUUT2CK5EVISCUJBAVI==='
base64.b32decode(s)
'66 65 65 66 65 65 65 66 66 66 65 65 66 65 65 65 65 66 65 65 65 66 66 65 65 65 65 65 66 66 79 78 76 89 79 78 69 77 79 82 69 NIC3JOBWITHTHAT'

Flaga to: NIC3JOBWITHTHAT.

Flaga 4:
Powtórka z flagi 1:

s='66 65 65 66 65 65 65 66 66 66 65 65 66 65 65 65 65 66 65 65 65 66 66 65 65 65 65 65 66 66 79 78 76 89 79 78 69 77 79 82 69'
"".join([chr(int(x)) for x in s.split(" ")])
'BAABAAABBBAABAAAABAAABBAAAAABBONLYONEMORE'

Flaga: ONLYONEMORE.

Flaga 5:
Tekst to ciąg liter A i B. Sugeruje to użycie kodu Bacona (http://rumkin.com/tools/cipher/baconian.php). Po wklejeniu tam
naszego ciągu (i wybraniu opcji i=J and U=V), dostajemy flagę THEEND.

Where is my password?! #1

Flaga wg treści pochodzi z klucza. Klucz to:
klucz='7034xx6265747465725f6b6565705f69745f72616e646f6d5f647564653b29xx'
gdzie x to niewiadoma. Zauważamy, że klucz jest heksadecymalny, a poszczególne bajty nie przekraczają 0x7f, co sugeruje ascii.
Po zdekodowaniu dostajemy:
p4?better_keep_it_random_dude;)?
Zatem flaga to:
p4{better_keep_it_random_dude;)}

Hasło Shaloma
Otwieramy plik w Wiresharku, patrz screenshot http://imgur.com/ryZfAXx. Nie licząc czasu, tylko dwa bajty się
zmieniały pomiędzy pakietami, z czego pierwszy tylko pomiędzy dwoma wartościami: 0x00 i 0x20. Przypuściłem, że to zapewne
Shift albo coś w tym stylu, natomiast drugi bajt koduje klawisz. Problem w tym, że nie było to ani ascii, ani nic podobnego.
Po poszperaniu w internecie, znalazłem jednak stronę z kodami klawiaturowymi:
https://www.win.tue.nl/~aeb/linux/kbd/scancodes-14.html
Po przeliterowaniu (ręcznie) po wszystkich naciśnięciach, dostajemy flagę:
p4{i--74k--u2yvv4m--m45ki}

Capture The Data #1

strings -n 10 forensics2.pcapng | grep p4{
 

6PASS p4{FTP_Free_To_Pwn}

Capture The Data #2
Otwierając w Wiresharku plik, okazuje się że poprzednia flaga była w przekazie FTP. Przekazany był jeden plik - po wyciągnięciu
go, okazuje się, że był to zip zawierający 1000 plików o nazwach 1, 2, ..., 1000. Na szczęście były one niewielkie, zatem je
po prostu wypisałem:

cat *
 

Po szybkim przejrzeniu okazuje się, że tylko jeden zawierał coś dłuższego niż kilka znaków:
70347b616c6c5f6f665f796f75725f7a6970735f6172655f62656c6f6e675f746f5f75737d
Flaga to więc, po zmianie hex->ascii:
p4{all_of_your_zips_are_belong_to_us}

English, do you speak it? / Do they speak English in "what"?
Zadanie polegało na napisaniu bota, który po otrzymaniu akapitu w jednym z kilku języków odpowie, jaki to był język.
Najprościej znaleźć w internecie listę 1000 najpopularniejszych słów w danym języku i dla każdego z nich zliczać, ile jest
trafień, by wypisać najlepszy strzał. To działało dla pierwszej części - w drugiej niestety nie byłem w stanie znaleźć
dobrego słownika dla np. języka arapaho, plemienia indiańskiego. Na szczęście mogłem wykorzystać sam serwer jako dawcę próbek

  • po prostu odpowiadałem zawsze arp (skrót od arapaho) i jeśli nie było błędu, oznaczało to, iż mam próbkę tego języka.

piet
Szybko można znaleźć stronę http://www.bertnase.de/npiet/ zawierającą npiet - interpreter języka, oraz npiet-foogol, który jest
kompilatorem z języka foogol do języka piet. foogola również nie znałem (obviously...), ale po HelloWorld w nim to:

begin
  prints ("Hello World!\n")
end

Ten można natomiast łatwo zmodyfikować, aby wypisał potrzebny tekst.

Kapitan Rozdil
Po znalezieniu oryginału obrazka w internecie i porównaniu z naszym za pomocą narzędzia compare, dostajemy taki widok:
http://imgur.com/oa97kVF

SS-93 #1

strings -n 10 stegano2.wav | grep p4{
 

p4{zawszeostatni:(}

SS-93 #2
Po otworzeniu pliku w Audacity i wybraniu analizy spektralnej, dostajemy:
http://imgur.com/d094rMw

C3ntrum N$A
Wystarczy zmienić flagę w ciasteczku.

D0 Y0u 3v3n PHP? #1
Patrząc w źródło strony, widzimy komentarz dotyczący parametru debug=1. Flaga jest na linku:
http://web.ctf.4programmers.net/web1/?debug=1

D0 Y0u 3v3n PHP? #2
Na tej samej stronie dostajemy kod php. Flaga jest porównywana z polem "password" za pomocą funkcji strcmp.
W dokumentacji PHP czytamy w komentarzach, że strcmp zwraca zero (oprócz gdy stringi są równe) także przy błędzie,
np. gdy jeden z argumentów jest tablicą. Zmieniamy więc w requeście pole password na password[] i otrzymujemy flagę.

Koty MSMa
Znamy miejsce ukrycia flagi i wiemy że zdjęcia kotów są wywoływane jako |url|?cat=Amber.jpg
Flagę otrzymujemy poprzez:
curl http://web2.ctf.4programmers.[...]2/show.php?cat=/home/flag.txt
p4{path_traversal_cats}

42
Po wpisaniu admin, dostajemy hasło admina: ICANSQL. Próbujemy więc sql injection:
' or '1'='1' or '1'='
Po czym dostajemy flagę.

Obfuscated
Jak sama nazwa wskazuje, należy znaleźć sens w udziwnionym kodzie JavaScriptu. Nie będę dokładnie się rozpisywał - wystarczy
dokładnie przejść instrukcja po instrukcji i w końcu odgadnie się hasła.

Księżniczka Lea
Musimy znaleźć takie $data i $signature, dla którego nie wykona się $signature !== hash('sha256', $key . $data), a
ponadto $signature zawiera w sobie stringa: "&user=admin". W treści jest wspomniane o HMAC, które po chwili googlania prowadzi do:
https://en.wikipedia.org/wiki/Length_extension_attack
Okazuje się, że istnieje już gotowy tool do podobnych rzeczy:
https://github.com/iagox86/hash_extender
Wpisujemy weń:

./hash_extender --data blah=qwerty --secret 20 --append \&user=admin --signature 
c700e9638661184e03a2c372b0639f4efd05f3814b08c83ba8461ef25addcdbd --format sha256

Otrzymujemy rozwiązanie ($signature i $data).

easymode

strings -n 10 re0.exe | grep p4{
 

p4{najprostsze_re_na_swiecie}

xorme
Korzystając z IDA'y, deasemblujemy plik. Po analizie, dostajemy coś, co można sprowadzić do kodu w C (pomijam wypisywanie błędów):

char xorred[]="\x7f;tw`}Pf{PnccPnakP{gjaPb`}jr"; // zawarte w pliku
int main(int argc, char** argv){
    int len=strlen(argv[1]);
    for(int i=0;i<len;i++){
        if(xorred[i]^0x0f^argv[1][i]){
            puts("Wrong");
            exit(0);
        }
    }
    puts("Ok");
}

Ponieważ xorred jest dostępny, a operacja ^ (xor) jest odwracalna, uzyskamy rozwiązanie poprzez xorred[] xor 0x0F:

s="\x7f;tw`}Pf{PnccPnakP{gjaPb`}jr"
print "".join([chr(ord(c)^0x0F) for c in s])

p4{xor_it_all_and_then_more}

Zadania z Captchami:
Użycie Tesseracta i naklepanie skryptu w Pythonie do automatycznego odpowiadania na zapytania pozwoliło na rozwiązanie dwóch pierwszych tasków.

Niezrobione zadania:
Remy Suarez Ascander
Analiza kodu w bodajże F#, a później coś z RSA. Jakoś nie bardzo mi się chciało zagłębiać w tę dziwna składnię (ale może to dlatego, że byłem wówczas już na szczycie rankingu ;) )

Where is my password #2
Myślałem, że to trudniejsze - ale nigdy nie byłem dobry w kryptografii. Jak mnie koledzy z IRCa później uświadomili, dało się to rozwiązać w dwóch linijkach, bo znamy plaintext, ciphertext i key, a potrzebujemy tylko IV: https://en.wikipedia.org/wiki[...]ode_of_operation#Cipher-blockchaining.28CBC.29
Bodajże: IV=P1 xor Decrypt(key, C1), gdzie P1 i C1 to odpowiednio pierwsze bloki plain- i cipher-textu.

Impossibru captcha
Captcha z kreskami - co prawda je jakoś usuwałem, ale jednak tesseract nie dawał rady ze zniekształconymi nieco literami.

Jeśli ktoś czyta ten tekst i się czuje głupio, że sam na to nie wpadł, to niech pamięta, że opisuję tutaj jedynie udane próby. Spędziłem sporo czasu brnąc w ślepe uliczki i próbując rozwiązywać zadania w zły sposób - nie zniechęcajcie się więc zbyt szybko, bo tylko ten, który nie próbuje, nigdy się nie myli.
Podsumowując, CTF zaliczam zdecydowanie do udanych :)

edytowany 10x, ostatnio: akrasuski1, 2015-12-21 17:24
SS-93 #2, ale ze mnie debil, czemu ja tego wav'a otwarłem w zwykłym playerze a nie audacity... - panryz 2015-12-20 22:42
Noo, mimo, że ja dość szybko szukałem czegoś w audacity, to zanim znalazłem taką opcję, to próbowałem się doszukiwać wzorców w tym szumie. Bezskutecznie oczywiscie. - akrasuski1 2015-12-20 22:46
Nasze magiczne forum na kolorowanie składni dla języków programowania :) masz &lt;code=c&gt; kod &lt;/code&gt; i np. &lt;code=python&gt; kod &lt;/code&gt; :) - Shalom 2015-12-20 22:59
teraz sprawdziłem, w Preferencjach Audacity miałem obcięty spektrogram do 8 KHz :( a od początku od spektrogramu zaczynałem kombinować - rkot 2015-12-20 23:20

Pozostało 580 znaków

2015-12-20 22:40
1

będą jeszcze trochę zostawione zadanka na serwerze żeby można było sobie rozwiązać teraz jak się ma podpowiedzi?
(chodzi o to żeby się czegoś nauczyć)


Pokaż pozostałe 2 komentarze
chcesz to sobie lokalnie postawić? @nazywam @other019 ;] - Shalom 2015-12-20 22:57
chciałam przejść te zadanka kiedyś w przyszłości no ale najwyżej będzie bez PHP - karolinaa 2015-12-20 23:35
https://dl.dropboxusercontent.com/u/25622690/ctf.zip Mogły być jakieś małe zmiany, ale nic krytycznego ;) - nazywam 2015-12-20 23:52
jeśli o pieta chodzi skompiluj sobie npiet albo jak masz windowsa pobierz binarkę i jechane :D - other019 2015-12-21 00:32

Pozostało 580 znaków

2015-12-20 23:48
2

Hm, na cebuli poszedłem złym tropem, stwierdziłem, że skoro warstwy to pewnie flaga z części 1szej będzie przydatna w drugiej jako passphrase a tu zonk...
Oba RE banalne, objechałem to szybko skryptami do gdb. Jakby była wersja linuxowa to nie wiem czy ltrace'm nie opędziłbym tego jeszcze szybciej...
Język: część pierwsza banalna, pythonowskie langid+expect do zautomatyzowania tego i jazda...

Kpt. Rozdil... to ja tu bity odwracam, szukam sekwencji, cuda robię... a na to nie wpadłem. Wstyd... ;)

A serio... potwierdziło się, że jestem dobry w gdb i skryptach, webu nie znam wcale a w szyfrowaniu brak mi doświadczenia. Btw - czekam aż ktoś poda rozwiązanie zadania z rozpoznawaniem języków w wersji trudnej. Pierwszy mój trop to podobieństwo pewnych rzadkich języków do innych i odpowiednie przetworzenie pomyłki, ale czasu mi już brakło...

edit: skoro @Proxima się skryptami chwali, to i ja mogę ;) do zadania nr 2 oczywiście

set verbose off
set silent
file ./re1.exe
b *main+132
commands 1
    set $al=$dl
    print (char)($dl^0xf)
    continue
end
r aaaaasssssdddddfffffgggggjjj
edytowany 3x, ostatnio: alagner, 2015-12-21 00:39
specjalnie do lvl2 w zgadywaniu języka dałem takie dziwne języki żeby langid ich nie miał, a łatwo nie było bo wspiera 97 języków :P - Shalom 2015-12-20 23:55
Wzorcówka do rozpoznawania języków to liczenie rozkładu statystycznego dla danego języka, ale nie dla liter tylko dla zbitek złożonych z kilku kolejnych literek. Tzw n-gramy :) - Shalom 2015-12-20 23:57
Moje rozwiązanie języków - langid + czytanie i wysylanie na konsole do automatyzowania. języki 2 - zestaw wcześniejszy plus drabinka ifów wyciągnięta z przykładów języków wysyłanych przez server. Brzydkie, ale szybkie i skuteczne, pisałem 7 minut :P - big_y 2015-12-21 14:43

Pozostało 580 znaków

2015-12-21 00:02
1

Miałem podobnie jak @alagner troche ;p
Z xorme poradziłem sobie szybko na VM.

xor_str="w`}Pf{PnccPnakP{gjaPb`}jr"
out=""
c=0
for c in xor_str:
    for i in range(ord(' '), 127):
        if c == chr(i ^ 0xf):
            out = out + chr(i)        
print("p4{" + out)

Pierwsza część języków - w pare minut za pomocą libki cld
A reszta co mi się udało to pierdoły typu otwórz plik hexedytorem. Webu nie tykałem prawie w ogóle nawet bo nie trawie webdevu. Kiepsko mi poszło ;p
Jakbyście planowali następny, dajcie więcej RE i Misc(serwerki) : D

edytowany 1x, ostatnio: Proxima, 2015-12-21 00:03
Pokaż pozostałe 4 komentarze
Aha, myslałem, że może jest jakaś przygotowana virtualka pod RE :) - bewuo 2016-01-26 10:54
Hm. Da się w ten sposób używać qemu/bochs. (qemu polecam, szybsze) - Proxima 2016-01-26 10:55
A czym się różni takie qemu od virtualki z Windowsem? Tylko szybkością, tak? - bewuo 2016-01-26 11:00
Nie emuluje całego (tzn tak jak VirtualBox - ekran, dźwięk, etc) systemu tylko 'tłumaczy' binarkę z obcej architektury na architekturę hosta. Tak czy inaczej działa to dosyć fajnie, można podpiąć się GDB i normalnie debugować. (Tu więcej o tym co bochs własciwie robi:https://en.wikipedia.org/wiki/Dynamic_recompilation) - Proxima 2016-01-26 11:06

Pozostało 580 znaków

2015-12-21 00:39
2

Obrazki z pieta

@Marszal

4bb86856c632818dc9df407384711ad9Marszal.png

@karol.pysklo

8198e588fb9ecf7771733dc62d2a9d0bkarol.pysklo.png

@Hummin

b943ac1750edeae353113aa9d69bd368Hummin.png

@WhiteLightning

fb7e607b08a9fc23ebef130e6023761aWhiteLightning.png

W nagrodę za to, że daliście radę się podpisać i wstawiliście obrazek, który najprawdopodobniej sami narysowaliście, wszyscy dostajecie 300pkt.

@Marszal i @karol.pysklo jesteście po prostu mega :D :D - Shalom 2015-12-21 00:43
Dobra zabawa była z tym rysowaniem kodu :D - Marszal 2015-12-21 10:05
Ja sie przyznaje ze poszedlem na latwizne i uzylem tego: http://www.toothycat.net/wiki/wiki.pl?MoonShadow/Piet :) - WhiteLightning 2016-01-26 11:21

Pozostało 580 znaków

2015-12-21 00:43
4

Język cz. 1 i 2 (Perl), niezoptymalizowałem PL i HU :)

if(($line =~ m/thn/) || ($line =~ m/oxt/)) {
  $lang = 'arp';
} else {
if(($line =~ m/ the /)) {
  $lang = 'en';
} else {
if(($line =~ m/ zu /) || ($line =~ m/ das /)) {
  $lang = 'de';
} else {
if(($line =~ m/vous/) || ($line =~ m/eux/) || ($line =~ m/ois /)) {
  $lang = 'fr';
} else {
if(($line =~ m/wek /) || ($line =~ m/szcz/) || ($line =~ m/iego /) || ($line =~ m/szci/) || ($line =~ m/anie /) || ($line =~ m/dzie/) || ($line =~ m/ w /)) {
  $lang = 'pl';
} else {
if(($line =~ m/sszo/) || ($line =~ m/ettm/) || ($line =~ m/ssze/) || ($line =~ m/szth/) || ($line =~ m/szola/) || ($line =~ m/gysz/) || ($line =~ m/ itt /) || ($line =~ m/ ki /) || ($line =~ m/tsz/) || ($line =~ m/egy/)) {
  $lang = 'hu';
} else {
if(($line =~ m/ y /) || ($line =~ m/eres /) || ($line =~ m/esas /)) {
  $lang = 'rmr'; # hisz
} else {
if(($line =~ m/aadh/) || ($line =~ m/aama/) || ($line =~ m/aana/)) {
  $lang = 'sa'; # sanskrit
}
edytowany 1x, ostatnio: furious programming, 2015-12-21 01:34
+ za perla :D - other019 2015-12-21 00:49
dobra heurystyka :D :D Siadała zawsze czy odpalałeś X razy żeby przeszło? ;] I w ogóle RMR to nie hiszpański tylko http://www.gutenberg.org/browse/languages/rmr https://pl.wikipedia.org/wiki/Caló ;) - Shalom 2015-12-21 00:56
przeszło całe od razu. Wiem że nie hiszpański, ale dialekt, tak w kodzie oznaczyłem aby się nie myliło z arp. - rkot 2015-12-21 01:25

Pozostało 580 znaków

2015-12-21 01:02
LKS
2

Mój pierwszy CTF w życiu. Fajnie było sie zabawić.
Połowę z rozwiązanych zrobiłem w telefonie (przeglądarka i hexeditor).
Pozostałe python, wireshark na komputerze. Sposoby podobne jak @akrasuski1
Ad. xorme
xorsearch re1.exe p4{
Ad. Wykrywanie języka
Bot w pythonie. Wystarczyły pięciowyrazowe "słowniki" i zliczanie wystąpień
Ad. CAPTCHA
Python + tesseract
Ad. Kolorowa CAPTCHA
jw + zamiana tła na białe, a liter na czarne
Ad. Kreskowana CAPTCHA
a. Zliczenie wystąpień pikseli o danym kolorze.
b. Najczęstszy kolor to tło, na drugim miejscu tekst.
c. Pozostałe to linie
d. Zamiana tła na białe, a liter i linii na czarne
e. Potem jeszcze cv2.MORPH_CLOSE
f. tesseract i tak miał czasem problem z rozróżnieniem liter H,W,M. Tam gdzie wykrył H poddawałem ręcznej weryfikacji.

Usuwanie linii można było trochę sprytniej zrobić -> po zamianie wiodących kolorów na czarny i biały, jeśli nad i pod pikselem innego koloru jest czarny to kolorujesz na czarno bo to znaczy ze kreska przechodzi przez literkę, a w innym przypadku na biało. W efekcie uzyskujesz prawie że idealny symbol :) - Shalom 2015-12-21 01:10
Faktycznie. Wtedy zbędne jest MORPH_CLOSE. - LKS 2015-12-21 01:16
@LKS poza tym można było to też dopasoywać "ręcznie", bez tesseracta, z lepszymi efektami :) Tak jak robiliśmy tutaj: https://github.com/p4-team/ctf/tree/master/2015-10-02-dctf/misc_400_captcha bo tego tesseract by nie łyknął - Shalom 2015-12-21 01:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot