
1) XSS (Cross-Site Scripting) 란?
XSS: 클라이언트 측 스크립트를 삽입하는 공격
피해자 = 이용자이며, 공격자가 삽입하는 악성 스크립트가 이용자의 브라우저에서 실행된다.
2) 클라이언트 측 스크립트란?
3) 공격 원리
4) 어떻게 스크립트를 삽입할까?
1) Stored XSS란?
Stored XSS: 웹 서버에 악성 스크립트를 저장하는 방식
악성 스크립트를 저장시킨 페이지에 사용자가 접속하게 되면 자동으로 스크립트가 실행되어 공격이 동작한다.
ex. 회원가입, 게시판
2) Stored XSS 공격 포인트
3) Stored XSS 확인절차
1. 작성한 데이터가 서버에 응답되는 것을 확인
| (1) 다음과 같은 게시판이 있다. |
|---|
![]() |
| (2) 게시판에 글을 작성한다. |
|---|
![]() |
| (3) 글 목록으로 돌아와, 서버 응답에 입력한 데이터가 포함되어 있는지 확인한다. |
|---|
![]() |
![]() |
2. HTML 특수문자를 사용할 수 있는지 체크
| (1) 데이터에 < ' " > 의 4가지 특수문자를 입력한다. |
|---|
![]() |
| (2) 서버 응답에 < ' " > 의 4가지 특수문자가 정상 포함되어 있는지 확인한다. |
|---|
![]() |
![]() |
3. POC 코드 실행
| (1) POC (Proof Of Concept) 코드를 먼저 삽입해본다. |
|---|
![]() |
| ○ POC 코드로 alert(1)을 삽입하였으며 prompt(), confirm(), console.log() 함수도 대체로 사용가능 |
| (2) 작성한 스크립트가 동작하는 것을 확인 |
|---|
![]() |
![]() |
| ○ 사진1 : 작성한 스크립트가 서버 응답에 삽입되어 있다. |
| ● 사진2 : 이용자의 브라우저에서도 스크립트가 동작하고 있다. |
1) Reflected XSS란?
Reflected XSS: 공격자가 입력한 스크립트가 서버로부터 그대로 반사되어 응답메시지에 포함돼 사용자의 브라우저에서 스크립트가 실행되는 공격기법
2) Reflected XSS 공격 포인트
3) Stored XSS 확인절차
1. 입력한 데이터가 그대로 서버 응답에 출력되는지 확인
| (1) 다음과 같은 페이지가 있다. |
|---|
![]() |
| (2) 데이터를 입력해보고, 그 값이 그대로 서버 응답에 포함되는지 확인한다. |
|---|
![]() |
![]() |
2. HTML 특수문자 사용 가능여부 체크
| (1) < ' " > 의 4개 특수문자를 작성하여 서버 응답에 출력되는지 확인한다. |
|---|
![]() |
3. Burp Suite 상에서 POC 코드를 삽입하여, 응답에 그대로 출력되는지 확인
| (1) Burp Suite - Repeater 를 통해 POC 코드 삽입 및 응답 확인 |
|---|
![]() |
4. URL을 복사해서 브라우저에서 정상 동작하는지 확인
| (1) URL을 요청하여 스크립트가 동작하는 것을 확인 |
|---|
![]() |
4) Reflected XSS 공격 방식
스크립트가 포함된 URL을 사용자가 클릭하게 만들어 공격을 수행한다.
따라서 링크를 전달해야 하므로, GET메소드를 사용해야 한다.
▶ POST 메소드인 경우 공격의 수단으로 활용할 수 없다.
▶ 따라서 Change Request Method 를 통해 GET방식으로 바꾸어 요청 가능한지 확인해본다.
Stored XSS
데이터를 저장하는 위치와, 데이터가 출력되는 위치가 다를 수 있다.
ex. 글 작성 페이지 (스크립트 작성) - 글 목록 페이지 (스크립트 동작)
Reflected XSS
데이터를 삽입하는 위치와, 데이터가 출력되는 위치가 동일하다.
1. < ' " > 4가지 문자 확인
2. <script> 확인
3. <script>alert</script> 확인
4. <script>alert(1)</script> 확인
이렇게 점증적으로 체크하면서, 사용할 수 있는 값들을 확인한다.