Категория > Новости > HTB Response. Бьемся над самой сложной машиной с Hack The Box - «Новости»
HTB Response. Бьемся над самой сложной машиной с Hack The Box - «Новости»11-02-2023, 00:00. Автор: Нинель |
Hack The Box. Ее уровень сложности — Insane, и на сегодняшний день это самая сложная машина на HTB и первая в моей серии райтапов, которую мне не удалось пройти до конца. Однако даже получение двух пользовательских учеток оказалось захватывающим.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовДобавляем IP-адрес машины в
10.10.11.163 response.htb
И запускаем сканирование портов. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта: ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Мы нашли всего два открытых порта: 22 — служба OpenSSH 8.2p1 и 80 — веб‑сервер Nginx 1.21.6. С SSH ничего не сделать, поэтому сразу переходим к вебу. Главная страница сайта response.htb На сайте находим упоминание домена
10.10.11.163 response.htb www.response.htb
Чтобы расширить область тестирования, составим карту сайта с помощью Burp Discovery. Для этого в Burp History выбираем целевой адрес и в контекстном меню Engagement tools → Discover content. Карта сайта Так находим нестандартный файл Точка входаКопируем содержимое файла Содержимое файла main.js.php Так как обращение происходит к поддомену
10.10.11.163 response.htb www.response.htb proxy.response.htb
Затем копируем данные для обращения и повторяем запрос.
POST /fetch HTTP/1.1
Host: proxy.response.htb
Content-Type: application/json
Content-Length: 262
{"url":"http://api.response.htb/","url_digest":"cab532f75001ed2cc94ada92183d2160319a328e67001a9215956a5dbf10c545","method":"GET","session":"6c2a752c873e8c03fc927a81647402d0","session_digest":"6ce5cbd27651561e9005287bc5d8cf3201aa6c4fe885057ae80b40af0b8951bd"}
Запрос и ответ сервераОтвет от сервера закодирован в Base64, декодировать можно прямо в Burp Inspector. Burp Inspector Так как дальше данные представлены в формате JSON, можно красиво отобразить их при помощи утилиты jq. Полученные с сервера данные Просмотрим также страницы Обращение к странице /get_chat_statusОтвет сервераОбращение к странице /get_serversОтвет сервера Раскрываем еще один сервис —
10.10.11.163 response.htb www.response.htb proxy.response.htb chat.response.htb
Ответ сервераСайт оказался недоступен. Но можно обратиться к нему через сайт Запрос /status/main.js.php Тогда пробуем вместо идентификатора сессии отправить ссылку, чтобы получить подпись для нее. Получение подписи URL Как видишь, мы узнаем действительную подпись URL, отправленного вместо идентификатора сессии. Точка опорыТеперь проверим, придет ли нам ответ, если мы попробуем обратиться к чату. Первым делом сгенерируем для Получение значения url_digest С подписью можно выполнить запрос к прокси‑сайту. Получение содержимого страницы chat.response.htb Способ получения подписи оказался рабочим. Но как бы я ни пытался эксфильтровать данные, все равно пришел к тому, что нужно писать свой проксирующий веб‑сервер. Работать он будет так:
Так как работать будем с сайтом
127.0.0.1 chat.response.htb
Сначала напишем оснастку веб‑сервера без всяких функций. В классе сервера
from http.server import BaseHTTPRequestHandler, HTTPServer
from socketserver import ThreadingMixIn
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
def do_Multi(self, method):
uri = self.path
target_url = 'http://chat.response.htb' + uri
print(method + " " + target_url)
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
pass
ws = ThreadedHTTPServer(("0.0.0.0", 80), ProxyServer)
print("Server started...")
try:
ws.serve_forever()
except KeyboardInterrupt:
pass
ws.server_close()
print("Server stopped.")
Запускаем сервер и обращаемся к Логи сервера Перейти обратно к новости |