1. XSS- Stored란?
Stored XSS공격은 말 그대로 보안이 취약한 서버에 악의적인 스크립트를 저장함으로써 발생하는 취약점에 해당한다. 예를 들어 서버에서 제공되는 게시판, 사용자 프로필, 문의글 등에 스크립트를 삽입하여 저장한 후 사용자가 확인할 때 발생하는 취약점에 해당한다.
2. low단계

- 현재 페이지에서는 Name이라는 text칸에는 글자수 제한이 있다. Message칸에는 글자수 제한이 없는것으로 확인이 된다.

- 메세지 칸에 삽입한 결과 아무런 필터가 없이 XSS문이 작동되었다.
- Name칸에도 XSS가 작동하는지 확인하기 위하여 개발자도구(F12)를 이용하였다.

- maxlength라는 글자수 제한을 변경할 수 있다.

- Name이라는 칸에 글자수 제한이 풀렸기 때문에 XSS문을 삽입하였다.

- 그 결과 NAME 칸에도 아무런 필터가 없어 작동이 된다.
3. medium단계

- 이전 low단계에서 사용한 name 칸 길이제한 변조

- name칸과 massage 칸을 입력해 보았다.

- <script> 문이 공백처리 되는 것을 확인할 수 있다.

- <script>가 공백으로 치환되는 것을 이용하여 공격을 시도

- 필터링이 우회되어 XSS가 사용되는 것을 확인할 수 있다.

- 소스코드 확인해 본 결과 message칸에서는 strip_tag를 사용하여 XSS가 막혀있다.
- name 칸에서는 <script>를 공백으로 치환하는 필터링이 되어있는 것을 확인할 수 있다.
- name칸에 이벤트핸들러를 이용해 우회하는 방법
- 대소문자를 섞어서 우회하는 방법 등이 있다.
※ strip_tag 란?
- 문자열에서 HTML 태그와 PHP 태그 제거하는 함수
4. high단계

- 이번 단계에서는 소스코드부터 분석해 보겠다.
- message에는 strip_tags가 사용된 것을 확인할 수 있다.
- name에는 정규식을 사용하여 치환하는 것으로 확인이 된다. <script라는 문자의 인자 값 찾을 때 패턴을 분석한다. i라는 옵션을 사용하여 대소문자 구분을 하지 않도록 한다.
- 이와 같은 경우에는 <script>라는 태그 말고 다른 태그를 사용해야 할 것으로 보인다.

- 이전 단계의 방법의 script 태그를 사용해 보았다.

- 그 결과 script 문자의 패턴을 분석하여 필터링이 되는 것을 확인할 수 있다.

- 다른 우회방안으로는 script 태그를 사용하지 않고 img 태그에 onerror라는 이벤트핸들러를 불러와서 XSS를 삽입하는 방법이다.

- script 태그 외에는 다른 태그에는 필터링이 되지 않는 것을 확인할 수 있다.
5. 대응방안
- 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링하여야 한다.
- HTML 태그에 대해 입력값을 화이트리스트 방식 또는 블랙리스트 방식으로 검증하여야 한다.
- 게시판에 HTML 포맷의 입력을 막아야 한다.
'DVWA' 카테고리의 다른 글
DVWA실습 (SQLInjection-blind) (4) | 2023.12.06 |
---|---|
DVWA실습(XSS-Reflected) (0) | 2023.12.05 |
DVWA실습 (XSS -DOM) (2) | 2023.12.04 |
DVWA실습 (File Inclusion) (2) | 2023.12.03 |
DVWA 실습(File Upload - Hard) (2) | 2023.12.01 |