문제에 들어가보면 다음과 같이 입력값을 받는 부분이 있다.
코드를 보면 입력값이 img 태그의 onload 이벤트 핸들러를 통해 실행되는 startTimer란 자바스크립트 함수에서 사용되는걸 볼 수 있었다.
<!doctype html>
<html>
<head>
<!-- Internal game scripts/styles, mostly boring stuff -->
<script src="/static/game-frame.js"></script>
<link rel="stylesheet" href="/static/game-frame-styles.css" />
<script>
function startTimer(seconds) {
seconds = parseInt(seconds) || 3;
setTimeout(function() {
window.confirm("Time is up!");
window.history.back();
}, seconds * 1000);
}
</script>
</head>
<body id="level4">
<img src="/static/logos/level4.png" />
<br>
<img src="/static/loading.gif" onload="startTimer('1');" />
<br>
<div id="message">Your timer will execute in 1 seconds.</div>
</body>
</html>
html 영역내에서는 공격이 불가능하고 자바스크립트내부에서 해당변수가 사용되는 영역에 alert를 삽입해주면 된다.
인자값으로 받아서 parseInt의 인자로 쓰는영역에 alert를 넣어줬다.
payload = ');alert(1);//
'Wargame > XSS Game' 카테고리의 다른 글
XSS Game level 6 (0) | 2018.04.01 |
---|---|
XSS Game level 5 (0) | 2018.03.31 |
XSS Game level 3 (0) | 2018.03.30 |
XSS Game level 2 (0) | 2018.03.29 |
XSS Game Level 1 (0) | 2018.03.29 |