• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

Writeup Экзамен?? (writeup)

Всем привет.

Решил переключиться на pwn, попробовать, что это и как. Оказалось интересно.
Приступим. Скачиваем архив, unzip его и в IDA.

В иде смотрим функцию main, жмем F5 для генерации псевдокода.

IDA.png


Что мы видим а данном скриншоте, а то, что у нас есть флаг внутри (т.к. приложуха локальная, то и флаг в ней фейковый, но в реальной приложухе должен быть реальный флаг).
Далее мы видим что есть вывод текста с последующим запросом ответа от пользователя с помощью scanf (int32 в hex виде) и без ограничения и проверок количества полученных символов, что может привести к преполнению буфера или перетеранию переменных по стеку.

Далее видим, что есть вызов функции которая как-то проверяет введенные пользователем значения и если все успешно введено, то делается инкремент balls (наверное баллам). Внутри этой функции подсчитывается куб по полученном значению.
IDA2.png


Что же дальше? Дальше мы видим, что бы получить флаг у нас должно быть 300 баллов, но цикл с расчетами у нас рассчитан всего на 100 баллов. Как же нам честным получить флаг? Азино какое-то =)

Штош, значит будем пробовать нечестным путём выиграть в нечестной игре. Смотрим как у нас лежат переменные.
IDA3.png


Видим, что переменные идут друг за другом - значит можно их переписать (т.к. помним про scanf)
Значит надо подгадывать нагрузку.

Пробуем в отладке на каждой итерации увеличивать количество символов в нашем ответе и смотрим как меняется память. В итоге получаем нагрузку ААAAAAAAAA и в balls у нас попала ерунда
IDA4.png

IDA5.png


Но нам там ерунда не нужна, нам там надо 300 (не забываем про hex, 300 будет 012C)
Делаем нагрузку 012CAAAAAAAA и получаем в balls 300. Но каждый раз так в цикле делать - можно очень сильно устать, поэтому обратимся к автоматизации. PWN (библиотека?) для питона
Она позволяет делать многое, но пока делаем для локальной приложухи.

pwn template ./exam
Это сделает нам сплоит для того, что бы внутри мы уже внедряли свою нагрузку в автоматическом режиме.
Во время работы с локальной приложухой сплоит работал успешно, однако как только я подключился к удаленной - перестал, пришлось отлаживать и менять некоторые вещи и делать ветвление для локальной версии и для удаленной, на будущее, чтобы не забыть.
Запуск сплоита для локальной приложухи ./exploit.py LOCAL NOASLR
Для удаленной ./exploit.py REMOTE DEBUG

Выкладывание кода для копипасты сюда будет равносильно слитию флага, то я выложу только скриншот.
sploit.png


PWNED

PS
Спасибо участнику комьюнити ROP за указанное направление что почитать.
 

Вложения

  • IDA.png
    IDA.png
    128,2 КБ · Просмотры: 231
Да, пример PWN! Теперь хоть одно задание смогу осилить 😂
 
  • Нравится
Реакции: yetiraki
Все супер, только непонятно:
1) почему 12C стоит в начале пэйлоада
2) почему 'A' 8 штук, хотя 0xB8 - 0xB4 = 4
 
Все супер, только непонятно:
1) почему 12C стоит в начале пэйлоада
2) почему 'A' 8 штук, хотя 0xB8 - 0xB4 = 4

Спасибо.
1) little-endian/big-endian. scanf("&lX"); %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
2) нам надо записать в саму переменную какое-то значение + переписать соседнюю переменную, обе они по 4 байта.
 
  • Нравится
Реакции: suzu
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD