В данной статье вспомним синтаксис ARM ассемблера, разберемся с уязвимостью shellshock, а также решим 8-е и 10-е задания с сайта pwnable.kr.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Решение задания leg
Нажимаем на первую иконку с подписью leg, и нам говорят, что нужно подключиться по SSH с паролем guest. Так же предоставляют исходный код на C и ассемблере.
Давайте скачаем оба файла и посмортим исходный код на языке C. По ассемблерным вставкам можно сказать, что использует синтаксис ARM. Про ARM ассемблер на Хабре писали тут и тут.
В функции main() от пользователя принимается число и сравнивается с суммой результатов трех функций key(). Разберем их по порядку.
Таким образом в регистр R3 помещается значение из регистра PC. В ARM ассемблере регистр PC содержит адрес следующей инструкции, которая должна быть выполнена. Смотрим дизассемблированный код.
Таким образом, функция key1() вернет значение 0x8ce4. Разберем функцию key2().
В R3 помещается 0x8d08, которое потом увеличивается на 4 и записывается в регистр R0. То есть key2() вернет 0x8d0c. Рассмотрим key3().
По аналогии с первой функцией делаем вывод, что key3() вернет значение из регистра LR. LR содержит адрес возврата функции. Посмотрим, где вызывается функция и возьмем следующий адрес.
Функция key3() вернет 0x8d80. Подключимся по SSH и введем в программу сумму трех найденных чисел.
Сдаем флаг и получаем два очка.
Shellshock aka Bashdoor
Shellshock (Bashdoor) — программная уязвимость, обнаруженная в программе GNU Bash, которая позволяет исполнять произвольные команды при получении некоторых нестандартных значений переменных окружения. Уязвимость получила номер CVE-2014-6271.
В Unix-подобных операционных системах каждая программа имеет переменными среды. Дочерний процесс наследует у родительского список переменных среды. Кроме переменных среды, bash также поддерживает внутренний список функций — именованных скриптов, которые могут вызываться из исполняемого скрипта. При запуске скриптов из других (родительских) скриптов возможен экспорт значений существующих переменных окружения и определений функций. Определения функций экспортируются путём кодирования их в виде новых переменных окружения специального формата, начинающегося с пустых скобок «()», за которыми следует определение функции в виде строки. Новые экземпляры bash при своем запуске сканируют все переменные среды, детектируя данный формат и преобразовывая его обратно в определение внутренней функции. Таким образом, если злоумышленник имеет возможность подать произвольную переменную среды в запуск bash, то появляется возможность исполнения произвольных команд.
Следующий пример напечатает текст VULN.
env x=’() { : ; }; echo “VULN”’ bash -c “echo text”
Так как при выполнении команды “echo text” будет загружено определение функции, содержащееся в переменной окружения x, а с ним выполнена команда ‘echo “VULN”’.
Решение задания shellshock
Нажимаем на первую иконку с подписью shellshock, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении мы видим соответствующий баннер.
Давайте узнаем, какие файлы есть на сервере, а также какие мы имеем права.
Давай просмотрим исход код.
Интерес вызывает строка с вызовом функции system. Исходя из названия, предполагаем, что bash, который находится рядом с программой и вызывается из программы, уязвим. По аналогии с описанной в статье атакой, выполним команду чтения флага.
/bin/cat flag
Для этого определим функцию в переменной окружения, куда поместим эту команду. А потом запустим программу.
export x="() { :; }; /bin/cat flag;"
Сдаем флаг и получаем еще одно очко. До встречи в следующей статье.
Мы в телеграм канале: канал в Telegram.