2024 SWLUG/클라우드

Stored XSS

un_plugged 2024. 9. 30. 22:50

Stored XSS(저장 XSS, 영구적 XSS)

공격자가 공격 스크립트를 웹사이트에 저장해두거나 게시판 등의 게시글 등에 저장해둔 후 사용자가 해당 페이지에 접속하거나 게시글을 클릭하였을 경우 실행되도록 하는 공격이다. 

  • 공격자가 페이로드를 전송한 뒤 다수의 피해자가 해당 페이지에 접속하면 XSS 공격에 노출
  • 일대다 공격 가능
  • 반사 XSS와 영구 XSS 모두 위험하고 두 공격이 동시에 일어날 수 있음 
  • 특정 페이지에 삽입된 페이로드를 통한 XSS도 가능

<공격 방식>

1. 공격자가 게시물에 악성 스크립트를 삽입

2. 피해자가 게시물을 클릭하면 공격자의 자바스크립트가 포함된 응답이 전송

3. 브라우저에서 공격 스크립트가 실행되면 공격자는 피해자의 쿠키, 세션 등의 정보를 얻을 수 있음

 

 

 

Stored XSS 공격 실습

DVWA 에 접속한 상태에서 좌측 메뉴 중 XSS (Stored) 를 클릭한다. 우측에 나타난 메뉴에서 Name 부분에는 "admin"을 입력하고 Message 부분에는 "hello"를 입력한 후 등록을 위해 Sign Guestbook 버튼을 클릭한다.

 이렇게 위와 같이 hello 메시지가 등록된 것을 확인할 수 있다.

 

그 다음 동일한 화면에서 Name 부분에는 "admin"을 입력하고 Message 부분에는 아래의 XSS 코드(Reflected XSS 공격과 같은 코드)를 입력한 후 Sign Guestbook 버튼을 클릭한다. 

: <script>alert(document.cookie)</script>

공격이 성공하였다면 위와 같이 접속한 도메인 정보, 사용자의 쿠키 정보를 포함한 알람창이 공격자가 입력한 코드에 의해 타나되는 것을 확인할 수 있다.

서버에 저장되기 때문에 페이지를 방문하는 모든 사용자의 브라우저에서 이 스크립트가 실행된다. 

 

 

 

Stored XSS 공격 방어 실습 - 사용자 정의 규칙

DemoACL에 새로운 사용자 정의 규칙을 생성하기 위해 위와 같이 Rules 탭을 선택한 후 Add my own rules and rule groups 를 클릭한다.

규칙 생성 화면의 옵션 중 첫번째 옵션인Rule Type에서는 Rule Builder가 선택된 상태를 유지하고, 규칙 이름에는Stored_XSS를 입력한 후TypeRegular Rule을 선택한다.

 If a request 의 Pull Down 메뉴에서는 matches the statement 를 선택하고, Inspect  Body, Match Type  Contains XSS Injection Attacks 를 선택한다. Text Transformation 에 대해서는 Compress White Space  URL decode Unicode 를 추가한다. 

규칙에 매칭되는 요청을 처리하는 액션은 Block 을 선택한다. 하단의 Custom response 옵션의 체크 박스를 체크한다. Response Code 에는 200 을 입력하고 2.2 Web ACL 생성단계에서 생성한 custom_denied 페이지를 선택한다. 

모든 설정이 완료되었다면 Add Rule 버튼을 클릭한다.

Priority 설정하는 화면에서 Save 버튼을 클릭하면 위와 같이 Stored_XSS 규칙이 생성된 것을 확인할 수 있다. 

다시 DVWA로 돌아와서 XSS(Stored) 메뉴의 What's your name? 입력칸에 아래와 같은 Stored XSS 코드 를 입력한 후 Sign Guestbook 버튼을 클릭한다. 

: <script>alert(document.cookie)</script>

 위의 그림과 같이 사용자의 요청이 사용자 정의 차단 페이지와 함께 차단되는 것을 확인할 수 있다.

 

 

 

Stored XSS 공격 방어 실습 - 관리형 규칙

Reflected XSS와 Stored XSS 공격을 모두 실습한 뒤 방어 중 관리형 규칙 실습을 해보았다. 

전 준비 단계에서 미리 생성해 둔 DemoACL을 선택한 후 새로운AWS 관리형 규칙을 생성하기 위해 위와 같이Rules탭을 선택한 후 Add managed rule groups를 클릭한다.

 Add managed rule gruops 화면에서 첫번째로 보이는 AWS managed rule groups 를 선택하여 세부 메뉴를 확인한다. 

쭉 내리다보면 AWS 관리형 규칙 중 무료 규칙에 속하는 Core rule set 규칙 그룹을 선택하고 Add Rule 버튼을 클릭한다. 

Priority설정하는 화면에 Save 버튼을 클릭하면 위의 그림과 같이 AWS-AWSManagedRulesCommonRuleSet 규칙이 정상적으로 생성된다. 

 

Reflected XSS 공격 방어 확인

 

Reflected XSS 공격 실습에서 수행한 것과 마찬가지로 DVWA 의 XSS(Reflected) 메뉴의 What's your name? 입력칸에 아래와 같은 Reflected XSS 코드 를 입력한 후 Submit 버튼을 클릭한다. 

<script>alert(document.cookie)</script>

위의 그림과 같이 사용자의 요청이 AWS 관리형 규칙 에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인할 수 있다.

※사용자 정의 규칙에서 실습 결과로 나온 access denied가 계속 떴는데 사용자규칙에서 만들어둔 규칙을 삭제하고 하니까 잘 되었다. 

 

Stored XSS 공격 방어 확인

Stored XSS 공격 실습에서 수행한 것과 마찬가지로 DVWA 의 XSS(Stored) 메뉴의 What's your name? 입력칸에 아래와 같은 Stored XSS 코드 를 입력한 후 Sing Guestbook 버튼을 클릭한다.

: <script>alert(document.cookie)</script>

위의 그림과 같이 사용자의 요청이 AWS 관리형 규칙 에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인할 수 있다.

※마찬가지로 사용자 정의 규칙에서 실습 결과로 나온 access denied가 계속 떴는데 사용자규칙에서 만들어둔 규칙을 삭제하고 하니까 잘 되었다. 

 

 

 

Stored XSS 대응 방안

1. 사용자 입력 검증 및 변경

  • 사용자가 입력한 값을 그대로 저장하지 않는다. 
  • 태그를 만들 때 사용하는 <, >을 HTML에서 사용하는 특수 문자로 변경한다.

2. 직접 출력 금지

사용자의 입력을 그대로 출력하는 일은 위험하므로 라이브러리의 출력 함수를 사용한다. 문자열을 그대로 출력하기 때문에 스크립트가 실행되지 않으므로 XSS 공격을 방어할 수 있다.

EX) JSTL의 <c:out />

'2024 SWLUG > 클라우드' 카테고리의 다른 글

Command Injection  (0) 2024.10.29
SQL Injection  (0) 2024.10.28
Reflected XSS  (0) 2024.09.30
AWS WAF 실습 환경 구성  (0) 2024.09.23
AWS WAF와 AWS Cloud Formation 개념  (0) 2024.09.23