CmsEasy_7.7.5_20211012存在任意文件写入漏洞和任意文件读取漏洞
厂商官网
安装包下载
https://www.cmseasy.cn/download/
https://ftp.cmseasy.cn/CmsEasy7.x/CmsEasy_7.7.5_UTF-8_20211012.zip
任意文件写入漏洞getshell
后台漏洞,需登录。
任意文件写入漏洞poc
1 | POST /index.php?case=template&act=save&admin_dir=admin&site=default HTTP/1.1 |
.._d_
代表 ../
,此处用来路径穿越
发送漏洞利用的poc数据包,响应内容是ok时,代表网站根目录下被写入了1.php文件。
访问http://192.168.31.96/1.php (或者是http://localhost/1.php),此时发现phpinfo被成功执行。
任意文件写入漏洞代码分析
出现此漏洞的文件是lib/admin/template_admin.php
post
方法传入sid=#data_d_.._d_.._d_.._d_1.php
,经过一轮的正则替换,最后tpl=data/../../../1.php
post
方法传入scontent=<?php phpinfo();?>
,先通过编码实例化,再通过正则替换将单引号转义,此时content=<?php phpinfo();?>
,这里的正则处理是对XSS漏洞的处理,对写入的php代码不生效。
当site=default
时,代码执行到最外层else
处(第2789行)
,此过程中,content
值不变,通过file_put_contents
造成了任意文件写入漏洞。
任意文件读取漏洞
后台漏洞,需登录。
任意文件读取漏洞poc
1 | POST /index.php?case=template&act=fetch&admin_dir=admin&site=default HTTP/1.1 |
.._d_
代表 ../
,此处用来路径穿越
发送漏洞利用的poc数据包
响应内容是cmseasy
网站配置文件config/config_database.php
的文件内容信息。
该响应信息中包含了数据库连接地址账号以及密码。
任意文件读取漏洞代码分析
出现此漏洞的文件是lib/admin/template_admin.php
post
方法传入id=#data_d_.._d_.._d_.._d_config_d_config_database.php
通过一系列的正则替换tpl=data/../../../config/config_database.php
最后通过第2757行
的file_get_contents
函数读取到了配置文件信息。