代码审计-从0到1通读源码

## 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

所以,通过上面的审计,我们脑袋里面应该有个框架整体思维

  1. 网址/?ac=控制器_方法名

  2. 网址/?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注入语句

  • 发表于 2021-07-24 14:25:22
  • 阅读 ( 9442 )
  • 分类:代码审计

0 条评论

请先 登录 后评论
修仙者
修仙者

2 篇文章

站长统计