29.09.2013 | 07:43

Adam Haertle

Konkurs raz jeszcze, czyli osobista relacja zwycięzcy

Marcin Kuźma, zwycięzca konkursu z dziesięcioma zagadkami o wejściówkę na konferencję SECURE 2013, na naszą prośbę spisał relację  z ich rozwiązywania. Napisał ja tak, że trzeba go tylko namówić na dalszą współpracę. Zapraszamy do lektury.

author: marcin kuźma
email: kuzma_marcin(at)o2.pl
Hej wybaczcie, że tak późno ale trochę choroba mnie rozłożyła a pisanie z gorączką jest dość trudne i problematyczne, ok dość użalania się nad sobą -> do dzieła:

moje narzędzia:
- hex edytor w tym wypadku hexdump lub xxd (dla wszystkich) lub printex (adama.s nie mylić z autorem konkursu, jak ktoś by chciał podpytam czy udostępni)
- przeglądarka firefox + Data Tamper + Live HTTP headers + FoxyProxy (wtyczki okazały się niepotrzebne)
- Burp Suite Free (to również było niepotrzebne)
- txt edytor z koloryzowaniem składni (np. vi, sublime)
- konsola :P
- wujek Google
- GIMP

do dziela:
Po załadowaniu https://zaufanatrzeciastrona.pl/konkurs/secure2013/konkurs.html i przeczytaniu widocznej treści, pierwsze co zrobiłem to wcisnąłem magiczne CTRL+A aby zobaczyć czy są ukryte/niewidoczne znaki - nie było. O dziwo string z punktu 3 wskazówek czyli "OAMRJD,ANA,TAJC.OYANAC,JCA;YATRLR,CAEANA" oraz końcówka czyli "Checksum: JZAVOWKTKBAUGSCCIVJEOQKNKVKECQ2IKBHUIT2CJZHUURKTKRFU6VCXIJKVIQKDJA======" jakoś nie zwróciła mojej większej uwagi, wydało mi się to za proste...
Podgląd źródła:
Po wyświetleniu źródła stronki zabrałem się za szukanie URL-i na ponad 210 linii kodu było ich jak dobrze pamiętam trzy w tym jeden link do CSS
-------------------------URL-s-------------------------
1. <link rel="stylesheet" type="text/css" href="https://zaufanatrzeciastrona.pl/konkurs/secure2013/style.css" />
2. a.src="//ajax.cloudflare.com/cdn-cgi/nexp/abv=3600133553/cloudflare.min.js
3. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-------------------------URL-s-------------------------

Po wyświetleniu styli z pliku "style.css" od razu zaświeciły dwie nazwy plików PNG:
1. 879059e40c2b4a946699612116cb795d.png
2. 579f2e0b2408025c32b96217a84d4017.png
############################################################_1_############################################################
zobaczmy co to jest....
Pierwszy plik https://zaufanatrzeciastrona.pl/konkurs/secure2013/879059e40c2b4a946699612116cb795d.png, yhym jakieś zera i jedynki (będę przepisywał? nieeeeeeeee nie ma mowy :)), google - free ocr (ja użyłem http://free-online-ocr.com/ tylko zera rozpoznał jako literkę "o" replace "o" na "0"), następnie bin -> text i mamy pierwszą flagę:

"PAN POMIDOR WLAZL NA TYCZKE I PRZEDRZEZNIA OGRODNICZKE"
############################################################_1_############################################################

############################################################_2_############################################################
przyjrzyjmy się bliżej stringowi pod czerwonym bincodem ciężko zauważalny albo w ogóle (posiadacze laptopów mogli zauważyć różnicę poprzez zmianę kąta nachylenia matrycy), ja zauważyłem go gdy powiększyłem obrazek ale żeby łatwiej się odczytywało posłużyłem się GIMP-em (Filters > Enhance > Sharpen i wartość na 100):
BOGHFOUOBWSKKRNWSBHOFUCK (FUCK - może to ukryty przekaz Brzechwy xD)
MHOYWSGZMGNMGWSFCNACKM
parę kombinacji i okazuje się, że przesunięcie wynosi 12 czyli ROT12, dlaczego akurat ROTX a nie coś innego, a no dlatego, że wszystkie litery były uppercase i szyfr ten jest dość popularny i prosty także nie sposób było go pominąć.
$ echo 'BOGHFOUOBWSKKRNWSBHOFUCKMHOYWSGZMGNMGWSFCNACKM' | tr 'A-Z' 'M-ZA-N'
druga flaga:

"NA STRAGANIE W DZIEN TARGOWY TAKIE SLYSZY SIE ROZMOWY"
############################################################_2_############################################################

############################################################_3_############################################################
W dalszej kolejności zająłem się kodem na stronie konkursu napisanym w js:

<script type="text/javascript">
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 5=["\\2\\1\\2\\1\\1\\2\\1\\2\\2\\1\\1\\2\\2\\1\\1\\1\\2\\1\\1\\1\\1\\1\\2\\1\\1\\2\\1\\2\\1\\1\\1\\2\\1\\1\\1\\1\\1\\2\\1\\1\\1\\1\\1\\2\\1\\1\\2\\1\\1\\1\\3\\1\\1\\2\\1\\1\\1\\1\\1\\1\\1\\1\\2\\1\\1\\1\\1\\1\\1\\1\\1\\2\\1\\2\\1\\1\\1\\2\\1\\1\\1\\1\\1\\2\\1\\1\\1\\2\\1\\2\\2\\1\\2\\1\\1\\1\\1\\1\\1\\1\\1\\3\\1\\2\\1\\1\\2\\2\\1\\1\\1\\1\\1\\2\\2\\1\\2\\2\\1\\2\\2\\2\\1\\2\\1\\2\\2\\1\\1\\1\\1\\1\\2\\1\\2\\1\\1\\1\\2\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\2\\1\\3\\2\\1\\1\\2\\1\\2\\1\\1\\1\\1\\2\\1\\2\\2\\2\\1\\1\\2\\1\\1\\1\\1\\1\\1\\2\\1\\1\\1\\1\\1\\2\\1\\2\\2\\2\\1\\2\\2\\2\\1\\2\\1\\1\\1\\2\\1\\1\\2\\1\\1\\1\\2\\1\\2\\2"];4 6=5[0];',7,7,'|x61|x62|x20|var|_0x3365|flaga'.split('|'),0,{}))
</script>

znany wszystkim ciąg "function(p,a,c,k,e,d)", ktoś tutaj bawił się zabawkami z obfuskacją....szybki strzał google i znalazłem się na http://jsbeautifier.org/ -> obrabianko i mamy na wyjściu:

var _0x3365 = ["\x62\x61\x62\x61\x61\x62\x61\x62\x62\x61\x61\x62\x62\x61\x61\x61\x62\x61\x61\x61\x61\x61\x62\x61\x61\x62\x61\x62\x61\x61\x61\x62\x61\x61\x61\x61\x61\x62\x61\x61\x61\x61\x61\x62\x61\x61\x62\x61\x61\x61\x20\x61\x61\x62\x61\x61\x61\x61\x61\x61\x61\x61\x62\x61\x61\x61\x61\x61\x61\x61\x61\x62\x61\x62\x61\x61\x61\x62\x61\x61\x61\x61\x61\x62\x61\x61\x61\x62\x61\x62\x62\x61\x62\x61\x61\x61\x61\x61\x61\x61\x61\x20\x61\x62\x61\x61\x62\x62\x61\x61\x61\x61\x61\x62\x62\x61\x62\x62\x61\x62\x62\x62\x61\x62\x61\x62\x62\x61\x61\x61\x61\x61\x62\x61\x62\x61\x61\x61\x62\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x62\x61\x20\x62\x61\x61\x62\x61\x62\x61\x61\x61\x61\x62\x61\x62\x62\x62\x61\x61\x62\x61\x61\x61\x61\x61\x61\x62\x61\x61\x61\x61\x61\x62\x61\x62\x62\x62\x61\x62\x62\x62\x61\x62\x61\x61\x61\x62\x61\x61\x62\x61\x61\x61\x62\x61\x62\x62"];
var flaga = _0x3365[0];

wyświetlimy sobie flagę document.write(flaga);
output:babaababbaabbaaabaaaaabaababaaabaaaaabaaaaabaabaaa aabaaaaaaaabaaaaaaaababaaabaaaaabaaababbabaaaaaaaa abaabbaaaaabbabbabbbababbaaaaababaaabaaaaaaaaaaaba baababaaaababbbaabaaaaaabaaaaababbbabbbabaaabaabaaababb

no i tutaj miałem lekki problem bo szczerze nie wiedziałem co to jest ale wujek mi powiedział, że to szyfr bacon-a, decode i na wyjściu trzecia flaga:

"WY NIE WIECIE A JA WIEM JAK ROZMAWIAC TRZEBA Z PSEM"
############################################################_3_############################################################

############################################################_4_############################################################
lekki przestój, wróciłem do tematu a raczej do pliku 879059e40c2b4a946699612116cb795d.png, postanowiłem obejrzeć go hexdumpem, a więc
$hexdump -C 879059e40c2b4a946699612116cb795d.png
albo np.:
strings 879059e40c2b4a946699612116cb795d.png

i mamy:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 01 90 00 00 00 c8 08 06 00 00 00 c6 15 b7 |................|
00000020 e2 00 00 00 09 70 48 59 73 00 00 0b 12 00 00 0b |.....pHYs.......|
00000030 12 01 d2 dd 7e fc 00 00 00 c3 74 45 58 74 43 6f |....~.....tEXtCo|
00000040 6d 6d 65 6e 74 00 30 31 20 31 30 20 30 31 31 20 |mment.01 10 011 |
00000050 31 30 31 20 30 30 31 31 20 31 20 30 31 30 31 20 |101 0011 1 0101 |
00000060 30 30 31 31 20 30 31 30 20 31 30 20 30 30 30 20 |0011 010 10 000 |
00000070 31 30 30 31 20 30 30 30 20 30 31 31 20 31 30 20 |1001 000 011 10 |
00000080 31 30 31 31 20 30 31 30 20 31 30 31 20 30 30 31 |1011 010 101 001|
00000090 31 20 31 30 20 30 31 30 31 20 30 30 31 31 20 30 |1 10 0101 0011 0|
000000a0 31 30 20 31 30 20 30 30 20 31 31 20 31 20 31 31 |10 10 00 11 1 11|
000000b0 31 20 30 30 31 31 20 30 31 30 20 31 30 20 31 30 |1 0011 010 10 10|
000000c0 31 31 20 31 30 20 30 31 30 20 31 30 20 30 31 30 |11 10 010 10 010|
000000d0 31 20 30 30 31 31 20 30 31 30 20 31 30 20 30 31 |1 0011 010 10 01|
000000e0 31 20 30 30 31 31 20 31 31 20 31 30 30 20 31 30 |1 0011 11 100 10|
000000f0 20 30 31 30 31 20 30 30 31 31 20 30 31 30 20 31 | 0101 0011 010 1|
00000100 30 bd 8f b8 61 00 00 11 04 49 44 41 54 78 9c ed |0...a....IDATx..|

ciąg: "01 10 011 101 0011 1 0101 0011 010 10 000 1001 000 011 10 1011 010 101 0011 10 0101 0011 010 10 00 11 1 111 0011 010 10 1011 10 010 10 0101 0011 010 10 011 0011 11 100 10 0101 0011 010 10" starałem się potraktować jako ciąg binarny ale wychodziła kaszanka w stylu "gN¦¡!Ö©Êj?5\¥53ä¦".
Podejście drugie: można było zauważyć, iż ciąg zer i jedynek jest ewidentnie podzielony na bloki po 2, 3 oraz 4 cyfry (0,1), pierwsze co mi przyszło do głowy to kod Morse'a, ponieważ w alfabecie łacińskim znaki od A do Z reprezentowane są właśnie przez ciąg od 2-4 znaków kropko-kreskowych. Zamiana "0" na "-" i "1" na "." dała w efekcie ciąg "-. .- -.. .-. --.. . -.-. --.. -.- .- --- .--. --- -.. .- .-.. -.- .-. --.. .- -.-. --.. -.- .- -- .. . ... --.. -.- .- .-.. .- -.- .- -.-. --.. -.- .- -.. --.. .. .-- .- -.-. --.. -.- .-" po przekształceniu flaga czwarta:

"NAD RZECZKA OPODAL KRZACZKA MIESZKALA KACZKA DZIWACZKA"
############################################################_4_############################################################

############################################################_5_############################################################
W końcu przyszedł czas na drugi plik ze style.css mianowicie 579f2e0b2408025c32b96217a84d4017.png. Standardowo szukanie metadanych, komentarzy hexdump gimp, nic nie dało czyli pozostaje przyjrzenie się tym wielkim różnokolorowym pikselom.
Ciekawe jakie to kolory? - ponoć mężczyźni nie znają się na kolorach ale na HEX-ie już tak :)
po próbkowaniu od lewej-górnej:
415a58 534442 584c4d 425156 514b4c 445a59 564e53 524b4c 4b4c47 5a4e59 4f5a54 5a4f41 5a5956 000000 zera sobie odpuścimy.
$echo "415a58534442584c4d425156514b4c445a59564e53524b4c4b4c475a4e594f5a545a4f415a5956" | xxd -r -p
$AZXSDBXLMBQVQKLDZYVNSRKLKLGZNYOZTZOAZYV
hmmmm może ROT-X, nie nic nie dało pfff, przypomniałem sobie, że każda kolejna flaga nie była na wyjściu szyfrowana tym samym sposobem, więc trzeba będzie znaleźć coś jeszcze. Wujku google pomóż wklepałem hasło "classical cryptography" w którymś z wątków znalazłem AtBash-a, który powstał około roku 500 p.n.e. WOW
$echo "AZXSDBXLMBQVQKLDZYVNSRKLKLGZNYOZTZOAZYV" | sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ZYXWVUTSRQPONMLKJIHGFEDCBA/"
$ZACHWYCONYJEJPOWABEMHIPOPOTAMBLAGALZABE

falga piąta:
"ZACHWYCONY JEJ POWABEM HIPOPOTAM BLAGAL ZABE"
############################################################_5_############################################################

############################################################_6_############################################################
Back to the beginning.

Na stronie konkursu pojawia się tekst: "Checksum: JZAVOWKTKBAUGSCCIVJEOQKNKVKECQ2IKBHUIT2CJZHUURKTKRFU6VCXIJKVIQKDJA======" w źródle strony jest on wyenterowany aż na 212 linię, tak jak by autor chciał nam powiedzieć "tak to jest flaga xD".
Na pierwszy rzut oka string przypomina base64, początek alfanumeryczny hmmm ale same duże litery i trzy cyfry za to koniec dziwny bo zazwyczaj (ale nie zawsze) powinien kończyć się dwoma znakami niealfanumerycznymi np "==", "__" lub "--". No dobrze, co wiemy:
- podobny do BASE
- same duże litery
- na końcu "======"
- trzy cyfry
- długość 72 ($expr length)
trzeba zajrzeć do RFC4648 i odszukać "======" no i się wszystko wyjaśniło:
$base32_encode('JZAVOWKTKBAUGSCCIVJEOQKNKVKECQ2IKBHUIT2CJZHUURKTKRFU6VCXIJKVIQKDJA======')
$NAWYSPACHBERGAMUTACHPODOBNOJESTKOTWBUTACH

flaga szósta: "NA WYSPACH BERGAMUTACH PODOBNO JEST KOT W BUTACH"
############################################################_6_############################################################

############################################################_7_############################################################
Uffff jestem drugi przed kimś kto ma 7 pkt. zastanawiałem się dlaczego odpuścił przecież brakowało mu niewiele...
Kończą mi się powoli pomysły a tam jeszcze 4 flagi siedzą...

punkt 3 wskazówek:
3. Flagi są ukryte, zaszyfrowane lub zakodowane i wyglądają na przykład tak: "OAMRJD,ANA,TAJC.OYANAC,JCA;YATRLR,CAEANA".

ehhhhh, jak na tacy autor wystawił flagę

dobrze, jaką to ma długość:
$expr length "OAMRJD,ANA,TAJC.OYANAC,JCA;YATRLR,CAEANA"
$40

sześć poprzednich flag to były wiersze Brzechwy, a raczej ich początki więc wpadłem na diabelski pomysł wyodrębnienia wszystkich początków ze wszystkich wierszy a następnie policzeniu ich długości, i tak powstał chocapic :P

baza po obróbkach wyglądała mniej więcej tak:

NASTRAGANIEWDZIENTARGOWYTAKIESLYSZYSIEROZMOWY
PANPOMIDORWLAZLNATYCZKEIPRZEDRZEZNIAOGRODNICZKE
ZACHWYCONYJEJPOWABEMHIPOPOTAMBLAGALZABE
NADRZECZKAOPODALKRZACZKAMIESZKALAKACZKADZIWACZKA
PROSZEPANAPEWNAKWOKATRAKTOWALASWIATZWYSOKA
DOBIEDRONKIPRZYSZEDLZUKWOKIENECZKOPUKPUKPUK
MIESZKALASTONOGAPODBIALABOTAKSIEJEJPODOBALO
NABRZEGUBLEKITNEJRZECZKIMIESZKAJAMALESMUTECZKI
IDZIEJEZIDZIEJEZMOZECIEBIEPOKLUCTEZ
PEWNAZABABYLASLABA
PEWNAZABABYLASLABAWIECPRZYCHODZIDODOKTORAIPOWIADAZEJESTCHORA
NIECHMIKAZDYPOWIESZCZERZESKADSIEWZIELYDZIURYWSERZE
NAWYSPACHBERGAMUTACHPODOBNOJESTKOTWBUTACH
MOJSLIMAKUPOKAZROZKIDAMCISERANAPIEROZKI
ENTLICZEKPENTLICZEKCZERWONYSTOLICZEKANATYMSTOLICZKUPLECIONYKOSZYCZEK
WYNIEWIECIEAJAWIEMJAKROZMAWIACTRZEBAZPSEM
NAULICYTRYBUNALSKIEJMIESZKASOBIESTASPYTALSKI
ZKAPIELIKAZDYKORZYSTAAMUCHACHCIALABYCCZYSTA
RYBYZABYIRAKIRAZWPADLYNAPOMYSLTAKI
MOLEFOCEZJADLYFUTROWCZYMNASPACERWYJDEJUTRO
JAKWIADOMOZZOOLOGIIKAZDYKONMACZTERYNOGI
PLACZECHRZANNASALATERCEAZSIEWSZYSTKIMKRAJESERCE
JAKSIEZEGARKOWIPOWODZIOWSZEMNICZEGOCHODZI
TYDZIENDZIECIMIALSIEDMIORONIECHSIETUTAJWSZYSTKIEZBIORA
GRUBACIOTKADANUTAROBISWETRYNADRUTACH
SPOTKALKATARKATARZYNEAPSIK
SAMOCHWALAWKACIESTALAIWCIAZTAKOPOWIADALA
PROSZEPANAPROSZEPANAZASZLAUNASWIELKAZMIANA
PIOTRUSNIEBYLDZISIAJWSZKOLEANTEKZROBILDZIUREWSTOLE
NATAPCZANIESIEDZILENNICNIEROBICALYDZIEN
MATOLEKRAZZWIEDZALZOOIWOLALCOCHWILAOO
TANCOWALAIGLAZNITKAIGLAPIEKNIENITKABRZYDKO
POJECHALMICHALPODCZESTOCHOWETAMKUPILBUTYSIEDMIOMILOWE
DWIEDAMULKIZKOZIEJWOLKIKUPOWALYWSKLEPIEKULKI
WEWSIDUZEKALUZESIEDZIALWROBELNAMURZE
LECIALAMUCHAZŁODZIDOZGIERZAPODRODZEPATRZYSTRAZACKAWIEZA
MIESZKALWWISLESUMWASATYZNAKOMITYMATEMATYK
BYLOSOBIERAZJAJKOMADRZEJSZEODKURYKURAWYLAZIZESKORY

teraz przyszedł czas na policzenie długości
-----------------start-----------------
#!/bin/bash
#bszehfa liczydler v0.00001

bszehfa=$1
k=1
while read line
do
echo -ne $k'.' $line '=' && expr length $line
((k++))
done < $bszehfa
-----------------stop------------------
output:
1. NASTRAGANIEWDZIENTARGOWYTAKIESLYSZYSIEROZMOWY =45
2. PANPOMIDORWLAZLNATYCZKEIPRZEDRZEZNIAOGRODNICZKE =47
3. ZACHWYCONYJEJPOWABEMHIPOPOTAMBLAGALZABE =39
4. NADRZECZKAOPODALKRZACZKAMIESZKALAKACZKADZIWACZKA =48
5. PROSZEPANAPEWNAKWOKATRAKTOWALASWIATZWYSOKA =42
6. DOBIEDRONKIPRZYSZEDLZUKWOKIENECZKOPUKPUKPUK =43
7. MIESZKALASTONOGAPODBIALABOTAKSIEJEJPODOBALO =43
8. NABRZEGUBLEKITNEJRZECZKIMIESZKAJAMALESMUTECZKI =46
9. IDZIEJEZIDZIEJEZMOZECIEBIEPOKLUCTEZ =35
10. PEWNAZABABYLASLABA =18
11. PEWNAZABABYLASLABAWIECPRZYCHODZIDODOKTORAIPOWIADAZEJESTCHORA =60
12. NIECHMIKAZDYPOWIESZCZERZESKADSIEWZIELYDZIURYWSERZE =50
13. NAWYSPACHBERGAMUTACHPODOBNOJESTKOTWBUTACH =41
14. MOJSLIMAKUPOKAZROZKIDAMCISERANAPIEROZKI =39
15. ENTLICZEKPENTLICZEKCZERWONYSTOLICZEKANATYMSTOLICZKUPLECIONYKOSZYCZEK =68
16. WYNIEWIECIEAJAWIEMJAKROZMAWIACTRZEBAZPSEM =41
17. NAULICYTRYBUNALSKIEJMIESZKASOBIESTASPYTALSKI =44
18. ZKAPIELIKAZDYKORZYSTAAMUCHACHCIALABYCCZYSTA =43
19. RYBYZABYIRAKIRAZWPADLYNAPOMYSLTAKI =34
20. MOLEFOCEZJADLYFUTROWCZYMNASPACERWYJDEJUTRO =42
21. JAKWIADOMOZZOOLOGIIKAZDYKONMACZTERYNOGI =39
22. PLACZECHRZANNASALATERCEAZSIEWSZYSTKIMKRAJESERCE =47
23. JAKSIEZEGARKOWIPOWODZIOWSZEMNICZEGOCHODZI =41
24. TYDZIENDZIECIMIALSIEDMIORONIECHSIETUTAJWSZYSTKIEZBIORA =54
25. GRUBACIOTKADANUTAROBISWETRYNADRUTACH =36
26. SPOTKALKATARKATARZYNEAPSIK =26
27. SAMOCHWALAWKACIESTALAIWCIAZTAKOPOWIADALA =40
28. PROSZEPANAPROSZEPANAZASZLAUNASWIELKAZMIANA =42
29. PIOTRUSNIEBYLDZISIAJWSZKOLEANTEKZROBILDZIUREWSTOLE =50
30. NATAPCZANIESIEDZILENNICNIEROBICALYDZIEN =39
31. MATOLEKRAZZWIEDZALZOOIWOLALCOCHWILAOO =37
32. TANCOWALAIGLAZNITKAIGLAPIEKNIENITKABRZYDKO =42
33. POJECHALMICHALPODCZESTOCHOWETAMKUPILBUTYSIEDMIOMILOWE =53
34. DWIEDAMULKIZKOZIEJWOLKIKUPOWALYWSKLEPIEKULKI =44
35. WEWSIDUZEKALUZESIEDZIALWROBELNAMURZE =36
36. LECIALAMUCHAZŁODZIDOZGIERZAPODRODZEPATRZYSTRAZACKAWIEZA =56
37. MIESZKALWWISLESUMWASATYZNAKOMITYMATEMATYK =41
38. BYLOSOBIERAZJAJKOMADRZEJSZEODKURYKURAWYLAZIZESKORY =50

tylko jeden wiersz miał długość 40 znaków: "SAMOCHWALAWKACIESTALAIWCIAZTAKOPOWIADALA"
małe potwierdzenie wyniku:
S A M O C H W A L A W K A C I E S T A L A I W C I A Z T A K O P O W I A D A L A
O A M R J D , A N A , T A J C . O Y A N A C , J C A ; Y A T R L R , C A E A N A

A-A, M-M, w-,, S-O, O-R itd.

potem dopiero okazało się, że to DVORAK :) - trzeba było więcej czytać książek a w szczególności tytuł "Stealing the Network: How to Own an Identity"
############################################################_7_############################################################

############################################################_8&9_############################################################
pomysły naprawdę się kończą....
ale zaraz zaraz pliki png nie miały zwyczajowych nazw tylko jakiś gener.

$expr expr length 879059e40c2b4a946699612116cb795d
$32
$expr expr length 579f2e0b2408025c32b96217a84d4017
$32
na bank MD5-tka
zróbmy mały test:
$md5sum 879059e40c2b4a946699612116cb795d.png
$e7b3073bd712f91b55dc1c3c1e3afceb
$md5sum 579f2e0b2408025c32b96217a84d4017.png
$666a5c799b39ebc047c65c5e4a4416f7

czyli to nie jest jakiś zwykły gener, sumy w nazwach się nie zgadzają....wróćmy zatem do mojego diabelskiego pomysłu i go przeróbmy:)
-----------------start-----------------
#!/bin/bash
#bszehfa brutforser v0.1

bszehfa=$1
k=1
while read line
do
echo -ne $k'.' $line ' ' && echo -n "$line" | md5sum
((k++))
done < $bszehfa >> temp
cat temp | grep "879059e40c2b4a946699612116cb795d"
rm temp
-----------------stop------------------
output:
$NATAPCZANIESIEDZILENNICNIEROBICALYDZIEN 879059e40c2b4a946699612116cb795d -
flaga numer osiem:
"NA TAPCZANIE SIEDZI LEN NIC NIE ROBI CALY DZIEN"

mam 8 pkt ciekawe co już zrobił sevenpointsman > We are here looking for the All Spark. And we must find it before Megatron. :)

podobnie z flaga dziewiątą tylko md5(md5($line))
output:
$PROSZEPANAPEWNAKWOKATRAKTOWALASWIATZWYSOKA 579f2e0b2408025c32b96217a84d4017
flaga numer dziewięć:
"PROSZE PANA PEWNA KWOKA TRAKTOWALA SWIAT Z WYSOKA"

############################################################_8&9_############################################################

############################################################_10_############################################################
endings

nie no teraz to już naprawdę nie mam pomysłu po dłuższym czasie czepiłem się dalej kodu strony konkursu.
Moją uwagę zwrócił kod:

<script type="text/javascript">//<![CDATA[

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-28179139-1']);
_gaq.push(['_trackPageview']);
(function () {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
ga.var = '42 54 12 54 55 11 12 54 24 42 11 25 24 42 11 55 52 35 11 14 31 54 33 11 35 34 32 54 43 31 44 11 25 24'
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
//]]></script>

a dokładnie to co z niego wystawało (brzydko napisane bez dwóch tabów):
ga.var = '42 54 12 54 55 11 12 54 24 42 11 25 24 42 11 55 52 35 11 14 31 54 33 11 35 34 32 54 43 31 44 11 25 24'
przyjrzałem się przykładowej podstronie bloga np. https://zaufanatrzeciastrona.pl/post/zdobadz-flage-a-nawet-10-czyli-konkurs-z-wejsciowka-na-secure-dla-zwyciezcy/

skrypt z googla wygląda tak:

<script type="text/javascript">//<![CDATA[
// Google Analytics for WordPress by Yoast v4.3.3 | http://yoast.com/wordpress/google-analytics/
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-28179139-1']);
_gaq.push(['_setCustomVar',2,'author','adam',3],['_setCustomVar',3,'tags','secure ctf konkurs',3],['_setCustomVar',4,'year','2013',3],['_setCustomVar',5,'category','info',3],['_trackPageview']);
(function () {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
//]]></script>

i widać, że nie ma tam czegoś takiego jak "ga.var =" ok co dalej. ANALIZA:
42 54 12 54 55 11 12 54 24 42 11 25 24 42 11 55 52 35 11 14 31 54 33 11 35 34 32 54 43 31 44 11 25 24
- cyfry od 1-5
- zapisane w blokach po dwie cyfry w jednym
- expr length (po wywaleniu spacji) 68/2 = 34
a może to matrix :D
1 2 3 4 5
1 A B C D E
2 F G H I J
3 K L M N O
4 P Q R S T
5 U V W X Y Z

ejj ta zetka mi nie pasuje ale dobra sprawdźmy

ITFTY - dobra to nie to, wujek google fraza: "szukam szyfru z tablicą gdzie nie wystaje Z!" wow szachownica Polibiusza hmmm sprytny grek połączył "i" z "j" :-)
no to sprawdzamy:

1 2 3 4 5
1 A B C D E
2 F G H I/J K
3 L M N O P
4 Q R S T U
5 V W X Y Z

I/J UFUZAF - znowu nie pasuje

a może zrobimy zamiankę

42 54 12 54 55 11 12 54 24 42 11 25 24 42 11 55 52 35 11 14 31 54 33 11 35 34 32 54 43 31 44 11 25 24
conv
24 45 21 45 55 11 21 45 42 24 11 52 42 24 11 55 25 53 11 41 31 45 33 11 53 43 23 45 34 13 44 11 52 42
R Y B Y Z A B Y I R A K I R A Z W P A D L Y N A P O M Y S L T A K I
bingo!

flaga dziesiąta:
"RYBY ZABY I RAKI RAZ WPADLY NA POMYSL TAKI"

extras:

a może sprawdzę sobie to diabelskim skryptem :P
-----------------start-----------------
#!/bin/bash
#bszehfa brutforser v0.2

bszehfa=$1
while read line
do
echo -ne $line '=' && expr length $line
done < $bszehfa >> temp
cat temp | grep '34'
rm temp
-----------------stop------------------

ooooo RYBYZABYIRAKIRAZWPADLYNAPOMYSLTAKI =34 xD

p/w expr length (po wywaleniu spacji) 68/2 = 34
############################################################_10_############################################################

Podsumowanie:
Każda flaga wymagała większego lub mniejszego wysiłku, moim zdaniem dla kogoś dana flaga mogła być oczywista i prosta wręcz banalna a dla kogoś innego ta sama flaga były trudna no i na odwrót. Dla mnie największą trudność a zarazem zabawę dała flaga z DVORAK-iem #7 i flaga z szachownicą Polibiusza ale brutforce nie ginie i zawsze będzie pomocny gdy wszystkie inne metody zawodzą (to tak jak z jasnowidzami :P).
Cieszę się, że organizowane są takie konkursy już nie mówię o nagrodach...gimnastyka mózgu też potrzebna dlatego tutaj trzeba serdecznie podziękować autor/om tego projektu i sponsorom.
Chciałbym również podziękować wszystkim uczestnikom za rywalizację i wspólne błądzenie po kodzie i szyfrach jak dzieci we mgle =)

Gr33tz: ania (za cierpliwość), karol.dżej (good idea), adam.s (printex) and others

inne:
gdzie błądziłem we mgle:
- Cookie: __cfduid=d6551bb3edb73707c064fde3eb683df001380357760202
- https://zaufanatrzeciastrona.pl/konkurs/secure2013/ - 403 Forbidden \n nginx
- próba odczytania ukrytej wiadomości zapisując wszystkie wielkie litery z podpunktów treści strony zaczynając od góry czyli KKPKOODZOZJJNW WOFJ
- IDAT chunk (red 10100100->10100101, green 11101100->11101101, blue 1010100->1010101) stegano
- poszukiwania niewidzialnego atramentu :)
- gdy ciąg z ga.var "42541254551112542442112524421155523511143154331135343254433144112524" przekształciłem z char na text w wyniku otrzymałem "*6676**74#6!#" 6+," - chciałem dzwonić :)))
- i inne

bonus:
telnet towel.blinkenlights.nl
BOGHFOUOBWSKKRNWSBHOFUCK (FUCK - może to ukryty przekaz Brzechwy xD)
Powrót

Komentarze

  • 2013.09.29 12:18 Gynvael Coldwind

    Good work i dzięki za write-up :)

    Odpowiedz
  • 2013.09.29 16:16 Drako

    Gratuluje wygranemu :-)

    Odpowiedz
  • 2013.09.29 17:54 marcin

    dzieki…

    moze teraz ZEST, albo cos innego xD

    Odpowiedz
  • 2013.09.30 12:34 xyz

    A może by tak zawinąć wiersze w tym cytacie? Na laptopowym 1280×800 najdłuższa linia wymaga dłuuugiego przewijania

    Odpowiedz
    • 2013.10.03 09:12 andrzej

      Popieram – nie da się czytać.

      Odpowiedz
  • 2013.10.03 01:06 duch_lenina

    a w Rosji frekwencja wynosila 101% :) sorry ale nie kupuje

    Odpowiedz

Zostaw odpowiedź do marcin

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

Konkurs raz jeszcze, czyli osobista relacja zwycięzcy

Komentarze