본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 7-6.크로스 사이트 스크립팅 [Reflected XSS-AJAX/JSON]

by Robert8478 2023. 12. 13.

이번 페이지는 AJAX 기능을 이용해서 검색어 입력 시 자동으로 데이터베이스를 확인해서 결과를 출력한다.

[난이도 하]

페이지에 값을 넣고 버프슈트로 캡쳐해보았는데 2-1 페이지가 아닌 2-2.php 페이지에 대한 HTTP 요청을 가로채며 title 변수를 GET으로 받고 있는것을 확인할 수 있다.
2-1.php 페이지에 스크립트 코드를 넣으면 2-2.php 페이지에서 스크립트가 실행되기 때문에 2-2.php 페이지를 URL에 입력하여 스크립트 실행 여부를 확인할 수 있다.

xss_ajax_2-2.php?title=<script>alert(document.cookie)</script> 를 주소창에 넣어줌으로써 세션값을 확인할 수 있었다. 이처럼 AJAX/JSON 환경의 웹페이지에서는 버프슈트를 확인해보아야 할수도 있다.

그리고 확인을 눌러주니 에러에 대한 메시지가 출력되었다.

또한 이미지 태그를 활용해서 XSS를 시도해 볼 수 있다. 이미지 태그에서는 태그에 입력한 주소에 이미지가 존재하지 않으면 onError 속성으로 이미지를 대체하게 된다. onError 속성을 이용해서 스크립트 코드를 넣으면 XSS가 가능하다.

<img src=x onerror=alert(document.cookie)> 코드를 입력함으로써 세션값을 얻을 수 있었다.
src 에 x를 넣어주면 엑스박스가 출력되며 onerror로 넘어가서 alert 함수를 수행하게 된다.
계속해서 2-2.php 페이지로 요청값을 넘겨주기 때문에 알림창이 계속해서 뜨게 된다.

[난이도 중]

우선 img 태그를 활용한 코드를 넣어본 결과 똑같은 반응을 일으켰다. 그렇다면 URL로 이동하는 방법도 사용해보자.

이번에는 URL을 이용한 방법은 먹히질 않았다. php 코드를 살펴보자.

보아하니 XSS 우회 기법은 사용하지 않고 JSON 자체에서 설정을 통해 자체적인 방어를 수행한것 같다. 하지만 img src를 활용한 공격은 막아낼 수 없었다.

[난이도 상]

난이도 상에서는 스크립트 코드가 문자열로 출력되었는데 코드를 살펴보니 xss_check_3 즉, htmlspecialchars로 필터링하고 있었다.