Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с 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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Мы нашли всего два открытых порта: 22 — служба OpenSSH 8.2p1 и 80 — веб‑сервер Nginx 1.21.6. С SSH ничего не сделать, поэтому сразу переходим к вебу.
На сайте находим упоминание домена www.
, поэтому обновляем запись в файле /
:
10.10.11.163 response.htb www.response.htb
Чтобы расширить область тестирования, составим карту сайта с помощью Burp Discovery. Для этого в Burp History выбираем целевой адрес и в контекстном меню Engagement tools → Discover content.
Так находим нестандартный файл /
.
Копируем содержимое файла /
на локальную машину и изучаем. Этот файл содержит данные для обращения к домену api.
через сайт на домене proxy.
.
Так как обращение происходит к поддомену proxy
, добавляем в /
только его.
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.
Так как дальше данные представлены в формате JSON, можно красиво отобразить их при помощи утилиты jq.
Просмотрим также страницы /
и /
.
Раскрываем еще один сервис — chat.
. Добавляем его в файл /
и просматриваем ответ сервера.
10.10.11.163 response.htb www.response.htb proxy.response.htb chat.response.htb
Ответ сервераСайт оказался недоступен. Но можно обратиться к нему через сайт proxy
. Правда, для этого нам нужно подтвердить параметр url
подписью в параметре url_digest
, который сами вычислить мы не можем. Но параметр session
, где передается идентификатор веб‑сессии, тоже подтверждается подписью session_digest
.
Тогда пробуем вместо идентификатора сессии отправить ссылку, чтобы получить подпись для нее.
Как видишь, мы узнаем действительную подпись URL, отправленного вместо идентификатора сессии.
Теперь проверим, придет ли нам ответ, если мы попробуем обратиться к чату. Первым делом сгенерируем для url
действительный url_digest
.
С подписью можно выполнить запрос к прокси‑сайту.
Способ получения подписи оказался рабочим. Но как бы я ни пытался эксфильтровать данные, все равно пришел к тому, что нужно писать свой проксирующий веб‑сервер. Работать он будет так:
Так как работать будем с сайтом http://
, сделаем запись в файл /
:
127.0.0.1 chat.response.htb
Сначала напишем оснастку веб‑сервера без всяких функций. В классе сервера ProxyServer
реализуем обработчики do_GET
и do_POST
, которые будут вызывать единый метод do_Multi
. Сперва просто будем выводить URL, к которому обратится браузер.
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.")
Запускаем сервер и обращаемся к http://
.
|
|