지난번 xss1의 코드와 차이점은 이 vuln 단 하나였다.
지난번에는 필터없이 param을 return 해주었기 때문에 스크립트 코드가 사용되었지만 render_template를 사용하게 되면서 스크립트 코드가 막히게 되었다.
@app.route("/vuln")
def vuln():
return render_template("vuln.html")
그래서 우회할 수 있는 방법을 구글링했는데 아주 쉽고 괜찮은 방법이 있었다.
바로 img태그에 이미지가 없을시 url로 대체하기 위한 onerror 속성을 사용하는 것이다.
원래의 용도는 아니지만 이것으로 우회할 수 있었다.
바로 이렇게
<img src="a" onerror="document.location.href='/memo?memo='+document.cookie">
를 injection 하게 되면
성공적으로 memo에 Flag가 출력되는 것을 볼 수 있다.