主页 > 网络编程 > 路由通读审计之HDWIKI(2)

路由通读审计之HDWIKI(2)

 

通读审计之HDWIKI

 

可以看到是黑名单过滤。如果匹配到关键字则进入到notfound方法,我们看一下notfound方法是怎么处理这些危险数据的。

 

通读审计之HDWIKI

 

我去,直接die掉程序。那么$this->get的过滤就非常严格。我们回到57行继续往下通读。

 

通读审计之HDWIKI

 

59-63行只是简单的unset变量操作。

这里我们回到hdwiki这个构造方法中,看一下load_control方法。

 

通读审计之HDWIKI

 

我们重点去看80-83行的代码逻辑,因为该分支属于正常的控制器分支。$controlfile的值为 ./control/可控值.php文件,在第81行可以看到包含文件操作。我们这里看一下正常的控制器的逻辑是什么样的。

 

通读审计之HDWIKI

 

可以看到程序的控制器的类名都定义为control,OK,我们回过头来继续通读,只是看一眼控制器而已。

 

通读审计之HDWIKI

 

可以看到包含之后就没有什么其他操作了。因为在index.php文件中的最后一行中有调用该类的run方法,我们读一下run方法看看是怎么玩的。

 

通读审计之HDWIKI

 

run方法的逻辑没有想象当中的那么复杂,其实第88行也就是看一下控制器的原因,该系统将所有控制器的名称都定位为control,所以才有new control这一行的操作。

$exemption后面有注释,是免检方法的标志(免检方法:不会查看当前用户是否有访问权限,都会无任何限制的去调用)。

在94-97行中,如果方法名称为hd,则不会进入到该分支,在107行中的if判断中即可知道,如果方法名称为hd,则不管当前用户权限如何,都会去调用hd方法。所以这里hd就是免检方法。

某个控制器的其他方法,则是根据代码逻辑来判断是否有权限访问限制,如果权限不够,那么禁止调用,如果权限够大,那么可以调用。

我们这里可以在./control/目录下定义heihu_577.php文件,内容为:

<?php

class control extends base{

public function hd(){

echo 'helloworld';

}

}

调用结果:

 

通读审计之HDWIKI

 

0x02 控制器结构了解

本次通读分为两次通读的原因,是基础控制器也有它自己本身的逻辑。

我们废话不多说,直接看一下普通的控制器。

 

通读审计之HDWIKI

 

我们可以看到class control extends base,继承了base类,这个类在我们之前了解框架结构时,有包含到base.class.php文件,我们看一下该文件是怎么玩的。

 

通读审计之HDWIKI

 

可以看到base类,定义了同名构造方法(function base)。我们看一下这个方法做了一些什么操作。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!