duomicms变量覆盖复现

admin 2022年5月29日14:44:51评论52 views字数 1260阅读4分12秒阅读模式

什么是变量覆盖漏洞:

变量覆盖指的是我们自定义的参数替换程序的原有的变量值

危险函数:

  1. extract()函数

    官方说法"从数组中将变量导入当前的符号表",通俗的讲就是将数组中的键值对注册成变量, 例如duomicms变量覆盖复现运行结果是duomicms变量覆盖复现发现$a=“1”被成功覆盖了

  2. prase_str()函数

    解析字符串并注册成变量,在注册变量之前不会验证当前变量是否已经存在,所以会直接覆盖原有变量,例如


    duomicms变量覆盖复现

      1. $$变量覆盖


        duomicms变量覆盖复现

        本地复现:




        duomicms变量覆盖复现

        此处发现foreach进行遍历数组,发现将$$_request进行键值分离,我们的GET,POST,COOKIE传参可以传入任意变量,这部分可能导致变量覆盖漏洞,观察此代码上部分

        duomicms变量覆盖复现

        发现要想执行到下面,当有传参且传参中键名以cfg_或者GLOBALS开头并且COOKIE传参中没有键名就继续往下执行

        而此处漏洞实现完整的攻击需要结合程序的其他功能来实现,所以查询包含common.php的文件,发现login.php文件包含,发现进行if语句判断来验证是否成功登录并转向管理主页

        进入此处需要$res==1

        duomicms变量覆盖复现发现此处执行keepUser()中的方法,定位keepUser()函数


        duomicms变量覆盖复现

        发现此处使用SESSION来验证成功返回1,而使用session验证需要开启session_start,并且要想执行到这一步,需要userID!=""和groupid!=""全文追踪这两个参数


        duomicms变量覆盖复现发现是定义一个类,所以SESSION传参中需要有duomi_admin_id,duomi_group_id,duomi_admin_name,这三个参数,但是需要知道这三个参数的值为什么时才能正确登录,所以可以现在本地成功登录并将$_SESSION使用var_dump打印出来

        duomicms变量覆盖复现


        duomicms变量覆盖复现

        发现duomi_admin_id=1,  duomi_group_id=1,duomi_admin_name=admin便可以成功登录,现在只需要查找到开启session_start并且包含common.php的文件

      duomicms变量覆盖复现

      所以访问http://127.0.0.1/Duomicms_X2.0/upload/interface/gbook.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin就可以成功登录

      总结:

      我们知道了common.php存在变量覆盖发现登录页面login.php包含此文件,通过$res的值来判断是否登录管理用户,发现此处执行keepUser()中的方法,定位函数发现在chech.admin.php可以控制session,所以我们能通过common.php来伪造session来成功登录


      POC:interface/gbook.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin

原文始发于微信公众号(是恒恒呐):duomicms变量覆盖复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月29日14:44:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   duomicms变量覆盖复现http://cn-sec.com/archives/951878.html

发表评论

匿名网友 填写信息