bWAPP A3 Cross-Site-Scripting - Reflected (AJAX/XML)
itsecgames.com
www.itsecgames.com
직전 문제와 동일하게 AJAX가 적용된 웹페이지이다. 문제 제목을 보면 XML을 이용하여 데이터를 관리하는 것 같다.
"Iron Man"을 입력하면 영화 검색 성공 시 메시지가 출력된다.
서버에 존재하지 않는 영화를 검색하면 미안하다고 한다.
low
low 레벨이다. script 태그를 이용하여 쿠키 값을 출력해보면 위와 같이 "undefined" 메시지가 출력된다. 아마도 XML 파일에서 데이터를 찾지 못해 "undefined" 메시지를 반환한 것 같다(추측임).
꺽쇄를 HTML 엔티티로 변환하여 입력하면 위와 같이 error가 발생한다.
burp로 프록시를 잡아서 보면 원본 웹페이지가 아닌 xss_ajax_1-2.php 페이지에 입력 값을 전달한다.
[사진 6]의 URI 값을 복사하여 URL에 붙여넣어도 위와 같이 script 태그가 정상적으로 동작하지 않는다. script 태그가 먹히지 않기 때문에 img 태그를 이용하여 쿠키값을 출력해보자.
img 태그를 이용하여 자바스크립트 함수를 실행할 수 있다.
<img src"#" onerror="document.write(document.cookie)">
AJAX가 적용되었기 때문에 [사진 8]처럼 값을 입력하면 위와 같이 자동으로 웹페이지에 쿠키값이 출력된다.
서버 코드를 보면 HTTP header의 Content-Type을 XML로 설정하고 있다. script 태그와 꺽쇄가 먹히지 않았던 것은 아마도 이 설정때문이지 않을까 싶다(혹시, 아니라면 댓글로 알려주시면 감사하겠습니다.).
medium
medium 레벨이다. low 레벨에서 사용한 값을 입력하면 이미지 아이콘이 출력되고 쿠키값은 출력되지 않는다.
double quote를 HTML 엔티티로 변환하여 입력한다.
<img src="#" onerror="document.write(document.cookie)">
그럼 위와 같이 쿠키 값이 웹페이지에 출력된다.
서버 코드를 보면 medium 레벨일 때 xss_check_4() 함수로 파라미터 값을 필터링한다. 그리고 xss_check_4() 함수는 addslashes() 함수를 사용하는데, addslashes() 함수는 single quote, double quote, backslash, NULL 값을 무력화시킨다.
즉, [사진 8]의 입력 값중 double quote가 있기 때문에 medium 레벨에서 공격이 먹히지 않은 것이다. double quote를 HTML 엔티티인 "로 변환하여 입력하면 XSS 공격이 먹히게 된다.
high
high 레벨이다. 모든 특수문자를 HTML 엔티티로 변환하고 img 태그를 이용하여 쿠키 값을 출력하려 했지만 일반 문자열로 출력되는 것을 확인할 수 있다.
그런데, high 레벨에서 HTML 엔티티로 변환하지 않고 img 태그를 이용하면 위와 같이 쿠키 값이 출력된다.
서버 코드를 보면 high 레벨일 때 htmlspecialchars() 함수로 입력값을 HTML 엔티티로 변환한다. 즉, low, medium 레벨에서는 입력값을 HTML 엔티티로 변환하였지만 high 레벨에서는 서버에서 HTML 엔티티 변환 작업이 이뤄지기 때문에 특수문자를 전달해도 XSS 공격이 먹히게 된다.
'Wargame > bWAPP' 카테고리의 다른 글
bWAPP A3 Cross-Site-Scripting - Reflected (Custom Header) (0) | 2020.11.18 |
---|---|
bWAPP A3 Cross-Site-Scripting - Reflected (Back Button) (0) | 2020.11.18 |
bWAPP A3 Cross-Site-Scripting - Reflected (AJAX/JSON) (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 |