XSS란?
XSS (Cross-Site Scripting)는 웹 애플리케이션의 취약점을 악용하여 악성 스크립트를 다른 사용자의 브라우저에서 반환해 실행하게 만드는 공격 기법이다. XSS는 웹 페이지에 신뢰할 수 없는 입력을 포함시키고 이를 제대로 검증하거나 필터링하지 못하는 경우 발생한다. 공격의 기능은 사용자의 쿠키, 세션 토큰, 또는 기타 민감한 정보를 탈취하거나, 페이지의 콘텐츠를 변조하는 것이다.
XSS 공격의 종류에는 3가지가 있는데
- Stored XSS
- Reflected XSS
- DOM-based XSS
각각에 대해 더 알아보자
Stored XSS
공격자가 악성 스크립트를 서버에 저장하고 다른 유저가 해당 페이지에 접속하면 스크립트가 되는 공격이다. 신뢰할 수 없는 악의적 데이터를 받아 이후의 HTTP 응답에서 해당 데이터를 포함해서 발생하는 취약점이라고 할 수 있다.
예를 들어서 블로그 포스트에서의 댓글이나 메일 애플리케이션에서의 메시지나 게시물 표시 등이 해당됨
<p>it's a message</p>
//악의적으로 변조하면
<p><script>/*alert(1)*/</script></p>
만약 입력값 검증과 필터링이 전무한 애플리케이션이라면 1이라고 피해자의 브라우저에 뜰 것이다
Reflective XSS
xss 유형 중 가장 심플한 편에 속한다고 한다. 공격자가 악성 스크립트가 포함된 URL 혹은 데이터를 피해자에게 보내고 피해자가 이를 클릭하거나 실행해서 스크립트가 실행되는 공격을 말함.
https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
<p>Status: <script>/* Bad stuff here... */</script></p>
유저가 저 URL을 클릭하면 유저의 세션 내에서 스크립트가 브라우저에서 실행될 것이고
유저의 데이터를 탈취하거나 계정 정보를 탈취할 수도 있을 것이다
DOM-based XSS
서버가 아닌 클라이언트 측에서 발생하는 xss 공격이고, 애플리케이션의 자바스크립트 코드가 DOM에서 사용자의 입력값을 적절하게 검증하지 않고 처리해서 발생한다.
var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;
이 코드는 인풋 필드에서 value 값을 읽어서 HTML에 넣는 기능을 하는데 이걸 xss 공격으로 바꾼다면
You searched for: <img src=1 onerror='/* Bad stuff here... */'>
이렇게 검색 결괏값이 뜰 때 악성 스크립트가 뜰 수 있을 것이다
XSS 공격을 방지하는 방법
- 인풋값 필터링: 유저의 인풋을 받으면 가능한 철저하게 필터링해야 한다
- 데이터 인코딩하기: 아웃풋 값을 인코딩
- 응답헤더 사용: content-type 같은 헤더들을 사용해서 의도대로 브라우저가 해석하도록 함
- CSP: Content Security Policy를 통해 특정 스크립트만 실행되도록 제한
버그바운티 한창 시도했을 때 찾아보니까 가장 흔한 공격유형이 xss라고 하니
좀 더 깊게 파서 언젠가는 꼭 성공해보고 싶다..
다른 웹 취약점과의 구별
XSS와 CSRF의 차이
xss는 웹사이트가 악의적 스크립트를 실행하도록 유도하고 csrf는 피해자가 의도치 않은 행위를 하도록 유도함
XSS와 SQL injection의 차이
XSS는 클라이언트 브라우저에서 발생하고 SQLi는 서버 사이드 공격에 해당함
Reflective XSS 실습
가장 간단한 유형인 반사형 XSS 공격을 실습해 보자
검색기능이 있는 블로그 사이트이고 html 인코딩이 걸려있다
alert 함수를 호출하면 성공
지금 너무 추워서 cold를 넣어서 검색했다
개발자 도구로 보니까 검색값이 바로 HTML에 반영이 되어있고
"double quote" 기호 안에 표기된다
그럼 이 큰 따옴표를 빠져나오면 될 듯
다른 유형의 xss 랩도 풀어보자
'웹해킹' 카테고리의 다른 글
버그헌팅 기초/종류/구성요소/프로세스 윤리적 해킹에 대하여 (0) | 2025.03.06 |
---|---|
[웹해킹] Lab: File path traversal, traversal sequences stripped with superfluous URL-decode Writeup (1) | 2025.03.05 |
웹해킹 :: 경로 탐색 Path Traversal 취약점이란 | File Path Traversal 실습 (1) | 2025.03.05 |
[웹해킹] Lab: Stored DOM XSS Writeup (1) | 2025.03.03 |
웹해킹 :: SSRF 취약점/ Lab: Basic SSRF against the local server (0) | 2025.03.01 |