Всем привет.
Решил переключиться на pwn, попробовать, что это и как. Оказалось интересно.
Приступим. Скачиваем архив, unzip его и в IDA.
В иде смотрим функцию main, жмем F5 для генерации псевдокода.
Что мы видим а данном скриншоте, а то, что у нас есть флаг внутри (т.к. приложуха локальная, то и флаг в ней фейковый, но в реальной приложухе должен быть реальный флаг).
Далее мы видим что есть вывод текста с последующим запросом ответа от пользователя с помощью scanf (int32 в hex виде) и без ограничения и проверок количества полученных символов, что может привести к преполнению буфера или перетеранию переменных по стеку.
Далее видим, что есть вызов функции которая как-то проверяет введенные пользователем значения и если все успешно введено, то делается инкремент balls (наверное баллам). Внутри этой функции подсчитывается куб по полученном значению.
Что же дальше? Дальше мы видим, что бы получить флаг у нас должно быть 300 баллов, но цикл с расчетами у нас рассчитан всего на 100 баллов. Как же нам честным получить флаг? Азино какое-то =)
Штош, значит будем пробовать нечестным путём выиграть в нечестной игре. Смотрим как у нас лежат переменные.
Видим, что переменные идут друг за другом - значит можно их переписать (т.к. помним про scanf)
Значит надо подгадывать нагрузку.
Пробуем в отладке на каждой итерации увеличивать количество символов в нашем ответе и смотрим как меняется память. В итоге получаем нагрузку ААAAAAAAAA и в balls у нас попала ерунда
Но нам там ерунда не нужна, нам там надо 300 (не забываем про hex, 300 будет 012C)
Делаем нагрузку 012CAAAAAAAA и получаем в balls 300. Но каждый раз так в цикле делать - можно очень сильно устать, поэтому обратимся к автоматизации. PWN (библиотека?) для питона
Она позволяет делать многое, но пока делаем для локальной приложухи.
pwn template ./exam
Это сделает нам сплоит для того, что бы внутри мы уже внедряли свою нагрузку в автоматическом режиме.
Во время работы с локальной приложухой сплоит работал успешно, однако как только я подключился к удаленной - перестал, пришлось отлаживать и менять некоторые вещи и делать ветвление для локальной версии и для удаленной, на будущее, чтобы не забыть.
Запуск сплоита для локальной приложухи ./exploit.py LOCAL NOASLR
Для удаленной ./exploit.py REMOTE DEBUG
Выкладывание кода для копипасты сюда будет равносильно слитию флага, то я выложу только скриншот.
PWNED
PS
Спасибо участнику комьюнити ROP за указанное направление что почитать.
Решил переключиться на pwn, попробовать, что это и как. Оказалось интересно.
Приступим. Скачиваем архив, unzip его и в IDA.
В иде смотрим функцию main, жмем F5 для генерации псевдокода.
Что мы видим а данном скриншоте, а то, что у нас есть флаг внутри (т.к. приложуха локальная, то и флаг в ней фейковый, но в реальной приложухе должен быть реальный флаг).
Далее мы видим что есть вывод текста с последующим запросом ответа от пользователя с помощью scanf (int32 в hex виде) и без ограничения и проверок количества полученных символов, что может привести к преполнению буфера или перетеранию переменных по стеку.
Далее видим, что есть вызов функции которая как-то проверяет введенные пользователем значения и если все успешно введено, то делается инкремент balls (наверное баллам). Внутри этой функции подсчитывается куб по полученном значению.
Что же дальше? Дальше мы видим, что бы получить флаг у нас должно быть 300 баллов, но цикл с расчетами у нас рассчитан всего на 100 баллов. Как же нам честным получить флаг? Азино какое-то =)
Штош, значит будем пробовать нечестным путём выиграть в нечестной игре. Смотрим как у нас лежат переменные.
Видим, что переменные идут друг за другом - значит можно их переписать (т.к. помним про scanf)
Значит надо подгадывать нагрузку.
Пробуем в отладке на каждой итерации увеличивать количество символов в нашем ответе и смотрим как меняется память. В итоге получаем нагрузку ААAAAAAAAA и в balls у нас попала ерунда
Но нам там ерунда не нужна, нам там надо 300 (не забываем про hex, 300 будет 012C)
Делаем нагрузку 012CAAAAAAAA и получаем в balls 300. Но каждый раз так в цикле делать - можно очень сильно устать, поэтому обратимся к автоматизации. PWN (библиотека?) для питона
Она позволяет делать многое, но пока делаем для локальной приложухи.
pwn template ./exam
Это сделает нам сплоит для того, что бы внутри мы уже внедряли свою нагрузку в автоматическом режиме.
Во время работы с локальной приложухой сплоит работал успешно, однако как только я подключился к удаленной - перестал, пришлось отлаживать и менять некоторые вещи и делать ветвление для локальной версии и для удаленной, на будущее, чтобы не забыть.
Запуск сплоита для локальной приложухи ./exploit.py LOCAL NOASLR
Для удаленной ./exploit.py REMOTE DEBUG
Выкладывание кода для копипасты сюда будет равносильно слитию флага, то я выложу только скриншот.
PWNED
PS
Спасибо участнику комьюнити ROP за указанное направление что почитать.