Werkzeug / Flask Debug
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Отримайте перспективу хакера щодо ваших веб-додатків, мережі та хмари
Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Якщо налагодження активне, ви можете спробувати отримати доступ до /console
і отримати RCE.
В інтернеті також є кілька експлойтів, таких як цей або один у metasploit.
В деяких випадках /console
кінцева точка буде захищена PIN-кодом. Якщо у вас є вразливість до переходу по файлах, ви можете витягти всю необхідну інформацію для генерації цього PIN-коду.
Примусьте сторінку помилки налагодження в додатку, щоб побачити це:
Повідомлення щодо сценарію "консоль заблокована" з'являється при спробі доступу до інтерфейсу налагодження Werkzeug, що вказує на необхідність введення PIN-коду для розблокування консолі. Пропонується експлуатувати PIN-код консолі, аналізуючи алгоритм генерації PIN-коду у файлі ініціалізації налагодження Werkzeug (__init__.py
). Механізм генерації PIN-коду можна вивчити з репозиторію вихідного коду Werkzeug, хоча рекомендується отримати фактичний код сервера через вразливість обходу файлів через потенційні розбіжності версій.
Для експлуатації PIN-коду консолі потрібні два набори змінних: probably_public_bits
та private_bits
:
probably_public_bits
username
: Відноситься до користувача, який ініціював сесію Flask.
modname
: Зазвичай позначається як flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Зазвичай розв'язується в Flask.
getattr(mod, '__file__', None)
: Представляє повний шлях до app.py
у каталозі Flask (наприклад, /usr/local/lib/python3.5/dist-packages/flask/app.py
). Якщо app.py
не застосовується, спробуйте app.pyc
.
private_bits
uuid.getnode()
: Отримує MAC-адресу поточної машини, з str(uuid.getnode())
перетворюючи її в десятковий формат.
Щоб визначити MAC-адресу сервера, потрібно ідентифікувати активний мережевий інтерфейс, що використовується додатком (наприклад, ens3
). У випадках невизначеності, використовуйте /proc/net/arp
для знаходження ID пристрою, потім витягніть MAC-адресу з /sys/class/net/<device id>/address
.
Перетворення шістнадцяткової MAC-адреси в десяткову можна виконати, як показано нижче:
get_machine_id()
: Об'єднує дані з /etc/machine-id
або /proc/sys/kernel/random/boot_id
з першим рядком /proc/self/cgroup
після останнього слешу (/
).
Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)