728x90
반응형
오늘은 드림핵의 simple-ssti라는 문제를 풀어볼 것이다.
문제는 2단계인데 굉장히 쉬운 문제이다.
정말 ssti의 기초만 알아도 풀수 있는 문제이다.
먼저 python코드를 살펴보자.
#!/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)
먼저 코드를 살펴보면, 아래와 같은 부분에서 ssti의 취약점이 발생하는걸 확인할 수 있다.
def Error404(e):
template = '''
<div class="center">
<h1>Page Not Found.</h1>
<h3>%s</h3>
</div>
''' % (request.path)
이는 python Flask에서 나타나는 취약점인데, flask는 jinja2라는 템플릿을 이용하여 취약점이 발생한다.
여기서 {{ }} 형식으로 넣으면, 웹 템플릿이라고 인식을 하여 정보를 출력하거나, 연산, 심지어 RCE까지 이어지는 위험한 취약점이 발생한다.
그러면 이제 웹사이트를 살펴보자.
걍 어디를 들어가던 404에러가 발생된다.
그런데 만약 / 뒤에 웹 템플릿 구문을 넣으면 실행이 될 것이다.
flask는 대부분의 중요한 정보다 config라는 class로 들어간다.
그러면 아래처럼 주소를 넣으면 config파일을 불러올수 있을 것이다.
http://host1.dreamhack.games:<your port>/{{config}}
반응형
위를 넣으면 아래처럼 flag를 확인할 수 있다.
728x90
반응형
'Web' 카테고리의 다른 글
SQL injection이란? (with Dreamhack) (0) | 2022.02.28 |
---|---|
Dreamhack - Flask-Dev (write-up) (0) | 2022.01.01 |
Dreamhack - file-csp-1 (write-up) (0) | 2022.01.01 |
Dreamhack(Wargame.kr) - Login filtering (0) | 2022.01.01 |
JavaScript - HTML과 JS (0) | 2021.10.17 |