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

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

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

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Writeup BOF: Регулировщик громкости (writeup)

Привет.
Погнали дальше.

Скачиваем, unzip, IDA, main.
IDA.png

Тут видим, что у нас есть одна уязвимая функция принимающая в массив 4. Так же видим что есть условие по которому мы должны попасть в ветку где можем получить флаг. Так же видим, что можем увеличивать громкость только 2 раза, если у нас не премиум.

Смотрим как у нас лежат переменные в памяти
IDA-memory_clear.png

Ага, ну погнали переполнять и искать нагрузку.

Введя как нагрузку 11111111111111 - получаем вот такое вот в памяти
IDA-memory_bad.png

Можно посмотреть в псевдокоде что у нас хранится в переменных. Мы переписали переменную v8, попали в премиум ветку, но флаг не распечатался.

Идем смотреть что у нас происходит во время печати
IDA-print.png

Не обращайте внимания на названия переменных на данном скрине - в псевдокоде можно переименовывать переменные по правому клику мыши, чтобы код был читабельнее и понятнее.
Тут видно, что в функции печати принимаются 2 аргумента, которые используются для печати флага, который был скопирован в массив длиной 28 байт. Но почему не распечатал?

Для понимания что же у нас перетерлось можно смотреть на память после применения нашей нагрузки (см. скрин с памятью), либо в отладке в IDA наводить на переменную мышью и будет хинт в которой будет значение которое туда записалось.
IDA-memory_v7.png

Штош, получилось что мы переписали эти параметры для печати, фигово. Значит надо переписать память таким образом, чтобы и v8 переписать и v7 и v6 переписать правильно, так как они даже в коде выставляются не верно. Так как размер массива флага 28 и если мы хотим, получить полный флаг, то нам надо переписать переменные, которые передаются в функцию печати так, чтобы они были равны 0 и 28. Ничего из ASCII table нам тут тоже не поможет. Так как pwn, то используем pwn.

Вы не однократно видели, что у меня в exploit.py есть ветки с EDB и GDB (я еще доустанавливал pwndbg), но там я пока не разобрался, но придумал маленький костыль. В exploit.py я поставил запрос ответа пользователя, что бы успеть подключиться в IDA к запущенному процессу, что бы можно было посмотреть что в память легло. Спустя n-ое время и огромное количество проб получил таки нагрузку.

IDA-memory_payload.png


sploit.png


PWNED

PS
Разрыл дома старую библиотеку и нашел пару интересных книг аж от 2004 года:
1. Использование языка Ассемблера (Финогенов)
2. С++ глазами хакера (Фленов)
Будет чем заниматься и что читать в отпуске.

PPS
Всем хороших выходных!
 

Вложения

  • IDA-memory.png
    IDA-memory.png
    171,1 КБ · Просмотры: 139
Мы в соцсетях:

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

Курс AD