Введение в разработку эксплоитов. Часть 1

Дата публикации 20 фев 2017 | Редактировалось 15 апр 2017
Часть 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

18 9.551
yashechka

yashechka
Ростовский фанат Нарвахи

Регистрация:
2 янв 2012
Публикаций:
90

Комментарии


      1. yashechka 23 фев 2017
      2. yashechka 22 фев 2017
        Класс. Это чьё? Я себе сайт забодяжил :lol:
        Буду туда ПДФ сливать статей, для тех кто печатать хочет))
        http://yasha.su/
      3. _edge 22 фев 2017
      4. yashechka 22 фев 2017
        >yashechka, вспомни правила про "тся" и "ться", пожалуйста, и не делай глупых грамматических ошибок.
        Я его знаю, оно очень простое, это просто у меня от мозговой усталости))
      5. yashechka 22 фев 2017
        Да. Я согласен, туториалы Корелана хороши, но они уже были переведены, а хотелось кое-чего новенького, поэтому решил взять эти туториалы. Они конечно не настолько хороши, но всё же)) Книга очень хороша, у меня есть в бумаге, а вот вторую часть я всё никак не заставлю себя прочитать.
      6. yashechka 21 фев 2017
        >что это? неужели нельзя было написать по-русски:
        Ничего сам не дописывал, хотел показать как это перевести с англ. на русский
        >мое мнение - подобные темы стоит писать и переводить, только если разбираетесь сами в этой теме, и достаточно хорошо.
        Это точно))
        >Вам самим это нравится?
        Мне нравиться)
        >И я не говорю о том, что закончили статью, толком еще даже не сказав ничего. Не говоря о переводе в стиле "гугл транслейт"
        Как Вы поняли, на этом статья и заканчивается)
        >Так же нигде вы не описали хотя бы в двух словах почему такую вещь, как переполнение буфера, можно эксплуатировать.
        Это перевод, а не авторская статья, от себя ничего не добавлял.
        >>один из регистров ЦП должен содержать наш буфер
        >- это как? ))
        Х.з., так у автора)) я сам не вьехал, лиюо какие то новые плюшки появились
        >Разные люди по разному работают. Кто-то берет количеством, кто-то качеством, "рожая" 1-2 публикации за полгода. Правы и те, и те.
        Этого ответа я и ждал, Спасибо Вам За Добрые Слова
        >Вот, держите: http://www.fuzzysecurity.com/tutorials.html
        Вы не должны были искать, предполагалось, что никто про эти статьи ничего не знает.)) Это был секрет
        >Они переведены на R0crew и частично дублируют эти
        Exploit Writing Tutorial Part 1: Stack Based Overflows (Перевод: ===> p(eaz, RDot.org) ))
        >Посмотрим как Яша осилит перевести главы по хип-спреинг )))
        Если не будет получаться, я попрошу у Вас помощи.
      7. yashechka 21 фев 2017
        Вроде всё. Теперь отвечаю на вопросы.
      8. yashechka 21 фев 2017
        В редакторе и после сохранения разные шрифты получаются.
      9. psh3nka 21 фев 2017
      10. psh3nka 21 фев 2017
      11. TermoSINteZ 20 фев 2017
        Если это перевод - где ссылка на оригинал?
        И если вы переводите - будьте добры хотя бы немного изменять, в соответствии с тем, чтоб читать понял, что вы хотите этим сказать.
        > Обычно эти ошибки будут на Переполнение Буфера (место в памяти получает больше данных, чем планировалось)
        что это? неужели нельзя было написать по-русски:
        "Рассмотрим классический прием эксплуатации - переполнения буфера. Ошибка происходит в случаях когда принимающий буфер имеет размер меньший, чем данные, которые туда записываются. Иными словами, нет проверки размера и ограничения на запись"

        Так же нигде вы не описали хотя бы в двух словах почему такую вещь, как переполнение буфера, можно эксплуатировать. Не обижайтесь, но вообще выглядит как каша. Масло масляное. Переполнение буфера смешалось с переполнением стека. И в итоге рассматривается переполнение стека, но ни слова про фреймы стека и адреса возврата.

        И я не говорю о том, что закончили статью, толком еще даже не сказав ничего. Не говоря о переводе в стиле "гугл транслейт"

        Вам самим это нравится?

        мое мнение - подобные темы стоит писать и переводить, только если разбираетесь сами в этой теме, и достаточно хорошо.
      12. yashechka 20 фев 2017
        В редакторе везде один и тот же размер, сейчас подпись добавил, сохранил, шрифт больше чем в редакторе.
      13. yashechka 20 фев 2017
        Я не знаю, что и где глючит((. У меня текст набран в ЛибреОфисе Liberation Serif. Третий и второй абзац, только заголовок болдом. Тело без болда. Тут он(редактор) мне делает его весь жирным. Если я исправляю, то первый абзац становится весь жирным
      14. psh3nka 22 фев 2017
        Проблема еще усугубляется ASLR'ом... Часть вторая, если Вы ее переведете, будет неюзабельна на ОСях выше XP, либо придется искать модули, которые не используют ASLR и отталкиваться от них, но об этом вообще ничего не говорится в туториале, да и требует бОльших знаний, которые за 1 15минутный ман не приобретаются. ИМХО, конечно. Сам сейчас столкнулся с подобной проблемой, когда начал читать Shellcoder's handbook. Но она мне нужна для глубокого понимания базы и азов, дальше уже можно будет почитывать маны по обходу Stack Cookies, SafeSeh, SEHOP, HW DEP and ASLR
        _edge нравится это.
      15. SadKo 21 фев 2017
        yashechka, вспомни правила про "тся" и "ться", пожалуйста, и не делай глупых грамматических ошибок.
        yashechka нравится это.
      16. TermoSINteZ 21 фев 2017
        psh3nka , посмотрел ссылку. Удивительно. такая глупая статья там, и при этом куча положительных комментариев. X_X
        ну да ладно. видимо есть какая то целевая аудитория.

        Единственное что попросил бы переводчика - не переводить вот так в лоб. А делать "художественный" перевод. Иначе это читать невозможно. Вряд ли я найду в статьях что-то новое для себя, мы писали эксплоиты еще до того как появились все эти генераторы и метасплоит фреймворки и прочее.
        Посмотрим как Яша осилит перевести главы по хип-спреинг )))
        yashechka нравится это.
      17. _edge 21 фев 2017
        Разные люди по разному работают. Кто-то берет количеством, кто-то качеством, "рожая" 1-2 публикации за полгода. Правы и те, и те.

        Яше респект просто за то, что что-то делает, не без ошибок, но выдает что-то осязаемое. А ошибки и поправить можно, на то и Песочница.

        От себя тоже добавлю, про написание "ться" и "тся", вот такая я бяка

        tsya.ru
        yashechka нравится это.
      18. RET 21 фев 2017
        >один из регистров ЦП должен содержать наш буфер
        - это как? ))
        обычно идет подмена адреса возврата при возникновении сепшена, а это делается на стеке
        yashechka нравится это.