Эксплоит в разрезеXakep, номер #047, стр. 047-084-1 Sphere Ultima Online Server в дауне TanaT (TanaT@yes.ru) Сегодня на твое рассмотрение вынесен достаточно простой и в то же время очень полезный эксплоит. Его паразитическую сущность можно описать так: с помощью простейшей DoS-атаки выводится из строя игровой сервер. По правде говоря, эксплоит разрабатывался для подавления Sphere Ultima Online Server, но может использоваться для "работы" и с другими сервантами. Во врезке ты можешь увидеть исходный код (на Си под Unix) этого эксплоита. Разобрать по косточкам Итак, наша задача разобрать этот код эксплоита по косточкам, чтобы ты понимал суть его действия. Программа состоит из двух основных блоков - это две функции: Connect() и main(). Первая служит для организации и подготовки сокетов, а вторая является главной, и именно с нее начинается выполнение программы. Если ты читал статью Horrific'а о программировании сокетов, то ты легко разберешься в этом cишном коде. Если же не читал, это упущение - вернись, найди и прочти! Начало программы Начнем мы рассмотрение исходника с основной функции: main(). Когда программа запускается, то ее выполнение начинается именно отсюда: int main(int argc, char *argv[]) Основная функция с входными аргументами: число аргументов и указатель на первый из них. После этой строчки идет объявление двух переменных: int fd; struct sockaddr_in box; fd - int переменная, в ней будет храниться дескриптор данного сокета. box - это сокетовая структура, суть которой состоит в том, чтобы дать программе данные о параметрах соединения с сетью. После этого идет проверка на количество переданных программе параметров: if (argc < 2) { fprintf(stderr, "usage: %s [sphere port]\n",argv[0]); retu; } Если число параметров вызова программы из консольной строки меньше двух, то выдается сообщение об ошибке и указывается правильный синтаксис запуска эксплоита. Дальнейшее выполнение программы бессмысленно, поэтому происходит выход из программы с помощью вызова retu. Инициализация Так как наш эксплоит предназначен для работы с сетью, то он обязан инициализировать сокет, что и делается в следующем коде: fd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (fd Выпуски журнала "Xakep"
|


















































































































