0x00前言:本文使用wodecms代码下载链接:http//zjdx.down.chinaz.com/201709/wodecms_v1.1.zip我们在审计之前,要摸清楚整套源码的结构,例如mvc的走势,函数等,而且还要对漏洞熟悉,…
0x00前言:
本文使用wodecms
代码下载链接:http://zjdx.down.chinaz.com/201709/wodecms_v1.1.zip
我们在审计之前,要摸清楚整套源码的结构,例如mvc的走势,函数等,而且还要对漏洞熟悉,这样才可以快速定位到敏感点。
0x01 通读MVC:
先从index.php入手
在通读MVC时,先了解一部分define定义的常量,这些常量对我们后面审计能否读通有一定影响。
在33,34行里,require包含了2个文件,而通过上面的单行注释说明知道,下面2条是该cms的MVC入口文件
而ROOT_PATH常量通过上面16行define定义可知道为根目录
而APP_PATH常量通过上面25-28行得知传参g不为空时,APP_PATH常量为app。
所以require包含了2个文件的目录分别是
根目录/WODECMS/Init.php和app/setup.php
进入到Init.php文件
看见通过require的方式包含了5个文件,但是,通过注释说明,我们先去摸清mvc的走势,先进入到下面2个文件
进入到model.class.php文件,发现只是定义了一些方法而已
接着进入controller.class.php文件
拉到122-149行, Run定义方法中,可以看到136行有一个通过include的包含的变量
而$controlFile变量实际构造的内容是根目录/app/controller/$this->control(可控制变量).class.php#GROUP_DIR常量定义在index.php文件31行
然后在145-147行中,
$instance=new $this->control()的意思是实例化上面包含文件的那个类
$methodName = $this->action;的意思是$this->action的内容赋值给$methodName变量
$instance->$methodName ();的意思是引用该类中的方法
回到123-125行中,$this->control和$this->action分别由传参a和c赋值,而$this指向了Analysis方法
来到定义Analysis方法中,看到$acStr有GET传参ac赋值,然后$acStr通过explode函数分解成数组赋值给$acAry变量,$acAry进行判断数目为2时,变量里的数组1赋值给$modelClass,0则赋值给$controlClass
最后,在174和175行中,分别赋值给$this->control和$this->action
所以,通过上面的审计,我们脑袋里面应该有个框架整体思维
-
网址/?ac=控制器_方法名
-
网址/?a=方法名&c=控制器 0x02全局的过滤和防护 继续读取controller.class.php文件,在checkHaveRight定义方法中,对用户权限进行了鉴权,当控制器指向admin的时候,就会进行鉴权
而checkHaveRight在Analysis方法中被调用
回到Inte.php文件中,审计配置文件,33行那个没啥好看的,就31和32有用
其中b ase.inc.php文件中,对全局变量进行了一个防止宽字节注入的过滤
而stripslashes_array函数在core.func.php文件中197-205行被定义
大概内容就是检测到传参有\号时,通过stripslashes函数进行去除。
继续读取core.func.php文件,在370-372行中,又对全局变量进行了过滤
SafeFilterPost和SafeFilterGet函数定义的内容是一样的
所以直接看SafeFilterGet函数的内容,从中可以得知'号会被转为%27
0x03通过seay审计工具,对控制器进行漏洞审计 通对上面mvc的审计,知道了控制器的位置在/app/controller/中,直接丢进seay审计系统进行审计
1.前台任意文件删除漏洞(可重装整站)
在控制器文件中,发现了一个editor的文件,而seay又扫到他有一个变量在unl ink()函数中
点进去
可以看到无任何过滤
所以payload:/index.php?ac=kindeditor_delete&pic=要删除的文件2.前台sql注入漏洞
通过seay扫描,扫描到该文件存在数字型注入
传参aid没有单引号括住,所以不需要插入单引号,就可以注入,而且通过上面对mvc的防护进行审计知道,输入单引号会被转为%27
Payload:/index.php?ac=picture_collect&uid[]&aid=sql注入语句
- 本文作者: 修仙者
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/326
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!