보안 문제 풀이 3

배재현·2025년 4월 10일

정보 보안

목록 보기
5/12

Dreamhack XSS-1

문제 바로가기

문제 개요

총 3개의 페이지가 있으며, 각 페이지 별로 기능이 있다.
1. vuln: XSS 공격을 날릴 수 있는 페이지이다. param에 자바스크립트를 적으면 그대로 실행시킨다.
2. memo: 메모 페이지이다. memo 파라미터에 입력한 값을 저장하고 출력한다.
3. flag: flag를 얻기 위한 페이지이다.

해결 방법

app.py 코드를 살펴보면 flag 페이지에서 요청을 보낼 때, 쿠키에 flag를 담고 셀레니움을 통해 vuln 페이지로 접근한다. 따라서 다음 코드로 쿠키에 접근하여 memo 페이지에 flag를 담으면 된다.

<script>location.href = `/memo?memo=${document.cookie}`;</script>

Dreamhack XSS-2

문제 바로가기

문제 개요

XSS-1 문제와 완전히 똑같은 구조지만, <script> 태그를 이용하면 flag를 얻을 수 없다.

해결 방법

그 이유는 vuln.html에 있는 innerHTML 때문인데, innerHTML 안에 삽입된 <script> 태그는 실행되지 않기 때문에 이걸로는 공격할 수 없다. 하지만 더 알아보면, <script> 태그 없이도 innerHTML에서 JavaScript를 실행할 수 있는 방법이 있다.
MDN Web Docs - innerHTML
위 링크에서 보면

const name = "<img src='x' onerror='alert(1)'>";
el.innerHTML = name; // shows the alert

아래와 같이 img 태그에서 이미지를 불러오지 못했을 때 실행하는 onerror에 적힌 스크립트는 그대로 실행이 된다.

<img src="x" onerror='location.href = "/memo?memo="+document.cookie'/>

flag 페이지에 이 코드를 입력하면 flag를 획득할 수 있다.

profile
많관부

0개의 댓글