about absolroot
home

XSS-Game Level 4: Context matters

목표 : <img onload>

임무 설명

사용자 제공 데이터의 모든 비트는 표시될 페이지의 컨텍스트에 대해 올바르게 이스케이프되어야 합니다. 이 수준은 이유를 보여줍니다.

(원문) Mission Description

임무 목표

응용 프로그램에서 JavaScript alert()를 팝업하는 스크립트를 삽입합니다 .

(원문) Mission Objective

Your Target

Target Code

index.html

level.py

timer.html

문제 풀이

클릭을 하면 timer 인자에 값이 넘어가고 해당 숫자 second(초) 후에 팝업이 뜬다.
#timer.html <img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
HTML
복사
onload : 이미지 로드가 완료되었을 때 실행할 JavaScript 함수를 지정
코드를 잘보면 img 코드 내에 timer 인자가 들어간 것을 볼 수 있다.
이 인자가 starTimer로 넘어가면 어떻게 작동하는지를 살펴보자
function startTimer(seconds) { seconds = parseInt(seconds) || 3; setTimeout(function() { window.confirm("Time is up!"); window.history.back(); }, seconds * 1000); }
JavaScript
복사
parseInt() : 문자열을 정수로 변환하는 내장 JavaScript 함수, 문자열을 유효한 숫자로 변환할 수 없는 경우(예: 문자열에 숫자가 아닌 문자가 포함된 경우) NaN(Not a Number)을 반환
숫자만으로 이루어지지 않았을 경우 or (||)을 통해 3을 입력하고 3초 뒤에 이전 페이지로 리다이렉트시킨다.
즉 timer에 이상한 값을 넣어도 3초 뒤면 동작한다는 얘기다.
<img src="/static/loading.gif" onload="startTimer('{{'); alert('hello}}');" />
HTML
복사
다음과 같이 짜면 onload 안에 startTimer와 alert를 동시에 실행시킬 수 있을 것이다.
실행되지 않아 URL Encode 부분에서 오류가 발생했나싶어 HEX 값으로 바꿔 입력하니 해결됐다.

✓ XSS Game

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2024. absolroot all rights reserved.