[Dreamhack] XSS Filtering Bypass
[Dreamhack] XSS Filtering Bypass
문제 링크
https://dreamhack.io/wargame/challenges/433
문제 설명
Exercise: XSS Filtering Bypass에서 실습하는 문제입니다.
문제 분석
/flag
엔드포인트에서 POST 요청을 보내면, 셀레늄을 이용해 /vuln
엔드포인트에 사용자가 지정한 param 파라미터를 가지고 GET 요청을 전송한다.
이때, param에는 다음과 같은 필터링이 적용된다.
1
2
3
4
5
6
def xss_filter(text):
_filter = ["script", "on", "javascript:"]
for f in _filter:
if f in text.lower():
text = text.replace(f, "")
return text
param 파라미터에 “script”, “on”, “javascript” 문자열이 존재하는 경우 이를 제거하고 있다. (치환 방식 필터링)
하지만 일회성 치환이므로 <scscriptript>
와 같이 입력하는 경우 “script”가 한 번만 ““으로 치환되어 결과적으로 <script>
가 된다.
이 점을 이용하여 /memo
엔드포인트 혹은 dreamhack tools에 document.cookie와 함께 요청하도록 자바스크립트를 작성한다.
새롭게 알게된 점
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.