Категория > Новости > HTB Noter. Ломаем веб-приложение на Flask - «Новости»
HTB Noter. Ломаем веб-приложение на Flask - «Новости»15-09-2020, 00:01. Автор: Владислав |
Hack The Box. warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портовДобавляем IP-адрес машины в 10.10.11.160 noter.htb И запускаем сканирование портов. Читайте также - Официальный сайт Gizbo Сasino - это лицензионные игровые автоматы, слоты, ставки на спорт, а также выгодные предложения. Начинай играть в игровые автоматы на лучших официальных casino online с бонусом. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Нашлось три открытых порта:
Анонимный вход на 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 В результирующую таблицу добавим еще один столбец, куда будет попадать сообщение об ошибке. Перейти обратно к новости |