Категория > Новости > HTB Noter. Ломаем веб-приложение на Flask - «Новости»
HTB Noter. Ломаем веб-приложение на Flask - «Новости»15-09-2022, 00:01. Автор: Владислав |
Hack The Box.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовДобавляем IP-адрес машины в
10.10.11.160 noter.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 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Нашлось три открытых порта:
Анонимный вход на FTP закрыт, с SSH мы ничего не сделаем, поэтому идем смотреть веб. Главная страница сайта http://noter.htb:5000/ Точка входаНа сайте есть возможность регистрироваться и авторизоваться, чем мы обязательно должны воспользоваться. Главная страница зарегистрированного пользователя Я всю работу выполняю через Burp, поэтому в идентификаторе сессии пользователя сразу заметил токен JWT. Запрос на сервер в Burp Pro JWTJSON Web Token хранит необходимую информацию о текущем сеансе. В числе прочего в нем содержится HMAC — hash-based message authentication code, код авторизации на основе хеша. Его‑то нам и предстоит подделать. Для работы с JWT будем использовать утилиту Flask-Unsign.
sudo pip3 install Flask==2.1.0 flask_unsign
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoicmFsZiJ9.YvKLvw.fDwY2juxacH9LTQV7xx_RyGo8EM'
Получение информации о сеансеДля создания HMAC требуется секретный ключ. Если мы сумеем восстановить или взломать секретный ключ, то сможем вносить любые изменения в информацию о сеансе. С помощью Flask-Unsign можем попробовать пробрутить секрет.
flask-unsign --wordlistrockyou.txt --unsign --cookie 'eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoicmFsZiJ9.YvKLvw.fDwY2juxacH9LTQV7xx_RyGo8EM' --no-literal-eval
Получение секретного ключаМы получили секретный ключ, а значит, можем записать свои данные в сеанс, в данном случае сменить пользователя. Генерируем сессию, устанавливаем в браузере и обновляем страницу. Я попробовал пользователя
flask-unsign --sign --cookie "{'logged_in': True, 'username': 'admin'}" --secret 'secret123' --legacy
Генерирование нового токенаОшибка авторизацииСкорее всего, такого пользователя не существует, поэтому нужно найти способ определить реальных пользователей. Сайт работает на Flask, к тому же предназначен для хранения заметок, поэтому первым делом я стал искать SSTI (включение шаблонов на стороне сервера) и XSS. Начал с создания заметки. Создание заметки с нагрузкой Затем я определил все места, где происходит вывод этого текста, но, к моему сожалению, везде используется экранирование. Главная страница сайтаЗаметки пользователяСодержимое созданной заметки Тест нагрузкой для XSS также не увенчался успехом. Тогда я решил посмотреть на механизм авторизации, а именно на сообщения, которые сервер отдаст в разных ситуациях. Иногда в таких случаях помогает определять время, которое затрачивается на проверку правильных и неправильных учетных данных. Но так далеко идти оказалось не нужно: сообщения для существующего и несуществующего пользователя оказались разными. Ответ сервера для несуществующего аккаунтаОтвет сервера для существующего аккаунта Точка опорыВооружаемся Burp Intrueder и принимаемся за перебор. Перекидываем запрос в Burp (Ctrl-I, Ctrl-Shift-I) и отмечаем для перебора логин. Burp Intruder — вкладка Position Список имен пользователей берем из набора SecLists. Burp Intruder — вкладка Payloads Устанавливаем 256 потоков (можно и больше). Burp Intruder — вкладка Resource Pool В результирующую таблицу добавим еще один столбец, куда будет попадать сообщение об ошибке. Перейти обратно к новости |