[2025-07-07] Simple-SSTI

πŸ¦₯ λ³Έλ¬Έ

image.png image.png

#!/usr/bin/python3
from flask import Flask, request, render_template, render_template_string, make_response, redirect, url_for
import socket

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

app.secret_key = FLAG

@app.route('/')
def index():
    return render_template('index.html')

@app.errorhandler(404)
def Error404(e):
    template = '''
    <div class="center">
        <h1>Page Not Found.</h1>
        <h3>%s</h3>
    </div>
''' % (request.path)
    return render_template_string(template), 404

app.run(host='0.0.0.0', port=8000)

404κ°€ λ°œμƒν•˜λ©΄ ν•΄λ‹Ή <div>λ₯Ό 좜λ ₯ν•˜λŠ” νŽ˜μ΄μ§€μ΄λ‹€. μ²˜μŒμ—λŠ” {{FLAG}}λ₯Ό λ„£μœΌλ©΄ λ˜λŠ” κ±° μ•„λ‹Œκ°€? 라고 μƒκ°ν–ˆλ‹€. ν•˜μ§€λ§Œ

image.png

μœ„μ™€ 같이 아무 것도 λ‚˜μ˜€μ§€ μ•ŠλŠ”λ‹€.

정닡은 {{config}}λ₯Ό 톡해 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ • κ°’ 쀑 secret_key 값을 μ•Œμ•„λ‚΄λŠ” 것이닀. 근데 μ™œ {{FLAG}}와 {{config}} λͺ¨λ‘ μ „μ—­ λ³€μˆ˜μΈλ° ν•˜λ‚˜λŠ” 되고 ν•˜λ‚˜λŠ” μ•ˆλ κΉŒ? {{config}}λŠ” Jinja ν…œν”Œλ¦Ώμ—κ²Œ μžλ™μœΌλ‘œ λ„˜κ²¨μ€„ 수 μžˆλŠ” μ „μ—­ λ³€μˆ˜μ΄λ‹€. ν•˜μ§€λ§Œ {{FLAG}}λŠ” μ „μ—­ λ³€μˆ˜μ΄μ§€λ§Œ Jinjaμ—κ²Œ λ„˜κ²¨μ£ΌλŠ” μ½”λ“œκ°€ ν•„μš”ν•˜μ—¬ FLAG = FLAGλΌλŠ” 것이 μΆ”κ°€λ˜μ•Ό ν•œλ‹€.

즉. μ •λ¦¬ν•΄λ³΄μžλ©΄, {{config}}λŠ” ν…œν”Œλ¦Ώ 엔진도 이미 μ•Œκ³  μžˆλŠ” μ „μ—­ λ³€μˆ˜μ΄λ―€λ‘œ μžμ—°μŠ€λ ˆ 데이터와 HTML을 합쳐 λ³΄λ‚΄μ£Όμ§€λ§Œ {{FLAG}}λŠ” νŒŒμ΄μ¬μ— μžˆλŠ” μ „μ—­ λ³€μˆ˜μ΄μ§€λ§Œ ν…œν”Œλ¦Ώ 엔진에 FLAGλΌλŠ” λ³€μˆ˜κ°€ μ „μ—­ λ³€μˆ˜ FLAGμž„μ„ μ•Œλ €μ£ΌλŠ” μ½”λ“œκ°€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것이닀.

Categories:

Updated:

Leave a comment