Содержание статьи
Наш подопытный — средняя по сложности машина 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
).
Видим много открытых портов:
- 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
На первом сайте находим форму авторизации.
Точка входа
SQL Injection
Так как мы точно знаем, что на хосте работает СУБД, стоит проверить некоторые методы для обхода авторизации. Перебирать будем по списку с помощью Burp Intruder.
Это ничего не дало, поэтому попробуем нагрузки для поиска SQL-инъекции. И срабатывает нагрузка ;
для MS SQL с временной задержкой, которую можно определить по столбцу Response time.
Мы подтвердили наличие уязвимости, а значит, можем использовать sqlmap для удобной эксплуатации. Сперва запустим ПО для подбора нагрузки и создания шаблона.
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch
Теперь мы можем приступить к получению данных. Первым делом нужно узнать названия существующих БД (параметр --dbs
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch --dbs
Тут нас интересуют две базы: streamio_backup
и STREAMIO
. Первую мы просмотреть не можем, поэтому получим таблицы второй (параметр --tables
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch -D STREAMIO --tables
Сразу становится ясно, что следующая цель — таблица users
. Чтобы не пытаться вытащить все данные, попробуем получить названия колонок (параметр --columns
).
sqlmap -u https://streamio.htb/login.php --data='username=admin&password=admin' -p username --batch -D STREAMIO -T users --columns
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
.
У нас очень много хешей, предположительно MD5. Чтобы найти прообраз, я пользуюсь онлайновым ресурсом crackstation.net.
В итоге мы получаем следующие пары логинов и паролей, с которыми можно попытаться авторизоваться на сайте.
Но, к сожалению, доступ мы так и не получаем. Может, на сайте есть админка? Чтобы найти ее, будем брутить каталоги.
ffuf -u 'https://streamio.htb/FUZZ' -t 256 -w directory_2.3_medium_lowercase.txt
Есть каталог admin
, где мы авторизуемся от имени пользователя yoshihide
.
Точка опоры
У нас есть несколько доступных страниц. Но важны не сами страницы, а то, как сервер узнает, какую загрузить, — по имени параметра.
С помощью Burp Intruder мы можем пробрутить название параметра, чтобы попробовать найти новые страницы.
В итоге определяем четыре страницы. Три из них нам уже известны, а вот debug
— что‑то новенькое.
Эта страница должна позволять читать файлы. Нас интересует код на PHP, а чтобы его получить, нужно использовать обертки на PHP. Давай закодируем страницу index.
в Base64.
?debug=php://filter/convert.base64-encode/resource=index.php
Для декодирования выделяем интересующий нас текст прямо в Burp и нажимаем Ctrl-Shift-B.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»