HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 24.07.2023, 17:13
yetiraki
Новичок
Регистрация: 07.02.2023
Сообщений: 0
С нами: 1719376

Репутация: 0
По умолчанию

Привет.
Продолжаем.

Смотрим в IDA main.



Видим, что я уже переименовал переменную, которая принимает не безопасный ввод от пользователя. Так же я привел условия if-ов в читабельный вид. В данных условиях нас должна интересовать функция talk, что бы поговорить с осьминогом.



Тут тоже я уже переименовал для удобства. Что тут видно?
Для условий уязвимый ввод.
В условии 2 у нас увеличивается "репа" (репутация), это уже кое что.
В условии 4 если наша "репа" равна 10000, то приложуха печатает флаг. Если пользоваться вариантом 2 для получении такой репы - можно поседеть.
А вот условие 3 в первом приближении говорит, что все ок - ввод тут контролируемый (на скрине не видно, но там массив 8, два других для \n и \0, если я правильно помню), проэксплуатировать не выйдет. Казалось бы нам надо долго и усердно мучаться вместе с осьминогом, что бы получить флаг, но нет.

Если присмотреться внимательно к массиву records



то увидим, что размер его 10, цикл который выводит из него данные тоже рассчитан на 10 элементов. Но то что вводит пользователь через безопасный fgets очень не безопасно ложиться за границы массива.

C:


Код:
records
[
records_index
]
=
atoi
(
buffer_4_atoi
)
;
puts
(
"The number is recorded!"
)
;
++
records_index
;
В самом начале функции у нас records_index = 0.
Мы 10 раз вводим значения в массив records, увеличивая records_index на 1 и не обнуляем его после достижения предела массива. Наш любимый C позволяет нам всякие безрассудства[S], которые приводят к безудержному веселью потом,[/S] и в данном случае позволяет нам положить за пределы массива любое число (т.к. там atoi). Что же у нас находится сразу за массивом? Пральна, "репа". Так как pwn, то используем pwn.



В двух словах по сплоиту. После перехода к разговору с осьминогом в цикле 10 раз передаем в массив число, я для удобства передавал счетчик цикла. После цикла поставил снова костыль для отладки в IDA. И далее передаю в 11 элемент массива, а на самом деле в "репу" число 10000, что бы дальше запросить флаг.

PWNED
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.