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

路由通读审计之HDWIKI

hdwiki这套系统分为两部分通读,它的代码逻辑非常有趣。一部分为程序路由,另一部分为控制器的初始化,为了代码思路清晰,笔者会在通读完这两部分后再挖掘漏洞。

下载地址:https://www.jb51.net/codes/11840.html

0x01 路由结构了解

我们老样子,整个故事从index.php开始说起。

 

通读审计之HDWIKI

 

可以看到13行包含了./model/hdwiki.class.php文件,我们跟进,看一下是怎么玩的。

 

通读审计之HDWIKI

 

因为之前将常量统统提取,看到define关键字直接跳过。

在./model/hdwiki.class.php的第8行和第9行分别包含了/lib/string.class.php与/model/base.class.php文件,我们打开简单的看一下是怎么玩的。

 

通读审计之HDWIKI

 

可以看到string.class.php文件只是包含了一个string类,这里我们将这个文件留下。

base.class.php文件的逻辑就比较乱了,一堆require引用,这里我们依次打开看一下。

 

通读审计之HDWIKI

 

虽然包含的内容比较多,但都是类与方法,这里我们可以先将它们放到这里,等程序需要使用的时候我们再回来看。另外这里需要注意一下base.class.php文件的第13行是定义了一个base类的。

我们回到hdwiki.class.php文件,继续往下看看。

 

通读审计之HDWIKI

 

包含/model/base.class.php文件后定义了一个hdwiki类就没有下文了,那么我们回到Index.php文件看一下代码的后续操作是什么。

 

通读审计之HDWIKI

 

$hdwiki = new hdwiki();

$hdwiki->run();

这两句代码则为index.php的最后两句话,那么我们开始分析hdwiki这个类。

 

通读审计之HDWIKI

 

PHP在new一个类时,会自动调用构造方法,那么一个类的构造方法有两种,1:__construct魔术方法 2:方法名就是类名

这里我们会进入到hdwiki方法中,看到18行调用了init_request方法,我们看一下init_request方法是怎么运转的。

 

通读审计之HDWIKI

 

在23-26行中,用来判断/data/install.lock是否存在,不存在则进行跳转,第25行中的exit可知,这里并不存在系统重装漏洞。

在28-36行中,我们可以看到,都是对$querystring进行一些操作。这里我们需要注意自己的逻辑不要出错。

我们在37行中看到,$this->get接收到的是$_SERVER[QUERY_STRING]的值,而不是$_GET的值。并且将它以“-”进行分隔。

38-40行的定义我们注意“substr($querystring, 0, 6) == 'admin_'”条件,从代码样子上来看应该是对后台模块的特殊处理。这里我们先放下不管他。

49-51行等同于没写,因为如果不存在$this->get[0]以及不存在$this->get[1]程序在42-48行中会强制给他们赋值。

53-55行终于调用了string类的haddslashes方法,我们看一下这个方法到底做了一些什么操作。

 

通读审计之HDWIKI

 

将 $this->get($_SERVER[QUERY_STRING])、$this->post($_POST)、$_COOKIE都做了addslashes函数处理。这就意味着我们从外界输入危险数据会被转义。但没有 过滤 $_SESSION, $_REQUEST, $_SERVER,我们可能在代码审计中利用到它们,先记录一下。

在/model/hdwiki.class.php文件的57行,调用了$this->checksecurity()方法,我们看一下逻辑是怎么样的。

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