DAY60:Web攻防-XSS跨站&文件类型&功能逻辑&SVG&PDF&SWF&PMessage&LocalStorage(2024小迪安全)
文章目录
- 文件类型触发XSS
- SVG-XSS
- PDF-XSS
- SWF-XSS
- 一、制作swf-xss文件
- 二、找到测试swf文件xss安全性
- HTML-XSS
- 其他:XML格式等
- 总结
- 功能逻辑触发XSS
- PostMessage XSS
- 模拟攻击环境
- 黑盒/白盒
- localStorage型xss(存储型Xss升级版)
- 模拟攻击环境
文件类型触发XSS
SVG-XSS
SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。
文件:xxxx.svg
alert(1)
PDF-XSS
1、创建PDF,加入动作JS
2、通过文件上传获取直链
3、直链地址访问后被触发
工具:迅捷PDF编辑器试用版
SWF-XSS
利用方式2种:
1、上传swf文件可以做xss漏洞
2、找到目标上存在的swf进行反编译后找xss漏洞
工具:Adobe Flash Professional CS6
浏览器:flash center
一、制作swf-xss文件
1、新建swf文件
2、F9进入代码区域
3、属性发布设置解析
//取m参数 var m=_root.m; //调用html中Javascript中的m参数值 flash.external.ExternalInterface.call(m);
触发:?m=alert(/xss/)
注:用浏览器:flash center
二、找到测试swf文件xss安全性
工具:JPEXS Free Flash Decompiler
浏览器:可以试试QQ浏览器
1、反编译swf文件
2、查找触发危险函数
3、找可控参数访问触发
xss一是指执行恶意js,那么为什么说flash xss呢?是因为flash有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等
测试语句:http:xxxxxx/images/upload.swf
注:能不能执行这跟浏览器的解析格式有关系,只要能得到这种文件(swf,pdf等)就可以,后续反编译
HTML-XSS
单纯在HTML代码中写XSS代码即可
其他:XML格式等
总结
- 从安全文件上传功能入手,尝试将其转换为 XSS 攻击点,红队玩法还可配合钓鱼手段。
- 通过文件上传获取文件的访问地址,尝试访问触发 XSS 攻击,但要注意浏览器的格式解析问题可能导致攻击失效。
功能逻辑触发XSS
PostMessage XSS
一个用于在网页间安全地发送消息的浏览器API。它允许不同的窗口(例如,来自同一域名下的不同页面或者不同域名下的跨域页面)进行通信,而无需通过服务器。通常情况下,它用于实现跨文档消息传递(Cross-Document Messaging),这在一些复杂的网页应用和浏览器插件中非常有用。
安全原因:当发送参数可控且接收方处理不当时,将导致XSS
模拟攻击环境
受害方:http://10.13.90.227/60/xssreceive.html
其代码中监听 message 事件,会将接收到的消息中的 url 值赋给 location.href,这可 能导致执行恶意代码
攻击方构造html代码:http://10.13.90.227/60/xss.html
通过构造 xss.html 页面,利用 window.open 打开受害方页面,再使用 postMessage 方 法发送包含恶意代码的消息,从而触发 XSS 攻击。
//打开http://192.168.1.4:82/60/xssreceive.html //分析源码: // 添加事件监控消息 window.addEventListener("message", (event) => { location.href = `${event.data.url}`; });
构造攻击代码:xss.html
攻击方实现XSS界面 function openChild() { child = window.open('xssreceive.html', 'popup', 'height=300px, width=300px'); } function sendMessage() { // 发送的数据内容 let msg = { url: "javascript:alert('yesgay')" }; // 发送消息到任意目标源 child.postMessage(msg, '*'); }
黑盒/白盒
黑盒挖掘
如何去挖这种隐藏比较深的漏洞,这里强推一个国外白帽写的谷歌浏览器插件:
https://github.com/fransr/postMessage-tracker安装之后,只要是当前页面创建了message事件监听,这个插件就会定位到其代码。
白盒挖掘
找代码中此操作类函数及关键字分析
复盘:https://mp.weixin.qq.com/s/M5YIkJEoHZK6_I7nK6aj5w
localStorage型xss(存储型Xss升级版)
挖掘:先看目标应用localStorage
1、先找能控制的键名键值(怎么找)
黑盒挖掘:寻找输入点(如表单、搜索框、评论区等),构造测试用例找页面调用
白盒挖掘:查找与localStorage相关的代码段分析数据存储及数据读取
2、再找对键名键值做输出操作(怎么找)
模拟攻击环境
http://10.13.90.227/60/lo.html 读输入的内容存到浏览器中
http://10.13.90.227/60/display.html 提取浏览器保存的内容显示
先找能控制的键名键值(怎么找)
① 看源码
function saveData() { const input = document.getElementById('userInput').value; localStorage.setItem('userData', input); }
分析输入是由userData控制的
查看是否能控制
② js中全局搜索userData
再找对键名键值做输出操作(怎么找)
③ 发现是display.html操作的这个值userData,所以我们只要修改这个值,然后打开这个页面就行
攻击代码:
访问http://10.13.90.227/60/display.html 显示弹窗
- 模拟攻击环境