Полноценное использование служебного Инета

Xakep, номер #039, стр. 039-056-7


227 Entering passive mode (213,180,190,56,222,116)

Из этой строки легко извлекаются IP-адресс и порт:

$ans=~/(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\)/;

$dhost="$1.$2.$3.$4";

$dport=$5*256+$6;

Т.е. в данном случае будет 213.180.190.56:56948. Коннектимся туда и сразу начинаем читать из сокета данные, не забывая сохранять их в файл. Тут, как я уже говорил, придется следить за тем, сколько инфы уже принято, чтобы вовремя разорвать соединение данных. (Хинт: функция sysread(FTPDATA, $buf, $n) пытается переместить в буфер $buf из сокета FTPDATA $n байтов и возвращает количество реально записанных байтов.)

Маскировка и шифровка данных

Для отвода глаз называй все файлы с умом. Например, если в данный момент изучается WinAPI, то файл, на который скрипт перенаправит бродилку, можно назвать, например, winapihelp.001. Также полезно добавлять в урлу вызываемого скрипта параметры, которые в самом скрипте использоваться не будут, но урл украсят, т.е. что-то вроде:

http://www.allforstudents.box.sk/cgi-bin/getfile.cgi?n=4&fname=winapihelp&vers=last&user=&requeststring=win+api&a=0 (имеет смысл только "n=4", все остальное - флуд)

и

http://www.allforstudents.box.sk/files/win/help/splited/winapihelp.001

Естественно выглядит, да? Я лично на месте админа поленился бы проверять подобные урлы.

Раздумывая над проблемой маскировки данных, я придумал как можно выдавать любые скачиваемые данные за архив: с помощью любого архиватора создаешь самораспаковывающийся архив, в который помещаешь небольшой файл (< 1kb) с кратким описание того, за что ты собираешься выдавать скачанные файлы, или с чем-нибудь еще. Он будет весить где-то 50кб. Далее, его следует залить на сервер, где лежит скрипт, а сам скрипт переделать так, чтобы он в начало каждого передаваемого куска ставил этот архив (расширение надо оставить exe). Тогда даже если кто-нибудь очень любопытный запустит такой файлик, он найдет только то, что ты запаковал, а тебе, зная точный размер экзешной добавки, не составит труда отделить нужные данные. Если же тебя припрут к стенке и спросят: что это такое, то стоит ответить, что, мол, качал архив, а он оказался битым. Кстати говоря, в качестве этого exe-шника не обязательно использовать self-ex архив, можно самостоятельно накодить что-нибудь подходящее.

Теперь, как и обещал, несколько слов о том, как изменять содержимое файла. Делать это, вообще говоря, не обязательно, но желательно, т.к. маскировка, описанная выше, просто делает файл незаметным (для админа) в общем потоке, и если она не сработает и то, что ты качаешь, начнут изучать, то шифровка передаваемых данных скорее всего спасет любимую мозоль от скорой админской расправы.

Первое и самое элементарное - это просто проксорить весь файл одним числом (т.е. произвести операцию xor над каждым элементом). Как известно, если этот алгоритм применить повторно к уже обработанным данным, то на выходе получим исходные. Кстати говоря, на перле это осуществить не так просто из-за того, что в нем нет типов и прочитанный байт интерпретируется как символ, а не как число. Но не мне учить тебя Perl-у, поэтому просто привожу код, который файл 1.dat ксорит числом 5 и результат сохраняет в 2.dat:

Назад на стр. 039-056-6  Содержание  Вперед на стр. 039-056-8