朋友写的工具,解决存储桶浏览器不方便预览问题。
前言:
由于经常遇到存储桶遍历漏洞,直接访问文件是下载,不方便预览,且甲方要求证明该存储桶的危害,因此该工具应运而生。
想法
最开始
最开始是想通过油猴脚本去实现这个功能的。
// ==UserScript==
// @name 存储桶遍历漏洞-油猴脚本
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 存储桶遍历
// @author jdr2021
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const kkfileview = "https://file.kkview.cn/";
const currentUrl = window.location.href;
// 定义extractKeys函数
function extractKeys(xml) {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xml, 'application/xml');
const keys = xmlDoc.getElementsByTagName('Key');
const values = [];
for (let i = 0; i < keys.length; i++) {
values.push(keys[i].textContent);
}
return values;
}
// 编码为base64函数
function encodeBase64(str) {
return btoa(unescape(encodeURIComponent(str)));
}
// 检查页面是否包含ListBucketResult元素
const listBucketResult = document.querySelector('ListBucketResult');
if (listBucketResult) {
// 获取ListBucketResult元素的XML字符串
const xmlString = new XMLSerializer().serializeToString(listBucketResult);
// 提取Key值
const keyValues = extractKeys(xmlString);
// 拼接Key值到当前页面的URL并输出到控制台
if (keyValues.length > 0) {
for (let i = 0; i < keyValues.length; i++) {
const fullUrl = currentUrl + keyValues[i];
const encodedUrl = encodeBase64(fullUrl);
const kkfileviewUrl = kkfileview + "/onlinePreview?url=" + encodedUrl;
console.log(kkfileviewUrl);
}
} else {
console.log('No keys found');
}
}
})();
在控制台(console)的确是输出了所有的路径
但结果就是好像没有什么比较有效的方法去实现一个按钮,去翻页这里所有的url的。
因此该思路也就夭折了。
再然后
就是想通过h5,去实现该功能。
也就是浏览器直接打开一个html,先通过fetch爬取资源,经过一系列处理后,利用iframe去加载kkfileview的地址。
并实现一个按钮去翻页。最后测试发现,一共出现了两种情况的bug。
-
由于是静态html,没有部署到服务器上,直接通过fetch发起请求时,浏览器会给你的origin设置成null,根据同源策略,你的访问是被拒绝的,因此你就无法访问到该存储桶。
2.当我尝试将该静态页面部署在github时,出现新bug了,有些存储桶是http协议的,而github是https协议,因此会产生一个新的错误。详情可见https://blog.csdn.net/weixin_54197236/article/details/132562326
这两种方法都有一个比较简单的解决方法,就是你要部署在服务器,但是我只想打开就能用,依赖越少越好,不依赖更好,但技术太菜,没办法解决,所以就放弃了前端。
最后的最后
我放弃折腾了,直接人生苦短,我爱java。
技术
使用javafx做图形化,kkFileView做文件预览接口。
使用
直接运行OSSFileBrowse-1.0-SNAPSHOT.jar
或命令行运行java -jar OSSFileBrowse-1.0-SNAPSHOT.jar先点击加载按钮,此时会爬取存储桶上的全部资源,等待几秒后,左边的webView将会通过kkFilewView去渲染文件资源。
按钮下一个将会切换到下一个存储桶资源、按钮上一个将会返回到上一个资源。
bug
bug已改,设置jvm启动的编码格式就可以了
java -Dfile.encoding=UTF-8 -jar OSSFileBrowse-1.0-SNAPSHOT.jar
很奇怪的一个bug,如果idea直接运行OSSFileBrowse,爬取某个存储桶上的文件是正常的。!如果我通过maven打包成jar之后,再去跑该存储桶,将会爬不到数据。
我太菜了,解决不了。感觉是编码问题。
注意
在config.properties中 修改allow.extensions的值,即可添加可支持的文件类型进行预览。
修改kkFileView_URL的值,即可将kkFileView修改成自己的kkfileview。默认是使用官方的kkfileview地址。
最后
如果该项目对你有帮助,给一个小小的star吧。
项目地址:
https://github.com/jdr2021/OSSFileBrowse/
原文始发于微信公众号(goddemon的小屋):存储桶遍历漏洞利用工具