이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A3 - XSS - Reflected (AJAX/XML)
Ajax(Asynchronous JavaScript and XML)란 빠르게 동작하는 동적인 웹 페이지를 만들기 위한 개발 기법의 하나입니다. 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있습니다. 즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있습니다.
XML(eXtensible Markup Language)은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌습니다.
난이도 하
해당 페이지를 확인해 보면 XSS - Reflected (AJAX/JSON) 페이지와 마찬가지로 AJAX 기능을 활용하여 검색어를 입력하면 해당하는 영화가 데이터베이스에 있는지를 확인하고 결과를 바로 출력하는 것을 확인할 수 있습니다.
하지만 XSS - Reflected (AJAX/XML) 페이지는 JSON 방식과 다르게 AJAX 기능을 활용하여 응답값을 XML로 받는다는 점에서 차이가 있습니다. 그럼 계속해서 문제를 살펴보도록 하겠습니다.
xss_ajax_1-1.php 페이지에서 값을 입력후 패킷을 확인하였더니 입력값이 xss_ajax_1-2.php 페이지의 title 변수에 저장되는 것을 확인할 수 있습니다.
버프스위트의 Repeater 기능을 확인하여 응답 값을 확인해보면 입력한 결괏값이 XML 형식으로 출력이 되는 것을 알 수 있습니다.
<img src=x onerror=alert('TEST')> 스크립트 코드 입력 후 Forward 버튼을 눌러 값을 전달 후 확인하였더니 원하는 결괏값을 확인할 수 없었습니다.
xml 특수문자 처리 방법
& : &
< : <
> : >
' : '
" : "
작동 방식
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 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.
참고사이트
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A3 XSS - Reflected (Custom Header) (0) | 2022.07.28 |
---|---|
비박스(bWAPP) A3 XSS - Reflected (Back Button) (0) | 2022.07.27 |
비박스(bWAPP) A3 XSS - Reflected (AJAX/JSON) (0) | 2022.07.22 |
비박스(bWAPP) A3 XSS - Reflected (JSON) (0) | 2022.07.22 |
비박스(bWAPP) A3 XSS - Reflected (POST) (0) | 2022.07.20 |