hdwiki6.0代码审计

0x00 前言

版本:
HDWiki-v6.0UTF8-20170209
一个比较老的cms,审计起来难度不大

0x01 安装过程

拿到一个cms先看安装过程
这里我选择D盾监控文件
seay监控mysql数据库变化
burp一步步的把安装数据包发送到repeater里面进行重放观察是否有安装漏洞
观察了一下D盾中的文件修改,没看到有可疑的地方

虽然有对php文件的写入,但是我们并不可控。
mysql的话就是创建了wiki数据库,创建了一堆表,然后就是往表里插入数据,先记录一下:

接着进行burp的重放

姑且先认为这个网站没有重装漏洞

admin密码爆破

在进行admin登陆的时候发现没有验证码,果断想到爆破试试:

成功爆破出来,没看出来有啥限制,那么多的cms只要控制好线程密码强度不高字典够强大总能爆破出来几个。。

审计代码

简单黑盒测试完了网站后,我们开始审计代码
这个cms目录结构比较简单,我们来通读一下代码

存储XSS漏洞

user.php中注册功能:
email直接post过来的数据,post数据经过了haddslashes处理,这里我没有看到其他的过滤

这里经过了docheck检测,我们过去看看

我们去看
docheckemail

这一段对邮箱长度进行判断,然后查询数据库中是否存在,不存在则进入checkmaik方法然后注册
我们去看看

这个利用正则来对邮箱格式进行检测,但是他没有对 HTML 代码或者 JS 代码字符进行处理,所以就造成了 XSS 漏洞。

登陆admin后台

sql注入漏洞

漏洞出现在controledition.php的docompare()函数

!defined('IN_HDWIKI') && exit('Access Denied');
class control extends base{
    .....
    function docompare(){
        .....
        if(@!is_numeric($this->post['eid'][0])||@!is_numeric($this->post['eid'][1])){
			$this->message($this->view->lang['parameterError'],'index.php',0);
		}
		$edition=$_ENV['doc']->get_edition(array_slice($this->post['eid'], 0, 2));
		if($edition[0]['did']!=$edition[1]['did']){
			$this->message($this->view->lang['parameterError'],'index.php',0);
		}
        .....
    }
    .....
}

首先post['eid'][0]和post['eid'][1]必须是数字,不然会报错退出。array_slice()函数的作用是:从数组中移除元素,并返回所移除的元素。这里有一点很重要, POST 传入的参数,键不会自动排序的,传的时候是什么顺序,接收到的就是什么顺序 ,也就是说传给get_edition()函数的参数是我们可以控制的
我们先本地测试一下array_slice函数

可以看到返回顺序和我们传参顺序一样
跟进
get_edition()函数

这里首先判断是不是数组,然后当数组中的值不为数字时,直接由,拼接导致sql注入

漏洞复现:

这里我并没有找到怎么按照参考文章说的让他显示在前台
七月火师傅使用的是使用

盲注(返回的数据包长度不同)来进行观察

https://mochazz.github.io/2018/03/05/代码审计之HDwiki6.0(复现)/#相关文章:

其他漏洞

在我看完整个代码后自己审完去看去找了找网上的文章,发现有一个很有意思的。。
说这个cms后台任意文件删除,任意文件上传等等算挖掘出来的漏洞。。
这个我上篇文章也提了后台,首先就是你都是管理员了,这是管理员给你开放的权限,你只是利用它,并不是非预期挖掘出来的。
起码这个cms我经过实践,所谓的任意文件删除,任意文件下载等等,只是后台正常功能的一部分。。你利用正常管理员给你的权限造成破坏我个人认为没有审计的必要了。所以这里我就没有再写。

参考

https://xz.aliyun.com/t/2087

https://mochazz.github.io/2018/03/05/代码审计之HDwiki6.0(复现)/#相关文章:

原文地址:https://www.cnblogs.com/wangtanzhi/p/12843972.html