Сегодня мы разберемся с уязвимостью в парсере Jackson Databind, а затем займемся отслеживанием новых процессов в Linux, чтобы найти пути повысить привилегии. Поможет нам в этом машина Time с площадки Hack The Box. Ее уровень сложности заявлен как Medium.
Подключаться к машинам с 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.
При поиске точки входа лучше тестировать все поля ввода на обработку «нежелательных» символов. Они могут выполнять роль служебных для той или иной технологии, и поэтому, если программист не позаботился о специальной обработке, они могут вызывать ошибки или другие сбои в приложении. Я провел небольшой тест — скормил одну и ту же строчку валидаторам разных типов. Ответ получился разным, а это значит, что обработка пользовательского ввода происходит по‑разному.
Во втором случае мы получаем полноценный текст ошибки:
Validation failed: Unhandled Java exception: com.fasterxml.jackson.core. JsonParseException: Unrecognized token 'qwe': was expecting ('true', 'false' or 'null')
Скорее, это связано с тем, что приложение еще не доведено до ума, поэтому и присутствует пометка Beta. Именно сюда нам и нужно давить. Так как перед нами парсер JSON, давай посмотрим, как он реагирует на служебные последовательности‑типы []
и {}
. В ответ на такие запросы мы тоже получим разные ошибки для разных последовательностей.
Validation failed: Unhandled Java exception: com.fasterxml.jackson.databind.exc. MismatchedInputException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
Validation failed: Unhandled Java exception: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'qwe' as a subtype of [simple type, class java.lang.Object]: no such class found
Анализ ошибок полезен тем, что помогает определить используемую технологию. Это расширяет наше представление о том, как внутри устроено приложение. В первом и во втором случае исключение генерирует Java, а пакет называется com.fasterxml.jackson.databind.exc
. Отлично, мы определили, что там внутри! Осталось поискать в интернете уязвимости, которые уже нашли в этой программе.
Для популярных технологий есть хорошо документированные эксплоиты, к тому же не в одном варианте. В нашем случае достаточно запроса jackson databind vulnerability
, и Google находит уязвимость, которая может предоставить удаленное выполнение кода (RCE). Также получаем ее идентификатор (2019-12384) в базе данных общеизвестных уязвимостей информационной безопасности (CVE).
Для уязвимостей с CVE на GitHub несложно найти эксплоит. Повторяем запрос и ищем готовый код. Первая же ссылка ведет нас к полному описанию процесса эксплуатации.
Выбранная нами уязвимость заключается в том, что злоумышленник может использовать десериализацию для удаленного выполнения кода. Дело в том, что внутри пакета рекурсивно вызываются все сеттеры с ключом, содержащимся внутри подобъекта, а именно setUrl(String url)
. После этого этапа полный объект снова сериализуется в объект JSON. При этом все поля сериализуются напрямую, если геттер не определен, или через явный геттер. Когда вызывается getConnection()
, создается база данных. Но мы можем создать соединение с удаленной базой данных.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
1 год9300 р. |
1 месяц870 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости