Wargame/bWAPP

bWAPP A3 Cross-Site-Scripting - Reflected (JSON)

0xe82de_ 2020. 11. 17. 21:45
728x90
728x90
728x90
 

itsecgames.com

 

www.itsecgames.com

[사진 1]

영화를 검색할 수 있는 웹페이지이다. JSON이라고 되어 있는 것으로 보아 영화 정보가 객체나 배열로 되어 있을 듯 하다.

 

[사진 2]

"Iron Man"을 검색하면 위와 같이 영화를 가지고 있다는 문구가 출력된다.

 

low

[사진 3]

low 레벨이다. XSS 공격이 통하는지 보기 위해 꺽쇄를 입력하면 아무것도 출력되지 않는다. 내부적으로 특수문자가 입력될 경우 출력을 하지 않거나 오류가 발생한 것으로 추측할 수 있다.

 

[사진 4]

쿠키 값을 출력하기 위해 "<script>document.write(document.cookie)</script>" 값을 입력하면 위와 같이 오류가 발생한다.

 

[사진 5]

페이지 소스를 보면 [사진 4]에서 입력한 값이 이미 페이지 소스에 작성되어 있는 script 태그에 둘러쌓인 것을 확인할 수 있다. 페이지 소스를 정상적으로 작동시키기 위해 </script> 태그를 앞에 추가하면 되겟다.

 

[사진 6]

그럼 위와 같이 쿠키 값이 정상적으로 출력되는 것을 확인할 수 있다.

'</script><script>document.write(document.cookir)</script>

 

medium, high

[사진 7]

medium, high 레벨의 경우 XSS 공격이 통하지 않는다.

 

[사진 8]

서버 코드를 보면 medium, high 레벨일 때 xss_check_3() 함수로 파라미터 값을 필터링한다.

 

[사진 9]

xss_check_3() 함수는 PHP의 htmlspecialchars() 함수로 XSS 공격에 사용되는 <, ' 특수문자를 제거한다. 따라서 XSS 공격이 통하지 않는다.

 

htmlspecialchars() 함수는 &, ", ', <, > 특수문자를 필터링한다.

 

* PHP htmlspecialchars() Function

 

PHP: htmlspecialchars - Manual

if your goal is just to protect your page from Cross Site Scripting (XSS) attack, or just to show HTML tags on a web page (showing on the page, for example), then using htmlspecialchars() is good enough and better than using htmlentities().  A minor point

www.php.net

728x90
728x90