zoukankan      html  css  js  c++  java
  • 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中

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/rnss/p/13598362.html
Copyright © 2011-2022 走看看