![](https://habrastorage.org/getpro/habr/upload_files/6d0/e75/913/6d0e75913d818041cca760c7c3f0d2eb.png)
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей;
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем (ссылка).
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.204, который я добавляю в /etc/hosts.
10.10.10.207 compromised.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
![](https://habrastorage.org/getpro/habr/upload_files/2dc/f77/ab0/2dcf77ab0a30522e90435a52d017adcc.png)
Давайте посмотрим сайт.
![](https://habrastorage.org/getpro/habr/upload_files/9dc/a96/f23/9dca96f2387cd4bc58daac3ce1a8b9be.png)
Находим только CMS - LiteCart. Давайте просканируем директории, и я делаю это с помощью gobuster.
gobuster dir -t 128 -u http://compromised.htb/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x html,php
![](https://habrastorage.org/getpro/habr/upload_files/c53/d83/6e5/c53d836e552d0d38b08d050be0c4a346.png)
И находим интересную директорию backup, а в ней архив.
![](https://habrastorage.org/getpro/habr/upload_files/c7c/666/826/c7c66682646097f2a9006375f5558214.png)
Данный архив содержит исходные коды сайта.
![](https://habrastorage.org/getpro/habr/upload_files/462/d0b/b4b/462d0bb4b088ef89e15c391ff359c320.png)
Среди данных файлов мы и находим упоминание скрытого на сервере файла.
![](https://habrastorage.org/getpro/habr/upload_files/894/f91/52c/894f9152c99beccf6667a05ee8241fc7.png)
Файл содержит учетные данные админа.
![](https://habrastorage.org/getpro/habr/upload_files/616/1a3/2a6/6161a32a653e445558259ab30ca99a6e.png)
Авторизуемся.
![](https://habrastorage.org/getpro/habr/upload_files/4db/475/1d6/4db4751d64ac4ab017eab0b67f0ced55.png)
Entry Point
После изучения данной CMS, находим RCE эксплоит.
![](https://habrastorage.org/getpro/habr/upload_files/6bb/e7c/329/6bbe7c329e4dded996f1ce4d6cf2413e.png)
Но вот только он не отрабатывает как нужно.
![](https://habrastorage.org/getpro/habr/upload_files/e3e/4c9/730/e3e4c9730eea59f7f32c8fff92b90f15.png)
Посмотрим код эксплоита. Используется функция system, которая, возможно, блокируется.
![](https://habrastorage.org/getpro/habr/upload_files/247/d65/47a/247d6547aae43f27c535ce0cd6828838.png)
Давайте изменим нагрузку и вызовем phpinfo, чтобы посмотреть заблокированные функции.
![](https://habrastorage.org/getpro/habr/upload_files/3b2/693/014/3b269301409b6bd8c390245df55b5ecc.png)
![](https://habrastorage.org/getpro/habr/upload_files/547/727/862/54772786225a7c2231750b4c95a01f3e.png)
И видим большой список таких функций. Для обхода данных блокировок можем использовать этот код. Данный PHP код мы чуть изменим, чтобы сразу выполнять запрошенные команды.
![](https://habrastorage.org/getpro/habr/upload_files/2ad/07a/b72/2ad07ab72fa93539a8d7db81024c7de5.png)
И изменим код эксплоита так, чтобы считать и отправить новый PHP код.
![](https://habrastorage.org/getpro/habr/upload_files/90d/1ea/c9c/90d1eac9c1e4222dbe67693796e4bd14.png)
И данный код работает.
![](https://habrastorage.org/getpro/habr/upload_files/c44/efd/992/c44efd99246d60c905fd13f2a430b285.png)
Глянем на пользователей и заметим, что у mysql есть bash.
![](https://habrastorage.org/getpro/habr/upload_files/52e/0e8/552/52e0e8552d8b41b687adada8089212b2.png)
Давайте удобный шелл, для этого используем webwrap.
![](https://habrastorage.org/getpro/habr/upload_files/24a/760/51e/24a76051ea0bbdcd28067a17020b348b.png)
USER1
Так как у mysql есть командная оболочка, то мы можем использовать службу как обычного пользователя, а именно выполняя команды из mysql. Учетные данные для подключения к базе данных должны быть расположены в конфигах.
![](https://habrastorage.org/getpro/habr/upload_files/91b/927/efe/91b927efed7c6bd25d58ce71c63fa65f.png)
![](https://habrastorage.org/getpro/habr/upload_files/fad/c98/3d2/fadc983d21e11cce401cc6d660eb13d9.png)
Теперь, когда мы получили учетные данные, давайте проверим функции mysql.
![](https://habrastorage.org/getpro/habr/upload_files/38e/f07/3d4/38ef073d43719f6fa5d5836c873d4f0d.png)
И давайте сгенерируем SSH ключи и запишем публичный в домашнюю директорию службы с помощью execcmd.
mysql -u root --password=changethis -e "select execcmd('echo ssh-rsa AAAAB3NzaC1yc2EAAAADA/ ... 6GuPNZGryVNovs= ralf@ralf-PC > ~/.ssh/authorizedkeys');"
И заходим по SSH.
![](https://habrastorage.org/getpro/habr/upload_files/727/5f0/600/7275f0600454f209ba5e25e89dffe740.png)
USER2
И мы можем прочитать логи, где можно поискать пароли.
![](https://habrastorage.org/getpro/habr/upload_files/5ec/3f7/d0f/5ec3f7d0f4336c4e40ebebe8dc988da3.png)
Попробуем сменить пользователя с найденным паролем.
![](https://habrastorage.org/getpro/habr/upload_files/231/811/9e7/2318119e7b4386fedcbd1ec869d3dee4.png)
ROOT
После длительного изучения машины, была дана подсказка про название машины и использование бэкдоров. Давайте найдем последние измененные файлы.
find . -mtime -100 2>/dev/null
![](https://habrastorage.org/getpro/habr/upload_files/6e4/74a/8b5/6e474a8b5d9b2a8f518d03d6d35223ce.png)
И находим скрытую библиотеку pamunix.so, причем есть такая же, видимо легитимная. Скачиваем этот файл.
scp sysadmin@compromised.htb:/lib/x8664-linux-gnu/security/.pamunix.so ~/tmp/
И закидываем в дизасемблер (я использовал Cutter). Среди строк находим password.
![](https://habrastorage.org/getpro/habr/upload_files/769/8a4/349/7698a4349531de0a089849857f657ab9.png)
Посмотрим, где эта строка используется.
![](https://habrastorage.org/getpro/habr/upload_files/88b/156/9b6/88b1569b6b02dc5b71fadbb7bf8cab2d.png)
![](https://habrastorage.org/getpro/habr/upload_files/9f5/189/58f/9f518958f41f7611d5efdfdb30f6e170.png)
И видим сравнение пароля с шестнадцатеричными значениями, которые являются половинами строки.
![](https://habrastorage.org/getpro/habr/upload_files/ca0/dfa/e38/ca0dfae388611e65f2eb757408c08d4d.png)
Пробуем данную строку как пароль рута, и удачно авторизуемся.
![](https://habrastorage.org/getpro/habr/upload_files/89c/e0b/435/89ce0b4350fd147daf2862dc92426a00.png)