880 Star 3.6K Fork 1.5K

Discuz / DiscuzX

 / 详情

windows短文件名安全问题 数据库备份爆破

已完成
创建于  
2019-08-14 14:36

输入图片说明
数据库备份功能默认备份在目录"backup_随机字符串"
文件名为"年月日_随机字符串.png"
windows下短文件名访问文件或目录只需要知道前6个字符 backup正好6个 就可以通过
http://localsite.com/data/backup~1/ 判断备份目录是否存在
进而通过爆破年月日来寻找数据库备份文件
http://localsite.com/data/backup~1/190814~1.sql
输入图片说明
一年也就365个请求 不要几秒钟的事

评论 (14)

索马里的海贼 创建了任务

这个难道不是iis的漏洞吗?php不是多数运行在linux+NGINX吗?

@MaiKuraki 正解,而且微软很早就修复了这个漏洞,楼主怕是没有及时更新啊。

@MaiKuraki @坑晨 首先这“短文件名”这不是一个漏洞 这是windows的一个“特性” 其次这跟iis也没关系 只要是windows下,不管是iis还是apache还是nginx都可以用短文件名来直接访问文件。还有php是否多数运行于linux跟这个issue本身没有任何关系,只要你没在介绍中明确说明discuz程序不适用于windows 那就默认存在windows用户,那这个问题就不能无视。

本地搭个环境不费事,测试过了再来讨论

@索马里的海贼 IIS 不启用 ASP.NET 功能就没有这个 BUG。短文件名的确是系统特性,但是能下载文件 ~1.sql 才是问题,微软很早就已经修复了,类似地址全部返回 404 错误。

@坑晨 你说的是早年间的iis短文件枚举漏洞吧?通过短文件名访问一个文件存在与否返回状态码不同(400 404)来判断一个文件是否存在?

@索马里的海贼 IIS 就算用安全策略屏蔽,还是会返回 404,准确的说是 404.5。不论如何,现在都不会返回 400,也就不存在能枚举文件路径的问题了。

@坑晨 可是现在并不需要枚举啊?通过一个短文件名访问一个文件只需要知道文件名的前6位,你没发现我提交的问题就是这6位是固定规律可以爆破的吗?
190811~1.sql 返回404
190812~1.sql 返回404
190813~1.sql 返回404
190814~1.sql 返回200
这就够了啊

@索马里的海贼 你真的看懂我说什么了吗?那样的链接 IIS 默认根本就不能访问,明白吗?所以很好奇你测试环境是怎样的?什么版本的 Windows 系统?Windows 还是 Windows Server?手工配置的 IIS 还是 一键建站包?还是说用的其他服务器程序,例如 Apache、Nginx?

http://bbs.sy*****lub.com.cn/data/backup~1/170531~1.sql
http://www.b**.me/data/backup~1/161103~1.sql
http://www.lw***iao.com/data/backup~1/171212~1.sql
http://www.w***zb.com/data/backup~1/161024~1.sql

以上来源于百度搜索 powered by discuz 随机点开站点用forum.pHp是否可以访问判断是否windows系统 然后用脚本遍历160101~190801备份文件
声明 脚本仅用head探测文件是否存在 并未下载获取任何数据 请不要模仿本操作获取任何非自营站点的数据 超过5条个人信息就可入刑!

如果这不算个问题,那么要怪站长不用linux咯?那我建议install文件加个判断 系统是windows直接退出比较好。

@索马里的海贼 你在故意扯开话题吧,明明是服务器程序配置问题,你偏偏觉得是系统有问题。明明 IIS 默认已经修复了,居然还继续抬杠。没啥好说的,解决方法都告诉你了,用不用随便你!

@坑晨 sorry dz漏洞我也挖了十几个了 这么解释不清楚的还真是第一个。我早说了我承认这是系统配置的问题,我也说了在默认情况下apache和nginx存在这个问题,我也承认了本地没有iis环境 在下载。本身就没有抬杠的意思,只是问题确实存在,而且影响了部分站长,不说量大量少吧 至少百度随随便便就能挖出个5个案例来。你的解决办法没有错,但是作为discuz来说 他没法控制用户的环境,或者说他只能控制有限的一部分,在安装discuz的时候会有环境检测这个环节,gd库没安装 xml库没安装都会导致安装过程终止。这两个会导致系统无法运行,我的问题会导致系统敏感信息泄露,也算个不小的事儿吧?那么你安装的时候做个检查,或者命名函数简单修改一下(也不影响使用也不用动数据库)。这个解决办法难道比默认让所有windows+apache/nginx用户去搞系统配置更麻烦吗?一个是可控的代码修改 一个是不可控的用户环境,怎么方便怎么解决啊。

@索马里的海贼 这个漏洞确实应该修复一下,不过现在难度很大。
目前这项目属于半挂起状态,修漏洞也没人合并......

@索马里的海贼 您测试一下,如果在后台首页安全提示位置加如下代码,能否起到缓解作用?
我不确定这个测试文件和文案好不好,如果有更好的测试文件或者文案,欢迎您告知我。
或者如果您愿意,您直接PR也可以。

if (file_get_contents($_G['siteurl']."data/stat_s~1.xml")) {
	$securityadvise .= '<li style="color: red;">您的服务器支持了 <u>通过8.3兼容格式的短文件名访问文件</u> 功能。此功能的开启会导致附件、数据库备份泄露等风险,强烈建议您根据 <a>更改手册</a> 对服务器配置进行修改。腾讯云计算(北京)有限责任公司不对您在此模式下继续运行程序出现的任何安全问题负责。</li>';//Todo: 提示信息写入语言包
}
老周部落 通过Discuz/DiscuzX Pull Request !835任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
5024494 mai kuraki 1578978679 1154599 xmoer 1578943130 1773794 laozhoubuluo 1594507411
PHP
1
https://gitee.com/Discuz/DiscuzX.git
git@gitee.com:Discuz/DiscuzX.git
Discuz
DiscuzX
DiscuzX

搜索帮助