Существует тысячи типов шеллкодов. Каждый из них разработан в соответствии с целью, которую мы должны эксплуатировать.
Существую шеллкоды, которые используются для доказательства того, что вы можете запустить код после эксплуатации. Обычно они запускают калькулятор и ничего больше.
Очевидно, что существуют более сложные шеллкоды, которые открывают удаленные консоли, стараются остаться в системе не смотря на то, что эксплуатируемая программа перестает работать или закрывается, инжектируют себя в некоторый другой процесс системы, сохраняет себя как файл и т.д.
Существует библиотека шеллкодов, которую мы можем найти в GOOGLE или запрограммировать, если нам нужно что-то особенное.
С этого момента мы будем использовать УНИВЕРСАЛЬНЫЙШЕЛЛКОД, который работает для всех версией WINDOWS и запускает калькулятор. При этом мы продемонстрируем выполнение кода.
Эти байты запускают калькулятор везде где мы их вставляем. Хорошо, что у этих байтов нет нулей. Хотя могут быть программы, который отвергают какой-то конкретный символ отличный от нуля. Это будет зависеть от случая.
Мы уже знаем, как сделать ROP и у нас уже есть универсальный шеллкод. Основной смысл состоит в том, чтобы практиковаться с программой VLC, для которой мы уже сделали POC. Я был бы очень рад, если бы кто-то отправил мне полный файл и туториал, объясняющий то, что Вы сделали. Я бы добавил бы первого человека, который отправил бы мне хорошо объясняющий туториал в качестве приложения в одной из глав.
ROP может быть сделан вручную или с помощью MONA. Для нас нет никаких проблем. Вы должны найти модуль DLL без защиты ASLR и если таких больше чем один, MONA может использовать больше одной DLL в качестве аргумента, для объединения ROP объединяющей обе DLL.
Что касается же скрипта PYTHON, то я дам вам его схему. Как только вы создадите ROP, откройте файл POC.TY+
И ищите числа 41424344, которые перезаписывают АДРЕСВОЗВРАТА.
И здесь, в зависимости от размера ROP + ШЕЛЛКОДА, скажем, что в качестве примера, ROP и ШЕЛЛКОД имеет длину 150 байтов. Я заменяю область по чуть-чуть начиная со значения 41424344включительно. Предположим что это 160 байтов.
Я помечаю вниз, пока не получу отмеченную область требуемой длины.
Я заполняю выбранную область с помощью байта 90.
Хорошо, проверьте размер области, где находятся байты 90, которая больше чем размер ROP + ШЕЛЛКОД. Я записываю полученный размер. В моём случае он равен 160 байт.
Теперь у нас есть схема работы скрипта. Скрипт ещё не протестирован. Скрипт не работает. Мы не определили ROP или ШЕЛЛКОД. Вы можете использовать УНИВЕРСАЛЬНЫЙШЕЛЛКОД, который мы только что видели, если у вас нет проблем с каким-либо символом. Если это не так, вы должны найти другой шеллкод.
Основная идея состоит в том, что скрипт открывает файл заполненный байтами 90, заменяет их полезной нагрузкой того же размера, которая содержит начало ROP,ШЕЛЛКОД и дополнительные данные или заполнение. Затем скрипт сохраняет файл, чтобы проверить его работоспособность. Если файл заработает, то это будет считаться эксплоитом. А если нет заработает, нам нужно трассировать, чтобы увидеть почему так получилось.
Я был бы очень рад, если бы кто-то написал туториал и отправил мне рабочий эксплоит.Я бы увидел, что я зря не тратил время на написание туториалов.
Первый человек, который отправит мне туториал, будет добавлен в наш курс как победитель. Если людей будет больше одного, я загружу решению их в папку SOLUCIONES нашего курса, которую я создам для этого на своев Веб-Сервере, если это потребуется.
До следующей части 41. Практикуйте и находите решение.
Автор текста: Рикардо Нарваха - RicardoNarvaja (@ricnar456) Перевод на английский: IvinsonCLS (@IvinsonCLS) Перевод на русский с испанского+английского: Яша_Добрый_Хакер(Ростовский фанат Нарвахи). Перевод специально для форума системного и низкоуровневого программирования — WASM.IN 11.04.2018 Версия 1.0**