이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A3 - XSS - Reflected (AJAX/JSON)
Ajax(Asynchronous JavaScript and XML)란 빠르게 동작하는 동적인 웹 페이지를 만들기 위한 개발 기법의 하나입니다. 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있습니다. 즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있습니다.
장점
- 페이지 이동없이 고속으로 화면을 전환할 수 있다.
- 서버 처리를 기다리지 않고, 비동기 요청이 가능하다.
- 수신하는 데이터 양을 줄일 수 있고, 클라이언트에게 처리를 위임할 수도 있다.
- 플러그인 없이도 인터렉티브 한 웹페이지 구현할 수 있다.
단점
- Ajax를 쓸 수 없는 브라우저에 대한 문제가 있다.
- HTTP 클라이언트의 기능이 한정되어 있다.
- 페이지 이동없는 통신으로 인한 보안상의 문제
- 지원하는 Charset이 한정되어 있다.
- 스크립트로 작성되므로 디버깅이 용이하지 않다.
- 요청을 남발하면 역으로 서버 부하가 늘 수 있음.
- 동일-출처 정책으로 인해 다른 도메인과는 통신이 불가능하다.
JSON(JavaScript Object Notation)이란?
난이도 하
xss_ajax_2-1.php 페이지는 AJAX 기능을 활용하여 검색어를 입력하면 해당하는 영화가 데이터베이스에 있는지를 확인하고 결과를 바로 출력해줍니다.
값을 입력하면 특정한 버튼을 누르지 않아도 결과값이 바로 출력이 되는 것을 알 수 있습니다.
취약점이 존재하는지 확인하기 위하여 스크립트 코드를 입력해 보았지만 아무런 반응이 없는 것을 확인할 수 있었습니다. 자세한 확인을 위하여 프록시 도구인 Burp Suite를 사용하여 확인해 보도록 하겠습니다.
Burp Suite를 실행하고 xss_ajax_2-1.php 페이지에서 값을 입력 후 요청 패킷을 가로챈후 헤더를 확인해 보면 xss_ajax_2-1.php 페이지에서 입력한 값이 xss_ajax_2-2.php 페이지의 title 변수에 저장이 되는것을 알수 있습니다.
xss_ajax_2-1.php 페이지의 소스코드를 확인해 보면 위와 같이 입력값을 GET 방식으로 xss_ajax_2-2.php 에 보내는 것을 확인할 수 있습니다.
xss_ajax_2-2.php 페이지의 title 변수에 값을 입력후 웹 페이지를 접속해보면 JSON 형식으로 입력한 값이 출력되는 것을 확인할 수 있으며, xss_ajax_2-1.php 페이지에서 문자열을 출력하는 스크립트 코드를 입력하거나 웹 페이지에서 검색하면 xss_ajax_2-2.php 페이지로 값이 전달되므로 xss_ajax_2-1.php 페이지에서는 스크립트 실행을 확인 할수 없습니다.
다시 취약점 확인을 하기 위하여 xss_ajax_2-2.php 페이지에서 스크립트 실행 여부를 확인해 보도록 하겠습니다.
xss_ajax_2-2.php 페이지에서 스크립트가 정상적으로 실행되는 것을 확인할 수 있습니다. 테스트를 하실때에는 프록시 도구도 함께 사용하여 확인해 보시기를 추천드립니다.
또 다른 방법으로는 이미지 태그를 활용하여 XSS를 확인할수 있습니다. 이미지 태그에서는 태그에 입력한 주소에 이미지가 존재하지 않을 경우 'onError' 속성으로 이미지를 대체하기 때문에 'onError' 속성을 이용하여 스크립트 코드를 입력하면 XSS가 가능합니다.
스크립트 입력 시 AJAX로 검색 기능을 구현하므로 스크립트 코드를 입력하고 스페이스 바를 입력하면 경고창 출력을 확인할 수 있고, AJAX 기능을 사용하여 계속 검색어를 xss_ajax_2-2.php의 변수로 넘겨 HTTP 요청을 보내므로 계속 경고창이 발생할 수 있으므로 스크립트 실행 후 페이지 재접속이 필요합니다.
<img src=x onerror=alert('TEST')>
난이도 중
난이도 하와 동일하게 URL 요청을 보냈을 때, 난이도 중에서는 JSON 문법으로 스크립트 문이 그대로 출력이 됩니다. 하지만 img 태그를 이용하면 alert를 띄울 수 있습니다.
xss_ajax_2-2.php 페이지의 소스코드를 확인해 보면 난이도 중에서는 header() 함수를 통해 Content-Type을 json으로 보내고 있었고, 이를 통해 자바스크립트 코드의 실행을 차단할 수 있었습니다.
난이도 상에서는 XSS를 위하여 조작한 이미지 태그를 입력하면 스크립트 코드가 실행되지 않고 입력한 내용이 기본 메시지에 출력이 됩니다.
코드를 확인해보면 난이도 상에서는 title 변수의 입력 값을 xss_check_3 함수로 필터링을 하여 XSS를 방어하는 것을 알 수 있습니다.
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A3 XSS - Reflected (Back Button) (0) | 2022.07.27 |
---|---|
비박스(bWAPP) A3 XSS - Reflected (AJAX/XML) (0) | 2022.07.25 |
비박스(bWAPP) A3 XSS - Reflected (JSON) (0) | 2022.07.22 |
비박스(bWAPP) A3 XSS - Reflected (POST) (0) | 2022.07.20 |
비박스(bWAPP) A3 XSS - Reflected (GET) (0) | 2022.07.11 |