문제 설명
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
*참고 사항 : 이번 문제는 Dreamhack 학습의 Web Hacking의 Cross-site-Scripting (XSS) 파트를 읽으면서 풀었다.
코드 분석을 해보자.
vuln : xss-1과 다르게 바로 param을 return하지 않고, render_template 함수를 사용한 값을 반환한다. 즉, 이전 xss-1과 같은 방법을 사용해서 문제를 푸는 것은 불가능하다.
render_template : HTML 템플릿 파일을 렌더링한다. 즉, 이용자가 입력한 값을 그대로 반환하지 않도록 해준다.
memo : xss-1과 똑같이, render_template를 통해 입력받은 값을 기록
flag : xss-1과 동일하게, GET - URL 입력받는 페이지 제공 / POST - 값과 쿠키에 FLAG를 포함해 check_xss 함수 호출, check_xss 함수는 역시 read_url 함수 호출해 vuln에 접속
<script>var x=new URLSearchParams(location.search); document.getElementById('vuln').innerHTML = x.get('param');</script>
vuln 페이지의 해당 코드가 param 쿼리 파라미터(물음표 뒤에 함께 붙는 키=값 쌍)를 조작하여 웹 페이지의 내용을 변경할 수 있게 한다. 이를 이용하면 된다.
<img src="XSS-2" onerror="location.href='/memo?memo='+document.cookie">
해당 코드를 flag 페이지의 param에 입력하면 플래그 값을 구할 수 있다.
src = 이미지 경로, 그러나 일부러 오류를 의도한 것.
onerror = 오류 시 뜨게 하는 값
location.href = 전체 URL을 반환하거나, URL을 업데이트할 수 있는 속성
document.cookie = 쿠키값 읽기(쿠키에 flag를 포함했으니 쿠키 값을 구하는 것)
입력 후 memo 페이지에 가보면
역시 flag 값이 나온다.
개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.
https://dreamhack.io/wargame/challenges/268
xss-2
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 플래그 형식은 DH{...} 입니다. 문제 수정 내역
dreamhack.io
'소학회 > 워게임' 카테고리의 다른 글
[web]Dreamhack_csrf-2 (0) | 2025.02.04 |
---|---|
[web]Dreamhack_csrf-1 (0) | 2025.02.04 |
[web]Dreamhack_xss-1 (0) | 2025.01.28 |
[web]Dreamhack_session-basic (0) | 2025.01.21 |
[Web]SuNiNaTaS_04 (0) | 2025.01.21 |