Хакер - HTB Explore. Повышаем привилегии на Android через ADB

Хакер - HTB Explore. Повышаем привилегии на Android через ADB

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

  • Разведка. Сканирование портов
  • Точка входа. Поиск эксплоитов
  • Точка опоры. Модернизация эксплоита
  • Локальное повышение привилегий

В этой статье я покажу, как зах­ватить машину Explore, осно­ван­ную на Android. Поможет нам в этом уяз­вимость в фай­ловом менед­жере ES File Explorer, а так­же отла­доч­ный интерфейс ADB. Машина лег­кая, но Android встре­чает­ся на Hack The Box нечас­то, и это дела­ет задач­ку инте­рес­ной.

WARNING

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

РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.10.247 explore.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

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Ре­зуль­тат работы скрип­та

Ви­дим все­го два откры­тых пор­та: 2222 (служ­ба SSH) и пока неиз­вес­тный для нас 59777 (на пояс­нение Nmap мож­но не смот­реть, так как он прос­то вывел информа­цию из сво­ей базы). На SSH нам пока делать нечего, у нас нет никаких клю­чей, учет­ных дан­ных и вооб­ще какой‑либо информа­ции для сос­тавле­ния спис­ка паролей. Поэто­му отпра­вим­ся в Google и поищем све­дения про порт 59777.

Уз­наем, что откры­тый порт 59777 содер­жат вер­сии ES File Explorer 4.1.9.5.2 и более ран­ние. ES File Explorer — это пол­нофун­кци­ональ­ный менед­жер фай­лов для Android, и он годит­ся как для локаль­ного, так и для сетево­го исполь­зования.

ТОЧКА ВХОДА. ПОИСК ЭКСПЛОИТОВ

Мы узна­ли, какая исполь­зует­ся тех­нология, а это зна­чит, что мож­но поис­кать готовые экс­пло­иты.

Справка: поиск готовых эксплоитов

При пен­тесте луч­ше все­го искать экс­пло­иты при помощи Google, пос­коль­ку этот поис­ковик заг­лядыва­ет и в лич­ные бло­ги, и в самые раз­ные отче­ты. Уско­рят дело спе­циали­зиро­ван­ные базы вро­де Exploit-DB — там час­то мож­но обна­ружить под­ходящие вари­анты. Если ты работа­ешь в спе­циали­зиро­ван­ной ОС вро­де Kali Linux, то эта база у тебя уже есть и для поис­ка мож­но исполь­зовать ути­литу searchsploit.

В Exploit-DB находим го­товый код. Экс­плу­ати­руемая им уяз­вимость носит иден­тифика­тор CVE-2019-6447. Из ее опи­сания узна­ем детали: при­ложе­ние запус­кает на устрой­стве скры­тый HTTP-сер­вер, который поз­воля­ет получить дос­туп к дан­ным дру­гих поль­зовате­лей, под­клю­чен­ных к той же сети в момент запус­ка при­ложе­ния.

Ска­чива­ем и про­буем запус­тить экс­пло­ит. Нам сооб­щают, что в качес­тве обя­затель­ных парамет­ров нуж­но ука­зать коман­ду и адрес, так­же есть опция для ска­чива­ния фай­лов.

Тес­товый запуск экс­пло­ита

Ес­ли прос­мотреть код экс­пло­ита, мы смо­жем узнать о сле­дующих под­держи­ваемых коман­дах:

  • listFiles — получить спи­сок фай­лов в дирек­тории;
  • listPics — спи­сок изоб­ражений;
  • listVideos — спи­сок виде­офай­лов;
  • listAudios — спи­сок ауди­офай­лов;
  • listApps — спи­сок уста­нов­ленных при­ложе­ний;
  • listAppsSystem — спи­сок сис­темных при­ложе­ний;
  • listAppsPhone — спи­сок при­ложе­ний для свя­зи;
  • listAppsSdcard — спи­сок при­ложе­ний на кар­те SD;
  • listAppsAll — спи­сок всех при­ложе­ний;
  • getFile — заг­рузить файл с устрой­ства (для это­го, видимо, и нужен тре­тий параметр);
  • getDeviceInfo — получить информа­цию об устрой­стве.

Преж­де чем ковырять­ся в фай­ловой сис­теме, нуж­но узнать, с чем мы работа­ем. Давай получим информа­цию об устрой­стве:

python3 50070.py getDeviceInfo explore.htb

По­луче­ние информа­ции об устрой­стве

Ин­форма­ции нем­ного, но видим кор­невую дирек­торию ftpRoot — /sdcard.

ТОЧКА ОПОРЫ. МОДЕРНИЗАЦИЯ ЭКСПЛОИТА

По­лучить спи­сок фай­лов в задан­ной дирек­тории при помощи это­го экс­пло­ита не вый­дет, поэто­му мне приш­лось его нем­ного дорабо­тать. Для это­го нуж­но прос­то добавить к URL каталог, к которо­му мы обра­щаем­ся. Я реали­зовал это в треть­ем парамет­ре, ниже при­веден код, который сле­дует добавить в экс­пло­ит.

if cmd == cmds[0]:

if len(sys.argv) != 4:

print("[+] Include dir for get list.")

sys.exit(1)

else:

url += sys.argv[3]

Фраг­мент ори­гиналь­ного кода экс­пло­ита
Фраг­мент модер­низиро­ван­ного кода экс­пло­ита

А теперь в треть­ем парамет­ре переда­дим каталог, содер­жимое которо­го мы хотим получить.

python3 50070.py listFiles explore.htb /sdcard

Со­дер­жимое катало­га sdcard
Со­дер­жимое катало­га sdcard (про­дол­жение)

На­ходим файл user.txt, но забирать его пока рано, ведь мы не получи­ли управле­ние. Мож­но пос­мотреть катало­ги заг­рузок (Download) и докумен­тов (Documents), так­же мно­го инте­рес­ного можем най­ти и в кар­тинках. Но спер­ва обра­тим вни­мание на две дирек­тории, дата изме­нения которых отли­чает­ся от осталь­ных: dianxinos и DCIM. В пер­вой ничего инте­рес­ного, а вот в дирек­тории камеры есть инте­рес­ный файл creds.

python3 50070.py listFiles explore.htb /sdcard/DCIM

Со­дер­жимое катало­га DCIM

Эти же фотог­рафии мож­но было обна­ружить с помощью спе­циаль­ной под­держи­ваемой коман­ды listPics.

python3 50070.py listPics explore.htb

Все най­ден­ные изоб­ражения

Заг­рузим инте­ресу­ющее нас изоб­ражение коман­дой getFile.

python3 50070.py getFile explore.htb /sdcard/DCIM/creds.jpg

Заг­рузка фай­ла с устрой­ства

Прос­матри­ваем кар­тинку и находим логин и пароль.

Заг­ружен­ная фотог­рафия

Что харак­терно для такого рода задачек, эта учет­ка под­ходит к SSH. Таким обра­зом мы получа­ем флаг поль­зовате­ля.

Флаг поль­зовате­ля

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

Сом­нева­юсь, что скрип­ты для поис­ка путей повыше­ния при­виле­гий вро­де LinPEAS сра­бота­ют на Android, поэто­му я решил про­верять вруч­ную. Пер­вое, на что я обра­тил вни­мание, — это сис­тема, но никаких экс­пло­итов для Android этой вер­сии обна­ружить не уда­лось.

uname -a

Це­левая сис­тема

Sudo в дан­ной сис­теме отсутс­тву­ет, поэто­му на при­виле­гиро­ван­ные коман­ды без пароля мож­но не наде­ять­ся. А вот откры­тые для локаль­ного хос­та пор­ты пред­став­ляют такой же инте­рес, как и в слу­чае с Windows или Linux.

netstat -tulpan

Вы­вод netstat

На­ходим порт 5555 и сно­ва отправ­ляем­ся в Google, что­бы узнать, что за софт на нем может работать. По пер­вой же ссыл­ке опре­деля­ем исполь­зуемое ПО — это ADB.

По­иск информа­ции о пор­те 5555

ADB (Android Debug Bridge) — кли­ент‑сер­верное при­ложе­ние, которое пре­дос­тавля­ет дос­туп к работа­юще­му эму­лято­ру или устрой­ству. С его помощью мож­но копиро­вать фай­лы, уста­нав­ливать ском­пилиро­ван­ные прог­рам­мные пакеты и запус­кать кон­соль­ные коман­ды. Исполь­зуя кон­соль, мож­но даже изме­нять нас­трой­ки жур­нала и вза­имо­дей­ство­вать с базами дан­ных SQLite, которые хра­нят­ся на устрой­стве.

Для работы нам пот­ребу­ется одно­имен­ное при­ложе­ние ADB, уста­новить которое мож­но коман­дой sudo apt install adb пря­мо из репози­тори­ев Kali Linux. Так как порт открыт для локаль­ного хос­та, про­киды­ваем его через SSH:

ssh -p 2222 -L 5555:localhost:5555 kristi@10.10.10.247

Те­перь весь тра­фик, который мы пош­лем на локаль­ный порт 5555, будет тун­нелиро­ван на порт 5555 уда­лен­ного устрой­ства. Под­клю­чаем­ся.

adb connect 127.0.0.1:5555

Под­клю­чение к ADB

Со­еди­нение успешно уста­нов­лено, пос­мотрим иден­тифика­торы под­клю­чен­ных устрой­ств.

adb devices -l

Под­клю­чен­ные к ADB устрой­ства

Из пред­став­ленно­го спис­ка нас инте­ресу­ет устрой­ство с иден­тифика­тором 2. Получим коман­дную обо­лоч­ку, передав иден­тифика­тор в парамет­ре -t и ука­зав коман­ду shell.

adb -t 2 shell

Мы име­ем шелл и по коман­де su получа­ем при­виле­гиро­ван­ный кон­текст. Оста­ется толь­ко най­ти файл рута.

su

find / -name "root.txt" 2>/dev/null

cat /data/root.txt

Флаг рута

Файл най­ден, и мы получи­ли пол­ный кон­троль над машиной.

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

Report Page