ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   BOF: Регулировщик громкости (writeup) (https://forum.antichat.xyz/showthread.php?t=1642130)

yetiraki 21.07.2023 23:13

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

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

https://forum.antichat.xyz/attachmen...e9376e778a.png

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

Смотрим как у нас лежат переменные в памяти

https://forum.antichat.xyz/attachmen...4f6122530d.png

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

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

https://forum.antichat.xyz/attachmen...8a23ddbe1d.png

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

Идем смотреть что у нас происходит во время печати

https://forum.antichat.xyz/attachmen...403152b6f0.png

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

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

https://forum.antichat.xyz/attachmen...9c8d32d95c.png

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

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

https://forum.antichat.xyz/attachmen...64084e89b2.png

https://forum.antichat.xyz/attachmen...1b785ba3a9.png

PWNED

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

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


Время: 17:08