[XSS Game] Write Up L1: Hello, world of XSS

marceline·2024년 2월 2일
0

[XSS Game]

목록 보기
2/4

Cross Site Scripting

공격자와 동이한 웹 서비스를 사용하는 다른 사용자에 대한 공격
즉, 공통적으로 사용하고 있는 Web Service 의 취약점을 이용해서 타 사용자가 의도치 않은 행위를 수행하게 하는것이다.

해당 공격법을 학습하기에 적절한 웹사이트인 'XSS Game' 의 문제풀이를 하고자한다.
xss-game

Analyze

Level 1 문제는 "Hello, world of XSS" 이다.
첫번째로 화면에 나타나는 페이지는 다음 사진과 같다.

Mission Description", "Mission Objective", "Your Taeget" 등 에대한 설명이 아래에 나와있다. 찬찬히 해석해보면 다음과 같다.

Mission Description

이 레벨은 사용자의 입력이 (without proper escaping; 적절한 탈출없이/ 필터링 없이 라고 해석 하면 될 듯 하다.) 페이지에 직접 포함되는 'Cross-site Scripting' 가장 일반적인 원인을 보여준다.

아래의 취약한 응용 프로그램 창과 상호 작용하여 원하는 자바스크립트를 실행할 수 있는 방법을 찾아라. 취약한 창 안에서 조치를 취하거나 해당 URL 바를 직접 편집할 수 있다.

Mission Objective

script 를 삽입하여, 아래 프레임에 Javascript alert() 를 pop up 해라.

경고를 표시하면 다음 단계로 진급할 수 있다.

Your Taeget

query 를 삽입할 수 있는 가상의 브라우저가 존재하는 것 을 볼 수 있다.

Test

test 를 입력 후, search 버튼을 눌렀다.

GET method query 파라미터로 서버에 전달되는 것을 알 수 있고, GET method 로 사용자가 전달한 값을 Front End Source Code 에 "query=test" 와 같이 포함시켜 응답하는 것을 알 수 있다.

해당 부분을 개발자 도구의 'Edit as HTML' 기능을 이용하여 수정되기 전 원본 코드는 다음과 같다.

<b>test</b>

b 태그 이외에는 사용자가 입력한 값을 문자에 대한 필터링 없이 그대로 응답했다는 것을 알 수 있다.

사용자 입력 값이 서버를 거쳐 변경없이 그대로 입력되었기때문에 Reflected XSS 취약점이라고 할 수 있다.

Payload

test 의 결과처럼 간단히 "" 를 삽입하면 alert() 가 실행될 것으로 보인다.


사용자가 파라미터 query 를 통해 전달한 값을 서버에서 그대로 Front End Code 에 포함시켜 응답했기 때문에 공격자가 입력한 <\script> 가 HTML Tag 로 인식되었다.
그에 따라 브라우저가 <\script> 내의 alert() 를 실행시킨것이다.

"You can now advance to the next level."
2단계로 가보쟈 ^_^

Reference

권현준. 『누구나 쉽게 따라하며 배우는 웹 해킹 첫걸음』. 비제이퍼블릭, 2022.

0개의 댓글