当前位置: 首页 > article >正文

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函数。

// 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出来:

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文件的平台,比如腾讯文档、百度网盘等

 


http://www.kler.cn/a/507675.html

相关文章:

  • Android-V lmkd 中的那些属性值
  • PyTorch使用教程(2)-torch包
  • B站评论系统的多级存储架构
  • SUN的J2EE与微软的DNA
  • 卷积神经05-GAN对抗神经网络
  • 修复5.0.0r 64位版本浏览器和一些库找不到的问题
  • PCL 新增自定义点类型【2025最新版】
  • 【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)
  • 实战指南:使用Wireshark捕获并解密HTTPS数据包
  • 深度学习模块C2f代码详解
  • 利用PyQt6实现HIS系统差异化数据的定时增量分析
  • sqlite3.OperationalError: database is locked python-BaseException错误解决
  • KubeSphere部署安装,接入KubeKey安装的k8s集群
  • FreeType 介绍及 C# 示例
  • 联发科MTK6762/MT6762安卓核心板_4G智能模块应用
  • 网安快速入门之Windows命令
  • Spring Boot+Vue项目从零入手
  • 图解Git——服务器上的Git《Pro Git》
  • JavaScript 创建一个简单的签名板
  • 10 为什么系统需要引入分布式、微服务架构
  • 惠普M1005黑白激光打印机开机提示no print oartridge故障检修
  • 校园水电费管理小程序的设计与实现(LW+源码+讲解)
  • 云手机技术架构原理浅析,ARM架构与X86架构的对比
  • JavaScript语言的数据结构
  • 03JavaWeb——Ajax-Vue-Element(项目实战)
  • ubuntu的截图工具有哪些