Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня мы разберемся с уязвимостью в парсере Jackson Databind, а затем займемся отслеживанием новых процессов в Linux, чтобы найти пути повысить привилегии. Поможет нам в этом машина Time с площадки Hack The Box. Ее уровень сложности заявлен как Medium.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Адрес машины — 10.10.10.214, я всегда добавляю их в /etc/hosts
, чтобы обращаться по имени.
10.10.10.214 time.htb
Сканируем порты при помощи Nmap. Команда ниже проведет его в два этапа — сначала общее, затем по найденным портам — со скриптами.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
Находим два открытых порта: 22 (служба SSH) и 80 (веб‑сервер Apache). На SSH нам пока что ловить нечего, поэтому сразу отправляемся «пробивать» веб.
И на первой же странице нас встречает поле ввода с подписью ONLINE JSON BEAUTIFIER & VALIDATOR, из чего делаем вывод, что сайт парсит и выводит текст в формате JSON.
Главная страница сайта http://time.htb
При поиске точки входа лучше тестировать все поля ввода на обработку «нежелательных» символов. Они могут выполнять роль служебных для той или иной технологии, и поэтому, если программист не позаботился о специальной обработке, они могут вызывать ошибки или другие сбои в приложении. Я провел небольшой тест — скормил одну и ту же строчку валидаторам разных типов. Ответ получился разным, а это значит, что обработка пользовательского ввода происходит по‑разному.
Реакция двух типов валидаторов на строку qwe
Во втором случае мы получаем полноценный текст ошибки:
Скорее, это связано с тем, что приложение еще не доведено до ума, поэтому и присутствует пометка Beta. Именно сюда нам и нужно давить. Так как перед нами парсер JSON, давай посмотрим, как он реагирует на служебные последовательности‑типы []
и {}
. В ответ на такие запросы мы тоже получим разные ошибки для разных последовательностей.
Реакция валидатора
Анализ ошибок полезен тем, что помогает определить используемую технологию. Это расширяет наше представление о том, как внутри устроено приложение. В первом и во втором случае исключение генерирует Java, а пакет называется com.fasterxml.jackson.databind.exc
. Отлично, мы определили, что там внутри! Осталось поискать в интернете уязвимости, которые уже нашли в этой программе.
Для популярных технологий есть хорошо документированные эксплоиты, к тому же не в одном варианте. В нашем случае достаточно запроса jackson databind vulnerability
, и Google находит уязвимость, которая может предоставить удаленное выполнение кода (RCE). Также получаем ее идентификатор (2019-12384) в базе данных общеизвестных уязвимостей информационной безопасности (CVE).
Поиск задокументированных уязвимостей в технологии Jackson Databind
Для уязвимостей с CVE на GitHub несложно найти эксплоит. Повторяем запрос и ищем готовый код. Первая же ссылка ведет нас к полному описанию процесса эксплуатации.
Поиск эксплоитов для CVE-2019-12384
Выбранная нами уязвимость заключается в том, что злоумышленник может использовать десериализацию для удаленного выполнения кода. Дело в том, что внутри пакета рекурсивно вызываются все сеттеры с ключом, содержащимся внутри подобъекта, а именно setUrl(String url)
. После этого этапа полный объект снова сериализуется в объект JSON. При этом все поля сериализуются напрямую, если геттер не определен, или через явный геттер. Когда вызывается getConnection()
, создается база данных. Но мы можем создать соединение с удаленной базой данных.
Источник: xakep.ru