• QCMS前台命令执行漏洞分析


    从入口点开始看

     

     定义了很多常量,17行LIB==Lib文件夹

    18行包含Lib/X.php

     

     又设置了很多常量,包含了一系列配置文件

    36行调用了路由,跟进

     

     进来触发构造方法,使$this->_default = site_config(),跟进

     

     返回了一个数组,因此$this->_default = 返回的数组

    之后又调用了view_controller函数,跟进

    定义了$controller_arr = _fetch_url函数

    然后如果$controller_arr为空的话,就会直接退出

    79行检查类的方法是否存在(以_Action结尾),如果存在的话,使用回调函数,不存在的话,返回err

    该CMS还要注意.htaccess这个重定向文件:

     这个文件的意思是:

    $1基本上是从字符串的开头和结尾捕获的所有内容。换句话说,$1 = (.*)。

    在我们的重写中,^表示字符串的开始,(.*)说要匹配任何东西,而$表示字符串的结束。因此,基本上,它意味着从字符串开始到结束的所有内容,并将该值赋值为$1。

    所以如果我输入www.example.com/tacos-are-good,然后$1 = "tacos-are-good"。所以你的最终重写将是www.example.com/index.php/tacos-are-good。

    因此,由于这个重定向文件,我们无法访问到www.example.com/tacos-are-good这个漏洞点,但我们可以使用burp抓包改包,不通过浏览器访问来绕过。

    下面来看漏洞点

     漏洞点存在于err_Action函数中,首先给出payload:

    /home/err/../../&ipconfig>robots.txt&/../lib/X_w160_h160.php

    $ext截取了给出payload中的后4位,也就是.php

    $url_arr以下划线为界将payload切割,变成一个数组:  /home/err/../../&ipconfig>robots.txt/../lib/X       _ w160       _ h160   .php

    如果该数组长度小于2,就会推出,我们这里长度大于2

    接下去宽为数组的键1,为160,高也为160

    $noWaterMark为空,程序会在两个160前面拼接_w和_h

    $path会去匹配文件所在的文件夹,这里因为我们payload中最终的文件为X.php,因此$path=/lib

     接下去,它的宽和高必须满足它的白名单,否则会直接退出,payload中宽和高满足

    我们的payload满足程序中的所有条件,因此会直接带入exec函数命令执行。

    payload: /home/err/../../&ipconfig>robots.txt&>/../lib/X_w160_h160.php 

    进入err函数后向上翻2层来到根目录,将ipconfig的结果保存在robots.txt中

  • 相关阅读:
    什么是语义化的HTML?为什么要做到语义化?
    js操作中要去注意的一些问题
    js数据类型
    css3新增属性
    css3新增动画
    js事件
    hdoj2602 Bone Collector(DP,01背包)
    hdoj2546 饭卡(DP,01背包)
    poj3624 Charm Bracelet(DP,01背包)
    hdoj1050 Moving Tables(贪心)
  • 原文地址:https://www.cnblogs.com/rnss/p/13598362.html
Copyright © 2020-2023  润新知