X-Puzzle

Иван Скляров

Xakep, номер #056, стр. 056-094-1


Sklyarov@real.xakep.ru

«ПРОЙДИСЬ ДЕБАГГЕРОМ ПО СВОИМ МОЗГАМ!»

Не стесняйся присылать мне свои ответы, даже если ты смог ответить всего на один пазл, я с интересом почитаю твои оригинальные решения. Ну, а имена героев, которые первыми правильно ответят на все вопросы, конечно же, будут опубликованы в журнале, чем прославятся на всю Россию (и не только) и навечно войдут в историю Х. Приз за нами не заржавеет ;).

Но помни: в большинстве случаев вариант ответа засчитывается как правильный, только если к нему приложено подробное и ВЕРНОЕ объяснение, почему выбран именно этот вариант, а не какой-либо другой.

ОТВЕТЫ К ПРЕДЫДУЩЕМУ ВЫПУСКУ X-PUZZLE

Ответы на пазл №1 «Разложи по полочкам»

1) Разъем RJ-45 может относиться только к физическому уровню, т.к. на этом уровне стандартизируются типы разъемов и назначение каждого контакта.

2) Свитч может охватывать физический, канальный и сетевой уровни.

3) MAC-адреса используются на канальном уровне.

4) В RFC792 описывается протокол ICMP - этот протокол принадлежит сетевому уровню.

5) В RFC2068 описывается протокол HTTP/1.1 — это протокол прикладного уровня.

6) Данные на канальном уровне называют «кадрами» (frames).

7) На сетевом уровне сообщения принято называть «пакетами» (packets).

8) Протокол SSL принадлежит к протоколам представительного уровня.

9) Протокол SPX принадлежит стеку Novell IPX/SPX и соответствует транспортному уровню OSI.

10) Протокол NetBIOS охватывает транспортный и сетевой уровни.

Ответы на пазл №2 «CryptFuck v3.1»

Слово «Ash» программа зашифрует следующим образом — «sEX». Алгоритм программы представляет собой обычный XOR с постоянным ключом «2600». Функция, реализующая данный алгоритм:

void crypt(char *str)

{

char *key="2600";

int i=0;

for (; *str != '\0'; str++) {

if (i>3) i=0;

printf ("%c", *str^=key[i++]);}

}

Ответы на пазл №3 «CGI+баги»

В первой баге достаточно включить проверку на null-байт ‘\0’, например, так:

$filename =~ s/\0//g.

Во второй баге строка «#$test=1;» закомментирована, поэтому никакие проверки в коде действовать вообще не будут. Т.к. ничего удалять нельзя, то достаточно перенести «$test=1;» на строку ниже, оставив символ комментария один на строке. Но этого мало, потому что далее не фильтруются потенциально опасные символы, а именно ‘\0’ и ‘/’, поэтому нужно добавить их в строку фильтрации:

$file =~ s/([\0\/.;\&<>\|\\\`'"?~^\{\}\[\]\(\)*\n\r])//g;

Третья бага связана с тем, что отсутствует какая-либо фильтрация опасных символов в переменной $to. В данном случае можно поступить следующим образом. В строке open перенести последнюю часть, а именно «$to");» ниже на строку и закомментировать (этот геморрой связан с тем, что ничего нельзя удалять), а вместо этого добавить «-t”);». Ключ –t, указывает sendmail искать адрес получателя в теле письма. Поэтому в теле мы должны добавить строку:

print MAIL “To: $to\n”;

В четвертой баге перепутаны местами операторы, идущие после if и else, т.е. достаточно исправить строку с проверкой условия так:

if (!($file =~ /^[\w\.]+$/))

Ответы на пазл №4 «Брутфорс и ламеры»

Содержание  Вперед на стр. 056-094-2