Следующая новость
Предыдущая новость

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON

05.04.2021 22:32
HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON

Содержание статьи

  • Разведка
  • Точка входа
  • Закрепление
  • Повышение привилегий

Се­год­ня мы раз­берем­ся с уяз­вимостью в пар­сере 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.

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
Глав­ная стра­ница сай­та http://time.htb

При поис­ке точ­ки вхо­да луч­ше тес­тировать все поля вво­да на обра­бот­ку «нежела­тель­ных» сим­волов. Они могут выпол­нять роль слу­жеб­ных для той или иной тех­нологии, и поэто­му, если прог­раммист не позабо­тил­ся о спе­циаль­ной обра­бот­ке, они могут вызывать ошиб­ки или дру­гие сбои в при­ложе­нии. Я про­вел неболь­шой тест — скор­мил одну и ту же строч­ку валида­торам раз­ных типов. Ответ получил­ся раз­ным, а это зна­чит, что обра­бот­ка поль­зователь­ско­го вво­да про­исхо­дит по‑раз­ному.

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
Ре­акция двух типов валида­торов на стро­ку qwe

Во вто­ром слу­чае мы получа­ем пол­ноцен­ный текст ошиб­ки:

Validation failed: Unhandled Java exception: com.fasterxml.jackson.core. JsonParseException: Unrecognized token 'qwe': was expecting ('true', 'false' or 'null')

Ско­рее, это свя­зано с тем, что при­ложе­ние еще не доведе­но до ума, поэто­му и при­сутс­тву­ет помет­ка Beta. Имен­но сюда нам и нуж­но давить. Так как перед нами пар­сер JSON, давай пос­мотрим, как он реаги­рует на слу­жеб­ные пос­ледова­тель­нос­ти‑типы [] и {}. В ответ на такие зап­росы мы тоже получим раз­ные ошиб­ки для раз­ных пос­ледова­тель­нос­тей.

HTB Time. Захватываем машину с Linux через уязвимость в парсере 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

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON

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).

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
По­иск задоку­мен­тирован­ных уяз­вимос­тей в тех­нологии Jackson Databind

Для уяз­вимос­тей с CVE на GitHub нес­ложно най­ти экс­пло­ит. Пов­торя­ем зап­рос и ищем готовый код. Пер­вая же ссыл­ка ведет нас к пол­ному опи­санию про­цес­са экс­плу­ата­ции.

HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
По­иск экс­пло­итов для CVE-2019-12384

Закрепление

Выб­ранная нами уяз­вимость зак­люча­ется в том, что зло­умыш­ленник может исполь­зовать десери­али­зацию для уда­лен­ного выпол­нения кода. Дело в том, что внут­ри пакета рекур­сивно вызыва­ются все сет­теры с клю­чом, содер­жащим­ся внут­ри подобъ­екта, а имен­но setUrl(String url). Пос­ле это­го эта­па пол­ный объ­ект сно­ва сери­али­зует­ся в объ­ект JSON. При этом все поля сери­али­зуют­ся нап­рямую, если гет­тер не опре­делен, или через явный гет­тер. Ког­да вызыва­ется getConnection(), соз­дает­ся база дан­ных. Но мы можем соз­дать соеди­нение с уда­лен­ной базой дан­ных.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

1 год

9300 р.

1 месяц

870 р.

Я уже участник «Xakep.ru»

Источник

Последние новости