실습 환경 구축은 이 글에 설명되어있다. (https://rimystory.tistory.com/18)
XSS(크로스 사이트 스크립팅): 웹 사이트에서 입력 데이터가 적절한 값인지 검사하지 않고 웹 브라우저를 실행할 때 발생한다.
공격자는 입력 데이터에 스크립트 코드를 입력하여 세션 정보를 탈취하는 것부터 사용자를 악의적인 사이트로 이동하게 하거나 악성 프로그램을 강제로 다운로드하게 한다.
XSS 종류: 스크립트 코드 입력에 따라 분류된다.
- 저장된 XSS(Stored XSS)
- 반사된 XSS(Reflected XSS)
- DOM-Based XSS
XSS 특징: 서버에 전달되는 모든 변수 값에서 발생할 수 있으며, 공격자가 세션을 탈취하여 다른 사용자의 권한을 취득하거나 악성코드를 배포하기 위한 목적, 피싱하여 사용자의 중요한 정보를 획득하기 위한 목적으로 이용된다.
Stored XSS: 악의적인 스크립트 코드가 웹에 입력되면서 데이터베이스에 저장된다. 링크를 통한 일회성 클릭을 유도하는 것이 아니라 불특정 다수의 사용자가 공격자의 게시물에 접근할 때마다 악의적인 스크립트가 실행(악성코드 배포, 랜섬웨어 설치 등)되기 때문에 위협 영향도가 높다.
1. Cross-Site Scripting(XSS) - Stored (Blog)
'xss_stored_1.php' 페이지는 텍스트를 입력하고 [submit] 버튼을 클릭하면 그 아래에 있는 테이블에 입력한 내용을 저장한다.
취약점이 존재하는지 파악하기 위해 예시 스크립트 코드를 작성한다.
<script>alert('Succeed');</script>
[submit] 버튼을 누르면 스크립트가 실행된다.

이번에는 쿠키 값을 경고창에 출력하는 스크립트 코드를 작성한다.
<script>alert(document.cookie);</script>
[submit] 버튼을 누르면 스크립트가 실행되어 쿠키 값이 출력된다. 이전 스크립트도 실행되었기 때문에 차례로 뜬다.

2. Cross-Site Scripting(XSS) - Stored (Change Secret)
'xss_stored_3.php' 페이지는 비밀번호 힌트를 새로 설정하는 기능을 제공한다.
새 비밀번호 힌트 입력란에 스크립트 코드를 작성하고 [change] 버튼을 누른다.
<script>alert(document.cookie);</script>

비밀번호 힌트를 확인할 수 있는 'sqli_16.php' 페이지로 이동하여 bee/bug로 로그인한다.


쿠키 값이 경고창으로 뜬다.
또한 'xss_stored_3.php' 페이지는 사용자의 아이디를 웹 페이지 소스 코드에 노출한다.

따라서 웹 개발자 도구로 'hidden' 타입으로 정의된 'login' 변수에 다른 사용자의 아이디를 입력하고 그 사용자의 비밀번호 힌트를 수정할 수도 있다.
3. Cross-Site Scripting(XSS) - Stored (User-Agent)
'xss_stored_4.php' 페이지는 접속한 웹 브라우저의 정보가 저장된 'User-Agent' 헤더 값을 테이블 형태로 3개까지 출력한다.
'download' 굵은 글씨를 클릭하면 페이지에 접속한 모든 User-Agent의 정보를 새로운 페이지에 출력한다.

버프스위트로 User-Agent 헤더에 스크립트 코드를 입력한다.
<script>alert(document.cookie);</script>

Forward 버튼을 클릭하면 쿠키 값이 경고 창으로 뜬다.

OK를 누르고 테이블을 보면 User-Agent 값에는 스크립트 코드를 주입하였기 때문에 비어있다.
다른 사용자로 로그인한 후 해당 페이지에 들어가도 경고 창이 뜬다.
그러나 접속 횟수가 세번이 지나면 테이블 내용은 최근 3개까지만 출력하기 때문에 스크립트가 실행되지 않는다.
4. 대응방안
- htmlspecialchars 함수를 사용하여 입력 데이터를 UTF-8로 인코딩한다. (&, ", ', <, >)
- mysqli_real_escape_string 함수를 사용하여 입력 데이터 중 특수 문자가 있는 경우 앞에 백슬래시를 붙인다. (NULL, \n, \r, \, ', ", ^Z)
'Projects > 애플리케이션 보안' 카테고리의 다른 글
| [bWAPP] robots.txt 파일 이해 및 실습 (0) | 2025.09.03 |
|---|---|
| [bWAPP] Cross-Site Scripting(XSS) - Reflected 공격 실습 (0) | 2025.09.03 |
| [bWAPP] Broken Auth. 비밀번호 무차별/사전 대입 공격 실습 (0) | 2025.09.03 |
| [bWAPP] 실습 환경 구축 가이드 (버추얼박스, 비박스, 칼리 리눅스 설치) (3) | 2025.09.02 |
| [bWAPP] XML/Xpath Injection 공격 실습 (2) | 2025.09.02 |