[XSS Game] Write Up L2: Persistence is key

marceline·2024년 2월 2일
0

[XSS Game]

목록 보기
3/4

XSS Game 의 L1에 이어서 L2 Persistence is key 문제를 풀이하고자 한다.

Analyze


먼저 설명에 대한 해석을 찬찬히 해보면 다음과 같다.

Mission Description

Web applications often keep user data in server-side and, increasingly, client-side databases and later display it to users. No matter where such user-controlled data comes from, it should be handled carefully.

Web Application 은 간혹 사용자의 데이터를 server-side 에 보관한다. 그리고, 점차 client-side 데이터베이스의 데이터베이스에 보관 하고 사용자에게 표시한다.

그러한 user-controlled data 는 어디에서 나오든 관계없이 신중히 처리해야한다.

This level shows how easily XSS bugs can be introduced in complex apps.

이 단계는 복잡한 앱들에서 XSS bug 들을 얼마나 쉽게 도입할 수 있는지 보여준다.

Mission Objective

Inject a script to pop up an alert() in the context of the application.

script 를 주입하여 application 의 context 에 alert() 를 pop up 해라.

Note: the application saves your posts so if you sneak in code to execute the alert, this level will be solved every time you reload it.

참고: application 은 너의 post 들을 저장하므로 코드를 몰래 입력하여 경고를 실행 시 이 레벨은 다시 reload 할 때마다 해결된다.

Your Target


post 를 작성 할 수 있는 란을 개발자 도구로 살펴보면 위와 같았다.
L1 처럼 URI 에 행해지는 공격이 아닌, DB에 하는 공격이므로 GET 방식이아닌 POST 방식인 듯 하다.

공격자가 웹 서비스에 XSS 공격구문이 들어간 무언가를 세기할 시 사용자가 게시물을 읽는 순간 공격 당하는 Stored XSS 공격기법으로 예상된다.

Test

textarea 내에 'test' 를 입력해보았다.

해당 데이터가 'blockquote' 태그로 감싸져있는 것 이 보인다.

blockquote

[2] 를 참고했다.

Try

Try 1

<script> alert() </script>

위 코드를 주입한 결과 다음과 같다.

화면에는 내가 입력한 코드가 나타나지않지만, 개발자도구로 해당부분을 살펴보면 위와 같이 blockqutoe 로 감싸진채 존재한다.
즉, <\script> 를 이용한 일반적인 방법으로는 alert() 를 실행시킬 수 없는 듯 하다.

event 속성

Try 2

"Share status" 버튼을 누를 시 alert() 가 실행 될 수 있도록 event 속성 중 하나인 'onclick' 을 사용해보고자한다.

그러나 w3schools 에 나와있는 예시처럼 onclick 에 대입할 함수가 없다는 것을 깨달았다.

위 사진처럼 "Share status!" 버튼은 submit type 이라는 내용만 있을 뿐, 실행 가능한 함수는 찾아볼 수 없다.

Try 3: onerror

고민 결과, onerror 속성에 대해서 알아봤다. [3] 을 참고했다.

img 태그를 이용하여 error 발생 시 "MyFunction()" 코드를 실행하게끔 되어있다.
만약 이미지의 경로가 잘못된 경로일 시, 에러가 발생할 것 이라 예상된다.

Try it yourself 에 들어가니 예상과 같이 이미지가 정상적인 경로가 아닐때 alert() 를 실행하는 myFuntion 이 있다.

Payload

<img src="xssgame" onerror="alert()">

깨진 이미지와 함께 문제가 풀렸다.

Reference

[1] 권현준. 『누구나 쉽게 따라하며 배우는 웹 해킹 첫걸음』. 비제이퍼블릭, 2022.
[2] https://tcpschool.com/html-tags/blockquote
[3] https://www.w3schools.com/jsref/event_onerror.asp

0개의 댓글