CatfishCMS任意命令执行导致getshell

CatfishCMS任意命令执行导致getshell

目录

测试环境:windows + php5.4.45 +apache (phpStudy 集成环境)
CMS 版本: v4.8.54(发布于2019年1月)
漏洞挖掘后提交了CNVD,在CNVD公示后,才发表本文。
漏洞已经修复。
CNVD-ID: CNVD-2019-06255

一、 漏洞说明

完整的payload为:
s=dir&_method=__construct&method=*&filter[]=system
结合源代码详细说明如下:

  1. _method=__construct
    CatfishCMS基于thinkPHP5开发。
    Request类(catfish/library/think/Request.php)用于处理请求。
    它的成员函数method用于获取请求的类型。
    在这里插入图片描述application/config.php 中定义了“表单请求类型伪装变量”:
    在这里插入图片描述
    POST请求参数 “ _method=__construct ”,将 __construct 传给了var_method ,在Request类的method函数中执行后,实现了对Request类的 __construct 构造函数的调用;并且将完整的POST参数传给了构造函数。

  2. 2、 method=*&filter[]=system
    catfish/library/think/Request.php模块中的Request类的构造函数:
    在这里插入图片描述该函数中循环取出参数,如果是本类中存在的参数,就取用户传入的值为其赋值。
    _method=__construct 使得 method 函数调用了 __construct 构造函数, 并且将完整的POST参数传递过去。实现了对本类中的 $method 和 $filter 两个全局变量的覆盖。
    在这里插入图片描述
    在这里插入图片描述
    filter[]=system 的补充说明:
    filter[]=system 或者 filter=system都可以,[]符号可有可无;system意为执行系统命令。

    Method=* 的补充说明:
    method参数的取值限定为:catfish/library/think/Route.php 模块中定义的路由规则。如:GET、POST、PUT、* 等任何一个值都可以;如果值不在此表或为空,都会报错。
    在这里插入图片描述

  3. s=dir
    application/config.php 中定义PATHINFO变量名为’ s ’。可用s传入需要执行的命令,如s=dir
    在这里插入图片描述最终的的payload:
    s=dir&_method=__construct&method=&filter[]=system
    _method=__construct 使得 Request类的method函数调用 __construct 构造函数,并且将完整的payload传递给构造函数;构造函数中对 method 和filter 两个全局变量进行覆盖,method=
    &filter[]=system ;参数s=dir传入需要执行的系统命令 dir 。

二、 漏洞测试

发现漏洞后,在申请CNVD的同时,我在厂商的github项目中提交了issue,地址为: https://github.com/xwlrbh/Catfish/issues/4 厂商确认了该漏洞。并且立即对产品打了补丁,然后发布了新版本v4.8.57。也可联系厂商确认原版本v4.8.54(发布于2019年1月)的该漏洞。
补丁见附录。

  1. 拦截首页请求,并改变请求方法为POST
    在这里插入图片描述

  2. 构造POST请求
    在这里插入图片描述a、 method的值必须等于 “ * ”
    b、 method=* 后面不能有任何参数,包括\r\n回车换行。
    这两条任何一条不满足都不能执行。

  3. 执行一条windows命令,在网站根目录创建一个shell.php文件并写入一句话木马
    在这里插入图片描述

  4. 测试执行phpinfo()
    在这里插入图片描述这里 phpinfo() 后边一定要跟一个分号,否则不能执行。

  5. 也可以新建一个文件并写入一句话木马,从而执行任意命令
    在这里插入图片描述6. 执行windows 的 dir 命令测试
    在这里插入图片描述

三、漏洞修复

V4.8.54 的catfish/library/think/Request.php模块中Request类的method函数:
在这里插入图片描述
V4.8.57(漏洞修复后)的catfish/library/think/Request.php模块中Request类的method函数:
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值