Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Stored (Blog)

태군 코드 2022. 8. 12. 17:49
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
 

A3 - XSS - Stored (Blog)

 

저장된 XSS (Stored Cross-Site Scripting)는 악의적인 스크립트 코드가 웹에 입력되면서 데이터베이스에 저장됩니다. 링크를 이용하여 일회성으로 클릭을 유도하지 않고 불특정 다수의 사용자가 공격자의 게시물에 접근하면 지속적으로 악의적인 스크립트가 동작합니다. 이를 통하여 관리자의 권한 획득, 게시물에 접근한 사용자의 권한 획득, 악성코드 배포 등 많은 공격에 악용될 수 있습니다.

 

저장형 XSS 공격 시나리오
1. 악의적인 사용자가 XSS가 취약한 사이트를 발견
2. XSS가 취약한 사이트에서 게시판에 악성 스크립트가 포함된 글 작성
3. 일반 사용자는 악의적인 사용자가 작성한 게시글을 읽으면, 서버로부터 악성 스크립트가 담긴 게시글 응답을 전달받습니다.
4. 일반 사용자의 브라우저에서 응답 메세지를 실행하면서 악성 스크립트가 실행됩니다.
5. 악성 스크립트를 통해 공격이 이루어 집니다.

 

난이도 하

 

xss_stored_1.php

xss_stored_1.php 페이지를 확인해 보면 글을 입력할 수 있는 창이 확인이 됩니다. 글을 등록 후 Submit 버튼을 눌러보도록 하겠습니다.

 

XSS TEST 글 등록

XSS TEST를 입력 후 Submit 버튼을 눌렀더니 블로그에 글이 등록되었다는 메시지를 확인할 수 있습니다. 글을 계속 등록하면 테이블에 입력한 내용이 계속 저장이 되는 것을 알 수 있고, 여기에 스크립트 코드를 입력해 보도록 하겠습니다.

 

스크립트 구문 입력

<script>alert('XSS TEST')</script>

텍스트 입력 공간에 XSS TEST 메시지를 출력하는 스크립트 코드를 입력하고 Submit 버튼을 눌러 줍니다.

 

경고창 확인

스크립트 코드를 입력 후 Submit 버튼을 눌러 주면 스크립트가 실행되어 xss_stored_1.php 페이지에서 경고창으로 XSS TEST 메시지를 출력해줍니다.

 

경고 창의 확인 버튼을 클릭하면 원래 페이지로 돌아가고, 텍스트 입력 공간에 스크립트 코드를 입력하였기 때문에 테이블은 비어 있는 것을 알 수 있습니다.

 

익스플로러로 접속

xss_stored_1.php 페이지를 재접속하거나 다른 브라우저를 통해서 접속을 해보면 스크립트 코드가 저장되어 있기 때문에 XSS TEST 메시지를 출력하는 팝업창이 계속 뜨는 것을 확인할 수 있습니다.

 

반응형

 

난이도 중/상

xss_stored_1.php 소스코드

 

난이도 중에서는 xss_check_4 함수를 사용하는 것을 알 수 있으며 xss_check_4 함수는 functions_external.php에 정의되어 있고 addslashes() 함수를 이용하여 입력 데이터를 우회합니다. 

addslashes() 함수는 데이터베이스 쿼리에서 필드 값으로 저장하기 전에 사용되는 함수입니다. 만일 문자열에 작은따옴표('), 큰따옴표("), 백 슬래시(\), NULL 문자(%00)가 포함되어 있다면, 이 문자들 앞에 백 슬래시(\)를 붙여 특수 문자가 순수한 하나의 문자로 인식되도록 해줍니다. 

 

난이도 하 - 모든 스크립트 코드 실행 

 

난이도 중 - ', ", \, NULL 문자를 포함하지 않는 스크립트 코드 실행 

 

난이도 상에서는 xss_check_3 함수를 사용하는 것을 알 수 있으며 xss_check_3 함수는 functions_external.php에 정의되어 있고 htmlspecialchars() 함수를 호출하여 문자열에서 특수문자를 HTML 코드 형식으로 변환합니다. htmlspecialchars 함수를 살펴보면 두 번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 문자들을 HTML 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.

반응형