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

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

by Robert8478 2023. 12. 13.

이 페이지는 POST 메소드를 사용하여 HTTP 연결 요청을 하는 페이지이다.

[난이도 하]

이제 익숙하니 바로 <script>alert(document.cookie)</script> 구문을 넣어보자.

쿠키값이 노출되었다.

[난이도 중]

이번에도 같은 구문이다. 아마 addslashes 함수로 필터링을 하고 있어 <script>alert(document.cookie)</script> 스크립트는 먹힐 것 같다.

세션값이 노출되었다. 한번 alert 구문에 문자열을 출력해보자.

alert로 hello world를 출력해보도록 해보자.

보다시피 문자열 출력은 ' 나 " 가 들어가기 때문에 addslashes 필터링에 걸려 막힌다. 그렇다면 문자열은 출력할 수 없는 것일까? String.fromCharCode 자바 스크립트 내장 함수를 이용하면 인자로 받는 아스키코드나 유니코드를 문자열로 반환해 주기 때문에 ' 나 " 를 쓰지 않고도 문자열 출력이 가능하다.

<script>alert(String.fromCharCode(83,117,99,99,101,101,100,33))</script> 스크립트 코드를 삽입하여 문자열을 출력했다. 함수 안의 인자값에 들어가는 숫자는 아스키 코드이다.

POST 방식이기에 만약 이 페이지처럼 입력 폼이 존재하지 않는다면 버프 슈트를 이용해 스크립트를 삽입할 수 있다.

이처럼 firstname 과 lastname 변수에 같은 스크립트 코드와 값을 넣어주고 Forward 시켜주면 같은 반응이 일어난다.
addslashes 함수는 ' "를 필터링 하지만 이처럼 '와 "를 사용하지 않고 우회할 수 있는 취약점이 존재하기에 여전히 위험하다.

[난이도 상]

이번 페이지는 아예 문자열화 시켜 출력한다.
난이도 상은 htmlspecialchars 함수를 통해 스크립트 구문을 필터링 하고 있었다.