Содержание статьи
Наш подопытный — средняя по сложности машина StreamIO на основе Windows с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Начинаем, как обычно, со сканирования портов машины.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
![](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27845/02.png)
![Результат работы скрипта Результат работы скрипта](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27844/03.png)
Видим много открытых портов:
- 53 — DNS;
- 80 (HTTP) — веб‑сервер Microsoft IIS/10.0;
- 88 — Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — LDAP;
- 443 (HTTPS) — веб‑сервер Microsoft IIS/10.0;
- 445 — SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 1433 — Microsoft SQL Server 2019;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 3389 — RDP;
- 5985 — WinRM;
- 9389 — веб‑службы AD DS.
Ни SMB, ни LDAP ничего путного не ответили, к MS SQL дефолтные учетные данные не подошли, поэтому нам остался только веб. Тем более SSL-сертификат для порта 443 раскрывает нам еще два доменных имени, которые мы заносим в файл /
.
10.10.11.158 streamio.htb DC.streamIO.htb watch.streamIO.htb
![Главная страница сайта streamio.htb Главная страница сайта streamio.htb](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27843/04.png)
![Главная страница сайта watch.stream.htb Главная страница сайта watch.stream.htb](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27841/05.png)
На первом сайте находим форму авторизации.
![Панель логина Панель логина](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27842/06.png)
Точка входа
SQL Injection
Так как мы точно знаем, что на хосте работает СУБД, стоит проверить некоторые методы для обхода авторизации. Перебирать будем по списку с помощью Burp Intruder.
![Burp Intruder — вкладка Payload Positions Burp Intruder — вкладка Payload Positions](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27839/07.png)
Это ничего не дало, поэтому попробуем нагрузки для поиска SQL-инъекции. И срабатывает нагрузка ;
для MS SQL с временной задержкой, которую можно определить по столбцу Response time.
![Результат перебора Результат перебора](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27840/08.png)
Мы подтвердили наличие уязвимости, а значит, можем использовать sqlmap для удобной эксплуатации. Сперва запустим ПО для подбора нагрузки и создания шаблона.
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch
![Информация об уязвимости Информация об уязвимости](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27838/09.png)
Теперь мы можем приступить к получению данных. Первым делом нужно узнать названия существующих БД (параметр --dbs
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch --dbs
![Базы данных Базы данных](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27837/10.png)
Тут нас интересуют две базы: streamio_backup
и STREAMIO
. Первую мы просмотреть не можем, поэтому получим таблицы второй (параметр --tables
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch -D STREAMIO --tables
![Таблицы из базы STREAMIO Таблицы из базы STREAMIO](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27836/11.png)
Сразу становится ясно, что следующая цель — таблица users
. Чтобы не пытаться вытащить все данные, попробуем получить названия колонок (параметр --columns
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch -D STREAMIO -T users --columns
![Колонки в таблице users Колонки в таблице users](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27835/12.png)
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch -D STREAMIO -T users -C username,password --dump
Теперь получим данные (параметр --dump
) только из колонок username
и password
.
![Данные из базы users Данные из базы users](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27834/13.png)
У нас очень много хешей, предположительно MD5. Чтобы найти прообраз, я пользуюсь онлайновым ресурсом crackstation.net.
![Взломанные хеши Взломанные хеши](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27833/14.png)
В итоге мы получаем следующие пары логинов и паролей, с которыми можно попытаться авторизоваться на сайте.
![Полученные учетные данные Полученные учетные данные](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27832/15.png)
Но, к сожалению, доступ мы так и не получаем. Может, на сайте есть админка? Чтобы найти ее, будем брутить каталоги.
ffuf -u 'https://streamio.htb/FUZZ' -t 256 -w directory_2.3_medium_lowercase.txt
![Результат перебора каталогов Результат перебора каталогов](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27831/16.png)
Есть каталог admin
, где мы авторизуемся от имени пользователя yoshihide
.
![Панель администратора Панель администратора](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27830/17.png)
Точка опоры
У нас есть несколько доступных страниц. Но важны не сами страницы, а то, как сервер узнает, какую загрузить, — по имени параметра.
![Страница User Страница User](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27829/18.png)
С помощью Burp Intruder мы можем пробрутить название параметра, чтобы попробовать найти новые страницы.
![Burp Intruder — вкладка Payload Positions Burp Intruder — вкладка Payload Positions](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27828/19.png)
![Результат сканирования Результат сканирования](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27827/20.png)
В итоге определяем четыре страницы. Три из них нам уже известны, а вот debug
— что‑то новенькое.
![Содержимое страницы debug Содержимое страницы debug](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27826/21.png)
Эта страница должна позволять читать файлы. Нас интересует код на PHP, а чтобы его получить, нужно использовать обертки на PHP. Давай закодируем страницу index.
в Base64.
?debug=php://filter/convert.base64-encode/resource=index.php
![Получение страницы index.php Получение страницы index.php](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27825/22.png)
Для декодирования выделяем интересующий нас текст прямо в Burp и нажимаем Ctrl-Shift-B.
![Исходный код страницы Исходный код страницы](https://static.xakep.ru/images/790d45bf979e7de4f351bac693f296fb/27824/23.png)
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»