bWAPP A3 Cross-Site-Scripting - Reflected (JSON)
itsecgames.com
www.itsecgames.com
영화를 검색할 수 있는 웹페이지이다. JSON이라고 되어 있는 것으로 보아 영화 정보가 객체나 배열로 되어 있을 듯 하다.
"Iron Man"을 검색하면 위와 같이 영화를 가지고 있다는 문구가 출력된다.
low
low 레벨이다. XSS 공격이 통하는지 보기 위해 꺽쇄를 입력하면 아무것도 출력되지 않는다. 내부적으로 특수문자가 입력될 경우 출력을 하지 않거나 오류가 발생한 것으로 추측할 수 있다.
쿠키 값을 출력하기 위해 "<script>document.write(document.cookie)</script>" 값을 입력하면 위와 같이 오류가 발생한다.
페이지 소스를 보면 [사진 4]에서 입력한 값이 이미 페이지 소스에 작성되어 있는 script 태그에 둘러쌓인 것을 확인할 수 있다. 페이지 소스를 정상적으로 작동시키기 위해 </script> 태그를 앞에 추가하면 되겟다.
그럼 위와 같이 쿠키 값이 정상적으로 출력되는 것을 확인할 수 있다.
'</script><script>document.write(document.cookir)</script>
medium, high
medium, high 레벨의 경우 XSS 공격이 통하지 않는다.
서버 코드를 보면 medium, high 레벨일 때 xss_check_3() 함수로 파라미터 값을 필터링한다.
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