본문 바로가기
IT

Web - XSS (Cross Site Scripting)

by 내일은교양왕 2023. 6. 23.

개념
악의적인 목적을 가진 제 3자가 악성 스크립트를 삽입하여 의도하지 않은 명령을 실행시키거나 세션 등을 탈취할 수 있는 취약점입니다.

XSS 통해서 할 수 있는 것
 - 유저가 할 수 있는 모든 Action을 악 이용
 - 유저가 읽을 수 있는 모든 데이터를 획득
 - 유저 로그인 정보를 탈취 가능

 

공격 방법
Reflected
HTTP Request로 URL에 script를 포함시켜 공격

정상적인 상황

Request
https://a.a.com/weather?city=seoul 

Response
<p>Seoul: Sunny</p>

 

Reflected 공격

Request
https://a.a.com/weather?city=<script>alert('hi')</script>

Response
<p><script>alert('hi')</script></p>


Stored
DB에 script를 저장하여 공격
 - 공격할 사이트의 게시글에 <script>alert('hi')</script> 라고 올림
 - hi alert이 노출되면 XSS 취약 되었다고 판단하여, 사용자 정보를 탈취하는 script를 작성하여 게시글에 올림
 - 악성 script가 작성된 게시글을 열람하는 사용자는 피해자가 됨.

 

DOM-based
client-side에서 개발된 script를 이용해서 공격. 예) 사용자가 검색 바에 키워드를 삽입 시 script 추가

const keyword = document.querySelector('.search-bar').value;
const results = document.querySelector('.results');
results.innerHTML = '검색한 키워드: ' + keyword;
검색한 키워드: <img src="" onerror="<script>alert('hi')</script>">

 

대응 방안
1. Filtering
script로 판단되는 문자를 서버에서 저장하지 않기
<, > 기호를 DB에 저장하지 못하도록한다.

2. Encoding
script로 판단되는 문자를 인코딩하여 저장.


마무리
현실적인 방안은 input 그대로 저장해되, API 응답을 받은 web browser안에서만 replace 어떨까 싶다.
이유는 App에서도 같은 API를 바라본다면 App은 XSS에 전혀 취약하지 않기 때문이다.
그래서 encoding한 값이 그대로 노출되면, 사용자 의도와 맞지 않는 결과를 노출하기 때문이다.

 

 

참고

https://tibetsandfox.tistory.com/5?category=885921 

 

XSS(Cross Site Scripting)란?

XSS(Cross Site Scripting)란? XSS는 크로스 사이트 스크립팅, 즉 사이트 간 스트립팅이라는 이름의 웹 취약점입니다. 웹 사이트의 어드민(관리자)이 아닌 악의적인 목적을 가진 제 3자가 악성 스크립트

tibetsandfox.tistory.com

https://portswigger.net/web-security/cross-site-scripting

 

What is cross-site scripting (XSS) and how to prevent it? | Web Security Academy

In this section, we'll explain what cross-site scripting is, describe the different varieties of cross-site scripting vulnerabilities, and spell out how to ...

portswigger.net

 

'IT' 카테고리의 다른 글

Web - 사용하지 않는 코드 확인하기  (0) 2023.06.23
Web - First Contentful Paint  (0) 2023.06.23
Web - CSRF (Cross Site Request Forgery)  (0) 2023.06.23
Paging - offset vs cursor  (0) 2023.06.19
Lottie란 무엇인가  (0) 2023.06.15