Это не ФАК конечно, а так....Постольку-поскольку меня уже спрашивали, что за хрень - сплоит, опишу как я ее тут.
Для тех кто в танке: эксплоит - небольшая программа, написанная на одном из языков программирования (чаще С/С++), которая использует какую-либо уязвимость, предоставляет шелл-доступ, DoS'ит (denial of service) сервак. Сплоиты бывают либо локальные и удаленные.
Для начала посмотрим, как работают эти самые эксплоиты. К примеру возьмем фрагмент кода.
int proc(char*str){
char buf[100];
.....
strcopy(buf,str);
.....
return 0;
}
В данном случае программа резервирует в сетке область памяти объемом в 100 байт для переменной buf, копирует туда содержимое переменной str и выполняет какие-либо действия. Вроде ничего необычного. НО! Если в переменной str будет находиться строка длиной более 100 символов, strcopy запишет в buf только первые 100 байт, а остальными потрет инфу в стеке. Такая атака называется "buffer overflow" ("переполнение буфера"). Однако дело еще в том, что в стеке храниться адрес возврата функции, который будет выполняться при завершении работы функции. И если strcopy() перезапишет его, то управление передасться по новому адресу. Хакер же пишет на асме код, предназначенный для конкретной оси, который запускает шелл. И если эксплоиту удасться (а ему это обычно удаеться) перезаписать адрес возврата так, что бы он указывал на хаксорский код, то хакер получит доступ к командной строке (cmd.exe or /bin/sh)
int format_bug(char *str)
{
int k = 9;
printf(str);
return 0;
}
В чем ошибка тут? Если не копать глубоко, подумается, что все ок Но если передать функции str значение типа "%х_%х_%х_%х_%х_%х_Hello!" то на экране появиться не то, что мы задали, а "9_fff6_2fc_ff92_7825_255f_Hello!". Дело в том, что printf() обрабатывает входящие данные, воспринимая некоторый символы как форматные спецификаторы. Таким образом можно вывести всю область стека. А там может быть много чего интересного Если хитро использовать "%n", то можно и переписывать стек. К чему это приведет, смотри чуть выше ...
Про компиляцию сплоитов я скажу только, что в *nix системах они компиляться строкой gcc expl.c -o expl (expl.c - исходник сплоита, expl - имя конечного файла), а в Windows программами типа lccwin32 или Visual C++ (ссылку на первую яуже давал).
Однако, что бы в сети не развелось немеренное количество скрипткиддисов, автроы эксплоитов нарочно допускают синтаксическии ошибки в своих творениях. То запятую не туда впихнут, то скобку откроют или закроют, там где все надо делать наоборот. Так что надо учить С++ для того, что бы эти ошибки править
На самом деле я здесь изложил не все, что можно сказать об эксплоитах. Я не упомянул binder'ы и fake-exploits, откуда собственно сплоиты скачивать. Если вам интересно, поищите, в интернете полно ресурсов с базой эксплоитов. отредактировано: 11-08-2004 10:34 - n00b_ki11er