WEB攻防-通用漏洞_XSS跨站_MXSS_UXSS_FlashXSS_PDFXSS

目录

MXSS攻击

UXSS攻击

FlashXSS

PDFXSS


MXSS攻击

MXSS,全称"Mutation XSS",MXSS攻击是一种特殊的XSS攻击类型,简单来说,就是XSS攻击的一种特殊形式,它通过利用网页内容的动态变化或特定条件触发,使得原本安全的网页代码在特定情况下变得不安全,从而执行恶意脚本。

mXSS 主要是在DOM操作的过程中浏览器渲染造成的畸变引起的。比如,将数据赋值到a.innerHTML后,再取出重新赋值到b.innerHTML的过程中产生畸变。

可以理解为:用户可以输入破损的HTML,但浏览器必须要修复它。所以导致了变异,利用这个特性,从而绕过DOMPurify库,或者在第三方的可信机制认可的情况下预览时,对原网页内容进行提取和处理的过程中,将原本无害的XSS Payload进行了转码操作,于是导致了Payload 变异而产生了XSS,具体可以看下面的参考文章

参考文章:

利用突变XSS绕过DOMPurify 2.0.0 - 先知社区

跨站的艺术-XSS入门与介绍 [ Fooying ]

UXSS攻击

UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型。

造成这个漏洞不是因为你的网站问题,而是浏览器自身的问题。

MICROSOFT EDGE uXSS CVE-2021-34506

Edge浏览器翻译功能导致JS语句被调用执行,下面url是演示的案例

https://www.bilibili.com/video/BV1fX4y1c7rX

在微软低版本的edge浏览器中(版本 91.0.864.37)的案例中,特定的UXSS漏洞(CVE-2021-34506)源于翻译功能中的一段代码没有正确清洁输入。这意味着攻击者可以在网页的任意位置插入恶意的JavaScript代码,一旦用户点击地址栏的翻译提示按钮,这段代码就会被执行。

通过百度,bing,或者其他搜索引擎去搜索跨站语句并进入存在跨站语句的网页时候,如果使用到了浏览器的翻译功能的时候,这个语句会被执行。不是针对网站的,是针对浏览器自己的。

这些漏洞一般要隔很久才能爆一个,所以比较难挖掘。

FlashXSS

swf是小动画一些视频类的后缀,小游戏很多都是用的swf,网页广告等,

在互联网上显示矢量图形、动画、音频和视频内容。SWF文件通常包含ActionScript代码,这是一种专门为Flash平台设计的脚本语言。由三部分组成:

  • 图形和动画数据
  • ActionScript代码
  • 声音和视频数据

而swf和js是可以相互调用的,ActionScript中的ExternalInterface类提供了一组方法,允许SWF文件与嵌入它的HTML页面中的JavaScript进行通信。

SWF文件可以使用ExternalInterface.call方法来调用JavaScript函数。这个方法接受一个函数名和一个参数数组作为输入,并尝试在全局作用域中调用具有该名称的JavaScript函数。

javascript 复制代码
// ActionScript代码
if (ExternalInterface.available) {
    ExternalInterface.call("myJavaScriptFunction", "Hello from SWF!");
}

在上面的例子中,myJavaScriptFunction是JavaScript中定义的一个函数,它将接收来自SWF文件的字符串参数。

案例:phpwind9.0_5275

白盒分析,找相关swf文件进行反编译,直接打开看到的是乱码

黑盒角度其实也是,通过爬取是否找到swf文件,然后进行反编译

这里是下载了源码,找到项目中phpwind9.0_5275\phpwind\www\res\js\dev\util_libs\swfupload\Flash\swfupload.swf

利用反编译工具ffdec_15.1.0,可以对swf进行反编译处理。

主要看xx.swf文件的脚本代码:

上面提到swf调用js代码的函数:ExternalInterface.call 执行JS代码

在swf中,ExternalInterface.call函数调用JavaScript代码。

所以在反编译的代码中搜索ExternalInterface.call,这个函数是用来调用JavaScript代码的

phpwind9.0_5275\phpwind\www\res\js\dev\util_libs\jPlayer\Jplayer.swf可以搜索到关键代码ExternalInterface.call(this.jQuery,"jPlayerFlashEvent",JplayerEvent.JPLAYER_READY,this.extractStatusData(this.commonStatus));

通过this.jQuery这个变量进行传参,

追踪变量jQuery,可以看到关键性代码:this.jQuery = loaderInfo.parameters.jQuery + "(\'#" + loaderInfo.parameters.id + "\').jPlayer";

可以看到通过loaderInfo.parameters属性,获取从宿主网页传递过来的参数,由jQuery变量接收。

那么就可以构造payload:

127.0.0.1:8104/res/js/dev/util_libs/jPlayer/Jplayer.swf?jQuery=alert(1))}catch(e){}//

this.jQuery = (((alert(1))}catch(e){}// + "('#") + loaderInfo.parameters.id) + "').jPlayer");

黑盒怎么测试呢,可以寻找网站有没有swf格式文件,然后下载下来进行反编译,看他是否有安全问题。地址mickeymouse24.com/games/

这个案例是从别人那里copy的,我个人持怀疑态度,我看代码理解的话,jQuery应该是js传入的,应该是这段代码,var c, d = ...:这里定义了两个变量,c 用于稍后存储创建的 Flash 对象元素,d 是一个字符串,包含了传递给 Flash 对象的参数(如 jQueryidvolmuted 等)。在var d = "jQuery=" + encodeURI(this.options.noConflict) + "&id=" + encodeURI(this.internal.self.id) + "&vol=" + this.options.volume + "&muted=" + this.options.muted;这行代码中,虽然encodeURI被用于对部分参数进行编码,但如果this.options.noConflictthis.internal.self.idthis.options.volumethis.options.muted这些值来自不可信的源

我把代码copy出来:

javascript 复制代码
if (this.flash.used) {
                var c, d = "jQuery=" + encodeURI(this.options.noConflict) + "&id=" + encodeURI(this.internal.self.id) + "&vol=" + this.options.volume + "&muted=" + this.options.muted;
                if (b.browser.msie && Number(b.browser.version) <= 8) {
                    d = ['<param name="movie" value="' + this.internal.flash.swf +
                        '" />', '<param name="FlashVars" value="' + d + '" />', '<param name="allowScriptAccess" value="always" />', '<param name="bgcolor" value="' + this.options.backgroundColor + '" />', '<param name="wmode" value="' + this.options.wmode + '" />'
                    ];
                    c = document.createElement('<object id="' + this.internal.flash.id + '" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="0" height="0"></object>');
                    for (var e = 0; e < d.length; e++) c.appendChild(document.createElement(d[e]))
                } else e = function(a, b, c) {
                    var d = document.createElement("param");
                    d.setAttribute("name", b);
                    d.setAttribute("value", c);
                    a.appendChild(d)
                }, c = document.createElement("object"), c.setAttribute("id", this.internal.flash.id), c.setAttribute("data", this.internal.flash.swf), c.setAttribute("type", "application/x-shockwave-flash"), c.setAttribute("width", "1"), c.setAttribute("height", "1"), e(c, "flashvars", d), e(c, "allowscriptaccess", "always"), e(c, "bgcolor", this.options.backgroundColor), e(c, "wmode", this.options.wmode);
                this.element.append(c);
                this.internal.flash.jq = b(c)
            }

我认为这里才是导致FlashXss的原因,关于这个理解我参考的是下面这篇文章:

Adobe Flash XSS traps

PDFXSS

这个比较好理解,就是制作pdf嵌入恶意脚本,然后上传到一些平台或者个人,别人下载打开就会触发

首先是制作带脚本的pdf,用到迅雷PDF 新建页面,视图 - 页面浓缩图

点击浓缩图,右键属性,属性里面 - 动作

选中,新添加JavaScript代码

新增代码app.alert(1);

然后保存为1.pdf,制作完成。

直接打开这个pdf没有任何问题(但不排除pdf阅读器也能执行脚本漏洞),但是把它放在浏览器进行访问,就会进行弹窗

测试中只有火狐不进行弹窗

漏洞利用:

很多网站有文件上传功能,把带有跨站代码的PDF进行上传上去,然后得到文件的下载地址(必须是直连地址),把地址发给别人访问,如果这个平台没有做PDFXSS的漏洞进行过滤,当别人打开这个链接,这个PDF就会弹窗,这样就可以做成一个钓鱼地址。

可以测试上传PDF文件的平台,比如腾讯文档、百度网盘等

相关推荐
用户962377954483 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主4 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954486 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954486 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher8 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行11 天前
网络安全总结
安全·web安全