Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Reflected (AJAX/XML)

태군 코드 2022. 7. 25. 16:21
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
 

A3 - XSS - Reflected (AJAX/XML)

 

Ajax(Asynchronous JavaScript and XML)란 빠르게 동작하는 동적인 웹 페이지를 만들기 위한 개발 기법의 하나입니다. 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있습니다. 즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있습니다.

 

XML(eXtensible Markup Language)은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌습니다.

 

난이도 하

xss_ajax_1-1.php

해당 페이지를 확인해 보면 XSS - Reflected (AJAX/JSON) 페이지와 마찬가지로 AJAX 기능을 활용하여 검색어를 입력하면 해당하는 영화가 데이터베이스에 있는지를 확인하고 결과를 바로 출력하는 것을 확인할 수 있습니다.

 

하지만 XSS - Reflected (AJAX/XML) 페이지는 JSON 방식과 다르게 AJAX 기능을 활용하여 응답값을 XML로 받는다는 점에서 차이가 있습니다. 그럼 계속해서 문제를 살펴보도록 하겠습니다.

 

xss_ajax_1-1.php 패킷 확인

xss_ajax_1-1.php 페이지에서 값을 입력후 패킷을 확인하였더니 입력값이 xss_ajax_1-2.php 페이지의 title 변수에 저장되는 것을 확인할 수 있습니다.

 

응답값 확인

버프스위트의 Repeater 기능을 확인하여 응답 값을 확인해보면 입력한 결괏값이 XML 형식으로 출력이 되는 것을 알 수 있습니다.

 

스크립트 코드 입력

<img src=x onerror=alert('TEST')> 스크립트 코드 입력 후 Forward 버튼을 눌러 값을 전달 후 확인하였더니 원하는 결괏값을 확인할 수 없었습니다.

 

xml 특수문자 처리 방법

& : &amp; 

< : &lt; 

> : &gt; 

' : &apos; 

" : &quot;

 

작동 방식

1. XML 앰퍼샌드 : '&' 기호는 객체를 나타내는 데 사용되며 모든 객체는 유니코드 문자 집합에 매핑됩니다.
2. 그리고 각 객체 기호의 형식은 '&symbol;'입니다.
3. 그리고 현재 값에서 특수 기호가 '&'로 인코딩 된 경우 XML 주입을 테스트하는 데 사용할 수 있습니다.

 

특수문자 인코딩

https://www.convertstring.com/EncodeDecode/HtmlEncode

 

인코딩된 값 입력

인코딩 후에 알 수 있듯이 XML 응답에 XSS 페이로드를 성공적으로 주입할 수 있습니다. 앞에서 계속 다뤘던 XSS - Reflected 참고하여 추가 적으로 더 확인해보시기 바랍니다.

 

난이도 중 - ', ", \, NULL 문자를 포함하지 않는 스크립트 코드 실행
 
난이도 상에서는 xss_check_3 함수를 사용하는 것을 알 수 있으며 xss_check_3 함수는 functions_external.php에 정의되어 있고 htmlspecialchars() 함수를 호출하여 문자열에서 특수문자를 HTML 코드 형식으로 변환합니다. htmlspecialchars 함수를 살펴보면 두 번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 문자들을 HTML 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.

 

참고사이트

https://ko.wikipedia.org/wiki/XML

http://www.tcpschool.com/xml/xml_basic_structure

반응형