Часть 1: Введение в разработку эксплоитов
Это первая часть в (скромной) многотомной серии туториалов, посвященной разработке эксплоитов. Эта часть просто расскажет некоторые базовые вещи, такие, которые нам нужны, чтобы сделать нашу работу, основные идеи скрытые за разработкой эксплоитов и некоторые вещи, которые нужно держать в памяти, если мы хотим заслать и выполнить наш шеллкод. Эти туториалы не будут рассказывать как находить ошибки, вместо этого, каждая часть будет включать уязвимую программу, для которой нужна определенная техника, чтобы успешно эксплуатировать ошибку в ПО. Через определенное время, я намерен рассказать всё, от “Сохранения Адреса Возврата при Переполнении” до “ROP (Возвратно Ориентированное Программирование)”, конечно эти туториалы не напишут сами себя, поэтому это займёт немного времени, чтобы написать это всё. Стоит отметить, что эти туториалы будут затрагивать все мелкие детали и случаи; это достигается благодаря дизайну, который (1) позволяет мне сэкономить время и (2) позволяет прилежному читателю учиться участвуя в процессе разработки.
Я бы хотел выразить особую благодарность Offensive Security и Corelan`y, спасибо Вам, за то что дали мне эту удивительное и болезненное пристрастие!!
(1) Что нам понадобиться
Immunity Debugger - Download
Immunity Debugger похож на Ollydbg, но он имеет поддержку Python, который нужен нам, чтобы запускать плагины, которые помогут нам с разработкой эксплоита. Он бесплатен; когда перейдите по ссылке, просто заполните поля левыми данными и нажмите скачать.
Mona.py - Download
Mona - это офигенная примочка с кучей функций, которая позволяет нам проводить быстро и надёжно разработку эксплоита. Я не буду обсуждать все её опции здесь, мы дойдём до них вскоре во время следующих частей туториала. Загрузите её и положите её в каталог Immunity’s PyCommands.
Pvefindaddr.py - Download
Pvefindaddr - это предшественник Mona’ы . Я знаю, что он немного устарел, но остаётся всё ещё полезным, т.к. есть некоторые фишки, которые не были перенесены ещё в Mona’у. Загрузите её и положите в каталог Immunity’s PyCommands.
Metasploit Framework - Download
Мы будем использовать Metasploit Framework очень интенсивно. Больше всего мы будем генерировать шеллкоды для наших эксплоитов, но нам также нужна платформа, которая поможет получить любые соединения, чтобы можно было вернуться в программу после выполнения эксплоита. Я предлагаю Вам использовать Backtrack, т.к. у него есть всё, что нам нужно, но не стесняйтесь настроить metasploit в любом случае для себя.
Программное обеспечение для виртуализации
В основном здесь существует два варианта — VirtualBox, который бесплатен и Vmware, который не бесплатен. Если это возможно, я предложил бы использовать Vmware; умный человек, возможно, не должен платить за это ). Вместе с этим нам будут нужны несколько (32-битных) операционных систем, чтобы разрабатывать наши эксплоиты (Вы получите больше пользы из WindowsXP PRO SP3 и любой Windows7).
(2) Переполнения
В обучающих целях, я думаю важно подать вещи очень просто, а не сложно. В общем, когда мы пишем эксплоит, нам нужно найти переполнение в программе. Обычно эти ошибки будут на Переполнение Буфера (место в памяти получает больше данных, чем планировалось) или Переполнение Стэка (обычно Переполнение Буфера, которое записывает за концом стэка. Когда такое переполнение случается, есть две вещи, которые мы ищем; (1) наш буфер должен перезаписать EIP (Текущий указатель на инструкцию) и (2) один из регистров ЦП должен содержать наш буфер. Вы можете увидеть список регистров x86 ЦП ниже, с их отдельными функциями. Всё что мы должны помнить, это то, что любой из этих регистров может хранить наш буфер (и шеллкод).
EAX — Главный регистр используемый в арифметических вычислениях. Он также известен как аккумулятор, он хранит результаты арифметических операций и возвращает значение из функции.
EBX — Регистр базы. Указатель на данные в сегменте DS. Используется, чтобы хранить базовый адрес программы.
ECX — Регистр счетчик, часто используется, чтобы хранить значение, представляющее какое количество раз процесс должен быть повторен. Используется для цикла и строковых операций.
EDX — регистр общего назначения. Также используется, для операций в/в. Помогает расширить регистр EAX до 64 бит.
ESI — Индексный регистр источника. Указатель на данные в сегменте указанном регистром DS. Используется как смещение в строковых и массивных операциях. Он хранит адреса откуда читаются данные.
EDI — Индексный регистр назначения. Указатель на данные(или назначение) в сегменте указанном регистром ES. Используется как смещение в строковых и массивных операциях. Он хранит адреса куда пишутся данные.
EBP — Указатель на базу. Указатель на данные, которые хранятся в стэке (в сегменте SS). Он указывает на начало фрэйма стэка. Он используется, чтобы обращаться к локальным переменным.
ESP — Указатель на стэк (в сегменте SS). Он указывает на вершину стэка в текущем фрэйме. Он используется, чтобы обращаться к локальным переменным.
EIP — Указатель на инструкцию (хранит адрес следующей инструкции, которая должна быть выполнена)
(3) Как это работает?
В основном (1) мы заставляем программу хранить очень длинную строчку, (2) эта строка перезаписывает EIP и часть её храниться в регистре ЦП, (3) мы находим указатель, который указывает на регистр, который содержит наш буфер, (4) мы помещаем этот указатель в правильное место в нашем буфере, так, чтобы он перезаписал EIP, (5) когда программа достигает нашего указателя, она исполняет заданную нами инструкцию и прыгает на регистр, который содержит наш буфер и наконец (6), мы кладем наш шеллкод в часть буфера, который храниться в регистре ЦП . В сущности, мы угоняем поток выполнения программы и указываем ей на область памяти, которую мы контролируем. Если мы сможет это сделать, мы сможем исполнять на удаленной машине любые инструкции. Это немного упрощенно, но этого должно нам хватить, чтобы понять базовые идеи того как работают эксплоиты.
Перевод на русский Яша_Добрый_Хакер
Перевод специально для форума системного и низкоуровневого программирования - WASM.IN
20.02.2017
Введение в разработку эксплоитов. Часть 1
Дата публикации 20 фев 2017
| Редактировалось 15 апр 2017