Содержание статьи
01. Разведка. Сканирование портов
02. Точка входа
03. Точка опоры
03.1 XXE-инъекция
03.2 PHP wrappers
04. Локальное повышение привилегий
WARNING
htb
10.10.10.100 bountyhunter.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n'
nmap -p$ports -A $1
Находим два открытых порта: 22 (служба SSH) и 80 (веб-сервер Apache 2.4.41).
Начинаем с веб-сервера.
Справка: брутфорс учеток
Поскольку в начале прохождения у нас нет учетных данных, нет и смысла изучать
службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы
можем делать здесь, — это перебирать пароли брутфорсом, но у машин с HTB почти
всегда есть другое прохождение. В жизни таких вариантов может не быть, к тому же
есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Кнопка оказалась нерабочей, как и первые две ссылки, но зато ссылка Portal приводит
нас на страницу portal.php с текстом «Portal under development. Go here to test
the bounty tracker» и еще одной ссылкой. При переходе по ней нас встретит форма ввода
«Bounty Report System - Beta».
ТОЧКА ВХОДА
Отправив тестовые данные, мы получим сообщение, что если база данных готова, то
наши данные будут в нее добавлены.
Burp Inspector
ТОЧКА ОПОРЫ
XXE-инъекция
XML eXternal Entity (XXE) инъекция — это уязвимость в сервисах, которые
поддерживают протоколы SOAP и XML-RPC и принимают входные данные в виде XML-
документа. Стандарт XML поддерживает включение секции DTD, а секции эти, в свою
очередь, могут подключать к документу дополнительные компоненты, так называемые
внешние сущности.
А теперь давай перейдем к нашему примеру. Ниже представлен документ XML, который
отправляется на сервер.
Следующий шаг — поиск учетных данных. Раз мы можем читать произвольные файлы,
проверим исходники сайта. Начнем с известной нам страницы tracker_diRbPr00f314.
php. Но просто передать файл в сущность теперь не выйдет, так как при запросе
содержимого кода на PHP веб-сервер не отобразит, а выполнит его. Чтобы этого
не случалось, будем использовать обертку PHP.
PHP wrappers
PHP поставляется со множеством встроенных оберток для обращения к функциям
файловой системы, таким как fopen(), copy(), file_exists() и filesize(). В случаях,
подобных нашему, чаще всего используется обертка, реализующая схему php://,
которая предоставляет доступ к потокам ввода-вывода.
php
php://filter/read=convert.base64-encode/resource=tracker_diRbPr00f314.
Это приведет к тому, что на сайте будет отображен код требуемой страницы, но сразу
закодированный в Base64. Применим обертку в нашей XXE-нагрузке:
<?xml version="1.0" encoding="ISO-8859-1"?>
Ничего интересного в этом файле не находим, как и в коде остальных известных нам
страниц сайта. В таком случае просканируем файлы PHP в корневом каталоге сайта,
к примеру с помощью ffuf.
Справка: сканирование веба c fuff
Одно из первых действий при тестировании безопасности веб-приложения —
это сканирование методом перебора каталогов, чтобы найти скрытую информацию
и недоступные обычным посетителям функции. Для этого можно использовать
программы вроде dirsearch и DIRB.
Флаг пользователя
Справка: sudoers
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы
пользователей могут выполнять от имени администратора системы. Можно
просмотреть его как напрямую, так и при помощи команды sudo -l.
Настройки судоера
Начнем анализ с функции main. Первым делом у нас запросят путь к какому-то файлу
и передадут то, что мы ввели, в функцию load_file. В ней проверяется расширение
файла. Если это файл в формате Markdown (.md), то он открывается, а программа
продолжает работать.
Если все проверки пройдены, то, начиная с четвертой строки, в переменную ticketCode
будет считываться число между символами ** и +. При этом остаток от деления этого
числа на 7 должен быть равен 4. В этом случае вся строка без символов ** передается
в функцию eval.
Таким образом, мы можем поместить в итоговый файл код на Python после знака +,
и этот код будет выполнен. Можем переходить к выбору нагрузки.
Абсолютно все способы получения управления требуют подключить другие модули. Так
как мы не можем использовать последовательность команд через точку с запятой,
остается выполнять однострочники по следующему шаблону:
__import__('module').method('param')
Флаг рута
Оцени статью:
RalfHacker
t.me/RalfHackerChannel
{} [+]
0 КОММЕНТАРИЕВ