halo博客系统代码审计

1 任意文件删除漏洞

1.1 任意文件删除漏洞代码审计

正向梳理功能时,发现后台设置下博客备份功能存在一个删除功能,通过抓包发现是根据文件名进行的删除操作,可能存在任意文件删除漏洞,如下图所示:

通过抓包获取到接口名为 /admin/backup/delBackup ,通过关键字逐一尝试,最终使用关键字delBackup 定位到该接口的 Controller 层代码为 BackupController,如下图所示:

点击进入 BackupController 层,具体代码位于第 211 行至第 220 行,如下所示::

下面进行代码审计分析。可以看到,代码很简单短短几行。

第一步,双击第 213 行的 fileName 参数,通过高亮显示 fileName 以及 type 参数在第 215 行处被

使用,如下图所示

、第二步,分析第 215 行,简单来说就是拼接了用户的主目录路径加上 /halo/backup/ 加上传递来的

type 参数加上传递来的 fileName 参数,最终拼接成一个完整的路径赋值给 srcPath 参数。其中 type参

数应该是其中一个路径。如下图所示:

getProperties() 和 getProperty() 是Java中 System 类的方法,用于获取系统属性。

getProperties() 方法返回一个 Properties 对象,该对象包含了当前Java虚拟机的系统属性。系统属

性是一组由操作系统或Java虚拟机定义的全局变量,用于描述系统的各种配置和状态。

getProperty(String key) 方法用于获取指定键(key)对应的系统属性值。它接受一个字符串参数

key ,表示要获取的系统属性的键。

使用 getProperty("user.home") 即获取了系统属性中名为 user.home 的属性值,即当前用户的主目录

路径。

第三步,通过上图单击 srcPath 的高亮显示,可以看到在第 217 行使用了 FileUtil.del 方法对

srcPath 进行了操作,通过名字可以猜出这就是文件删除方法了。

可自行进入 FileUtil.del 方法,就是单纯的删除操作。

一般来说组件本身不会做任意文件操作防护的,因此需要自行编写防护代码,从上述两步操作中可以看

到,该接口并没有任何防止跨目录的操作,从功能点思考可能会造成任意文件删除漏洞。

最后,在第 217 行处打个断点,内容如下图所示:

1.2 漏洞验证

在任意文件删除单点漏洞代码审计的最后断点处,我们知道了备份文件的存储路径是

C:\Users\Administrator\halo\backup\posts

下面,我们在桌面新建一个名为 test.txt 文件。

然后登录后台,访问设置下博客备份功能,点击删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值