![]() |
Привет.
Погнали дальше. Скачиваем, 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 |