Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Адрес машины — 10.10.10.214, я всегда добавляю их в /
, чтобы обращаться по имени.
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.
. Отлично, мы определили, что там внутри! Осталось поискать в интернете уязвимости, которые уже нашли в этой программе.
Для популярных технологий есть хорошо документированные эксплоиты, к тому же не в одном варианте. В нашем случае достаточно запроса jackson
, и Google находит уязвимость, которая может предоставить удаленное выполнение кода (RCE). Также получаем ее идентификатор (2019-12384) в базе данных общеизвестных уязвимостей информационной безопасности (CVE).
Для уязвимостей с CVE на GitHub несложно найти эксплоит. Повторяем запрос и ищем готовый код. Первая же ссылка ведет нас к полному описанию процесса эксплуатации.
Закрепление
Выбранная нами уязвимость заключается в том, что злоумышленник может использовать десериализацию для удаленного выполнения кода. Дело в том, что внутри пакета рекурсивно вызываются все сеттеры с ключом, содержащимся внутри подобъекта, а именно setUrl(
. После этого этапа полный объект снова сериализуется в объект JSON. При этом все поля сериализуются напрямую, если геттер не определен, или через явный геттер. Когда вызывается getConnection(
, создается база данных. Но мы можем создать соединение с удаленной базой данных.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»