yon11b

[DH] simple-ssti 본문

보안/WRITE_UP

[DH] simple-ssti

yon11b 2022. 7. 28. 23:27
반응형

simple-ssti

문제

  • 전체 코드
더보기
#!/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)

풀이

render_template_string() 을 쓰면 {{ }}  안에 들어가는 구문을 템플릿으로 해석하기 때문에, 사용자의 입력이 들어가지 않도록 주의하여야 한다. [출처]

@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

path에 템플릿 취약점이 발생한다는 것을 발견했으므로 {{7*7}}을 하여서 잘 작동이 되는지 확인해 보겠다.

http://host3.dreamhack.games:13839/{{7*7}}

연산이 되었으므로 취약점이 발생했음을 확인했다. 이제 여기에서 flag.txt 파일을 열어보자.

flask에서는 config라는 것이 있다.

config 객체는 "현재 구성 객체 (flask.config)"를 나타내는 Flask 템플릿 전역입니다. 응용 프로그램의 모든 구성 값을 포함하는 사전과 유사한 객체입니다. 대부분의 경우 여기에는 데이터베이스 연결 문자열, 써드 파티 서비스에 대한 신임 정보, SECRET_KEY 등과 같은 민감한 값이 포함됩니다. 이러한 구성 항목을 보는 것은 {{config.items ()}} 페이로드를 삽입하는 것만 큼 쉽습니다 .

란다.

app.secret_key = FLAG

이므로 config를 확인해보면 그 안에 secret_key에 flag가 있을 것으로 예상할 수 있다.

익스

http://host3.dreamhack.games:13839/{{config}}

728x90

'보안 > WRITE_UP' 카테고리의 다른 글

[DH] Mango  (0) 2022.07.28
[DH] csrf-2  (0) 2022.05.19
[webhacking.kr] old-25  (0) 2022.05.19
[webhacking.kr] g00gle2  (0) 2022.05.19
[webhacking.kr] g00gle1  (1) 2022.05.19