PHPCMSV9.2上传Getshell
漏洞复现
我们搭建好环境直接注册,找到修改头像,这个地方基本上可以上传成功,只不过能不能利用罢了。
我们在本地创建一个zip文件里面包含一个文件夹,一个我们的恶意代码。通过Burp修改掉。
访问phpsso_server/uploadfile/avatar/1/1/1/av/av.php 其中1是我们的uid
漏洞分析
重复以上步骤。通过burp我们找到上传事件,我们直接去代码定位这个函数。
然后去代码找到函数直接断点调试
根据用户UID创建文件夹,防止用户多了文件夹重复创建了两次,然后检测目录创建,没有就创建一次,否则跳过。
根据uid重命名我们的压缩包文件
之后进行解压缩文件
之后进入dir中循环判断文件安全,删除压缩包和非jpg图片
走到遍历白名单判断文件,排除.(当前目录)…(上级目录)下图删除了压缩包文件
再次循环时$file=av 而av是目录。unlink是不能删除目录的。所以出现异常。
PHPCMSV9暴力猜解数据库
备份路径 \caches\bakup\default\xxxx.sql
而问题出现在哪,我们先看POC。
/api.php?op=creatimg&txt=1&font=/…/…/…/…/caches/bakup/default/s<<.sql
原因:
windows的FindFirstFile(API)有个特性就是可以把<<当成通配符来用而PHP的opendir(win32readdir.c)就使用了该API。PHP的文件操作函数均调用了opendir,所以file_exists也有此特性。
pwaaov0zodprrm53