代码改变世界

QCMS前台命令执行漏洞分析

2020-09-06 11:07  rnss  阅读(1156)  评论(0编辑  收藏  举报

从入口点开始看

 

 定义了很多常量,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中