CTF BOF: Привет, Сквидвард! (writeup)

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

Смотрим в IDA main.
IDA-main.png

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

IDA-talk.png

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

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

то увидим, что размер его 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 позволяет нам всякие безрассудства, которые приводят к безудержному веселью потом, и в данном случае позволяет нам положить за пределы массива любое число (т.к. там atoi). Что же у нас находится сразу за массивом? Пральна, "репа". Так как pwn, то используем pwn.

sploit.png

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

PWNED
 

Вложения

  • IDA-main.png
    IDA-main.png
    98,3 КБ · Просмотры: 126
  • Нравится
Реакции: ROP, Edmon Dantes и GoBL1n

Kevgen

Green Team
04.08.2020
41
85
BIT
398
Спасибо за райтап! Кстати, задание можно и без pwntools, руками сделать
 
  • Нравится
Реакции: ROP
Мы в соцсетях:

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