bWAPP A3 Cross-Site-Scripting - Reflected (AJAX/JSON)
itsecgames.com
www.itsecgames.com
AJAX가 적용된 웹페이지이다. 별도로 버튼을 클릭하지 않아도 서버와 통신하여 영화 정보를 출력해준다.
"Iron Man"을 입력하면 위와 같이 자동으로 영화를 가지고 있다는 문구가 출력된다.
그리고 서버에 존재하지 않는 영화 제목을 입력하면 위와 같이 영화를 찾지 못했다는 메시지가 출력된다.
low
low 레벨이다. 쿠키 값을 출력하기 위해 script 태그를 입력하면 아무 내용도 출력되지 않는다.
페이지 소스를 보면 script 태그는 정상적으로 박혔는데, 메시지는 출력되지 않았다.
burp로 프록시를 설정하여 Request 패킷을 보면 웹페이지가 xss_ajax_2-2.php임을 확인할 수 있다.
위와 같이 URL을 복사하여 브라우저에서 입력하면 입력한 script 태그가 xss_ajax_2-2.php 페이지에서 동작하는 것을 확인할 수 있다.
문제 페이지인 xss_ajax_2-1.php에서 동작하지 않는 이유를 살펴보자. xss_ajax_2-1.php 페이지 소스를 보면 위와 같이 body 태그에 onload 옵션을 통해 process() 함수를 실행하고 있다.
process() 함수를 보면 HTML 태그 중 "title" 값을 id로 가지는 태그를 찾아서 해당하는 태그의 값을 title 변수에 저장하고 xss_ajax_2-2.php 페이지에 파라미터로 전달한다. "title" 값을 id로 가지는 태그는 다음과 같다.
즉, 영화 제목으로 입력한 값이 xss_ajax_2-2.php 페이지의 파라미터로 전달된다.
xss_ajax_2-2.php 소스를 보면 low 레벨일 때 위와 같은 과정을 거치게 된다. 특수문자를 필터링하지 않기 때문에 xss_ajax_2-2.php 페이지에서 XSS 공격이 성공하게 된다.
medium
medium 레벨이다. low 레벨과 다르게 쿠키 값이 출력되지 않는다.
medium 레벨일 때 서버에서 HTTP header의 Content-Type을 JSON으로 설정하였기 때문에 자바스크립트가 먹히지 않는다.
high
high 레벨이다. high 레벨도 자바스크립트가 동작하지 않는데, medium 레벨과 비교하여 다른 점은 특수문자들이 다른 필터링되었다는 점이다.
서버 코드를 보면 medium 레벨과 마찬가지로 HTTP header의 Content-Type을 JSON으로 설정하였다. 또한, xss_check_3() 함수로 title 파라미터로 전달한 값을 필터링하고 있다.
xss_check_3() 함수는 PHP의 htmlspecialchars() 함수를 사용하여 title 값을 필터링한다. 따라서, 특수문자들이 무력화되기 때문에 XSS 공격은 어렵겠다.
* 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
'Wargame > bWAPP' 카테고리의 다른 글
bWAPP A3 Cross-Site-Scripting - Reflected (Back Button) (0) | 2020.11.18 |
---|---|
bWAPP A3 Cross-Site-Scripting - Reflected (AJAX/XML) (0) | 2020.11.17 |
bWAPP A3 Cross-Site-Scripting - Reflected (JSON) (0) | 2020.11.17 |
bWAPP A3 Cross-Site-Scripting - Reflected (POST) (0) | 2020.11.17 |
bWAPP A3 Cross-Site-Scripting - Reflected (GET) (0) | 2020.11.17 |