某CMS 5.X版本 管理员密码重置漏洞
首发于: 某CMS 5.X版本 管理员密码重置漏洞
0x00 前言
蹭一下某CMS 5.X版本GETSHELL漏洞合集的热点。
0x01 漏洞分析
在 admin/admin/getpassword.php 中包含了 admin/include/common.inc.php 。跟入common.inc.php,第77行:
这里存在变量覆盖漏洞。
回到 admin/admin/getpassword.php ,从第 94 行开始是发送重置密码链接邮箱的处理过程:
- 从数据库中取出管理员的信息
- 生成密码重置链接
- 发送密码重置链接
在发送阶段,admin/admin/getpassword.php 第 143 行:
先来看看当$sendMail==0
时的情况,此时会将所需信息整合为变量$post
,之后调用curl_post
发送。curl_post
定义在 include/export.func.php:
可以看到这里的$met_host
操控了邮件内容的发送地点,而该参数可以利用前面的变量覆盖漏洞来进行直接的控制。
接着考虑如何让$sendMail==0
。跟入jmailsend
,include/jmail.php 第7行:
met_fd_port
指定了邮件发送端口,属于系统配置。因此倘若我们利用前面的变量覆盖漏洞修改端口,即可导致邮件发送失败,进入到curl_post
。
0x02 漏洞复现
因为使用curl_post
中使用的是http协议,默认端口为80。因此在vps上监听80端口:
在填入管理员密码或邮箱后,抓包修改数据:
forward掉后,
0x03 漏洞补丁
在6.0版本中,官方直接删除了该文件,简单粗暴。