Несколько решенных мной заданий на BaltCTF Quals 2013
Hidden 1 (100, hidden)
Открываем favicon.ico, смотрим в конец
Strange Language (100, ppc)
Дан исходный код на неизвестном языке в файле module1.rf.
По расширению и синтаксису определяем что это Refal. Разбираемся что он делает, переписываем обратные преобразования на php и запускаем.
Код:
$module "module1";
$use StdIO;
$use String;
$use Compare;
$use Convert;
$func Main =e;
$func Chk e=e;
$func Cmp e=e;
$func Go e=e;
$func Mag e=e;
$func Rps e=e;
$func Rps2 e=e;
Main
= <Go<Chk(<ReadLine>)('0123456789abcdef')()()>>;
Mag {
s1 e2 ' ' e3=<Mag e2 ' ' s1 e3>;
' ' e1 = <Rps e1>;
};
Go {
'yes' e1 = <Go<Compare (<Mag e1 ' '>)('3b4cdca9b5748cba3b578d696c7186a0f068e72696387a1c0128b7a190232b1c')>>;
'=' = <PrintLn 'Wellcome!!!'>;
e1 = <PrintLn 'Bad key'>;
};
Chk {
()(e1)()()= 'no';
(e1)(e2)()()= <Chk (e1)(e2)(e1)()>;
(s1 e2)(e3 s1 e4)(e5)(e6)= <Chk (e2)(e3 s1 e4)(e5)(e6 s1)>;
(e1)(e2)(e3)(e4) = <Cmp (e3) (e4)>;
};
Cmp {
(e1)(e1) = 'yes' <Mag e1 ' '>e1;
(e1)(e2) = 'no';
};
Rps {
e1 '0' e2 = <Rps e1 'F' e2>;
e1 '1' e2 = <Rps e1 'E' e2>;
e1 '2' e2 = <Rps e1 'D' e2>;
e1 '3' e2 = <Rps e1 'C' e2>;
e1 '4' e2 = <Rps e1 'B' e2>;
e1 '5' e2 = <Rps e1 'A' e2>;
e1 'a' e2 = <Rps e1 'z' e2>;
e1 'b' e2 = <Rps e1 'y' e2>;
e1 'c' e2 = <Rps e1 'x' e2>;
e1 'd' e2 = <Rps e1 'w' e2>;
e1 'e' e2 = <Rps e1 'v' e2>;
e1 'f' e2 = <Rps e1 'u' e2>;
e1 = <Rps2 e1>;
};
Rps2 {
e1 'F' e2 = <Rps2 e1 'f' e2>;
e1 'E' e2 = <Rps2 e1 'e' e2>;
e1 'D' e2 = <Rps2 e1 'd' e2>;
e1 'C' e2 = <Rps2 e1 'c' e2>;
e1 'B' e2 = <Rps2 e1 'b' e2>;
e1 'A' e2 = <Rps2 e1 'a' e2>;
e1 'z' e2 = <Rps2 e1 '0' e2>;
e1 'y' e2 = <Rps2 e1 '1' e2>;
e1 'x' e2 = <Rps2 e1 '2' e2>;
e1 'w' e2 = <Rps2 e1 '3' e2>;
e1 'v' e2 = <Rps2 e1 '4' e2>;
e1 'u' e2 = <Rps2 e1 '5' e2>;
e1 = e1;
};
Код:
<?php
$a=array('0','1','2','3','4','5','a','b','c','d','e','f');
$b=array('F','E','D','C','B','A','z','y','x','w','v','u');
$c=array('f','e','d','c','b','a','0','1','2','3','4','5');
$result = '3b4cdca9b5748cba3b578d696c7186a0f068e72696387a1c0128b7a190232b1c';
$result = str_replace($c, $b, $result);
$result = str_replace($b, $a, $result);
$result = strrev($result);
?>
Получаем строки:
Код:
Исходная
3b4cdca9b5748cba3b578d696c7186a0f068e72696387a1c0128b7a190232b1c
Результат
3b4cdca9b5748cba3b578d696c7186a0a568b73696287f4d5438e7f495323e4d
Убираем повторяющуюся часть, сдаем флаг.
USS Enterprice (100, crypto)
Код:
pySpIl. wmqDp oDl! nQSamn lIjngychoIl tDt nDn'Do
Гугление по названию выводит нас на United States Ship и Star Trek. Так как хинт "Veni, Vidi, Vici" явно указывает на шифр Цезаря, отбрасываем United States Ship и останавливаемся на Star Trek.
Необходимо было использовать шифр Цезаря в контексте Клингонского языка используя следующий алфавит:

Результат:
Код:
nuqneH. tlhIngan maH! joqwIj Heghlu'meH QaQ jajvam
Что в переводе с клингонского
Код:
Hello. We are Klingons! [joqwIj] Today is a good day to die
Тут я очень долго тупил, потому что слова joqwIj нигде не было. Судя по всему в задании была ошибка, потому что слово флаг на самом деле пишется joqwI'. Соответственно флагом является:
Код:
Today is a good day to die
Web 1 (100, web)
Сайтик с формой авторизации и хинт "MongoDB is used database", который явно указывает на NoSQL Injection.
Пробуем варианты типа:
Код:
name=admin&pass[$ne]=1
name=admin')}//&pass=
Никаких ошибок не выводится и можно решить что идея неправильная, но после перебора скобочек сработал вариант:
Код:
name=admin'})}//&pass=123
Hidden 2 (200, hidden)
Задание "Get flag!" и хинт "Do you read task description and it (http://tools.ietf.org/html/rfc2616)?"
Не знаю, как нужно это было решать без подсказки, но для получения флага необходимо было послать запрос
Код:
OPTIONS /flag HTTP/1.1
Hockey (200, stegano)
Дана gif картинка.
Находим оригинал и замечаем точки на некоторых кадрах.
Качаем ImageMagick, раскладываем гифки по кадрам и обрабатываем 200 картинок следующим образом.
Код:
FOR /L %%i IN (1,1,100) DO
compare -fuzz 10%% -compose src stego_%%i.gif stego___%%i.gif diff_%%i.gif
Получаем сто картинок следующего вида
Склеиваем, получаем сообщение в виде азбуки Морзе, декодируем, колдуем над результатами, так как не все точки правильно было определены и переписаны с картинок, и в итоге получаем флаг:
Look Carefully (300, stegano)
Дан mp3 файл с шумом. Открываем спектрограмму, замечаем небольшие вставки в шум:
Долго и упорно выдираем и склеиваем их, получаем следующее:
Немного колдуем в photoshop
Результат:
Код:
Congrats! Your flag is 1c4nh1d3qrc0d354nywh3r3