一开始看到这个建站系统,感觉有些庞大,遂先百度搜索 DM 建站系统的漏洞 的历史文章 ,然后去CNVD查了查,发现可能存在代码开发人员安全意识不够高的问题,于是先看了看先知论坛上大佬的文章,感觉受益匪浅,其实总体思路还是之前那一套,不过从大佬身上学习到了很多,这里就记录下一步步学习的过程,先放上文章链接
下面就直接复制他的内容,在感觉有需要的地方会写上注释
0x00 前言
这套源码已经经历多个版本的变迁,在安全性上也做了很大的改善,此番再次审计最新版本的DM建站系统,倒不是说非要找出个高危漏洞,更重要的是对自己这么长时间学习的一次检验与总结。
0x01 cms简介
这里审计的DM企业建站系统最新版本(v20180307),下载地址:http://down.chinaz.com/soft/37361.htm
DM企业建站系统是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。
可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。
系统主要特点:
1、模板管理功能,下载后,会有多个模板可选择。
2、可以给每个页面设置SEO关键字,有利于搜索引擎收录。可以给每个页面设置别名,从而是让网页的访问网址更加简洁。
3、后台有布局功能。让页面呈现更加方便。
4、丰富的区块效果
5、通过前台编辑,直接链接到后台。
0x02 cms功能点搜集
下面部分是本文的重点,因此我也会详细解释我是如何进行漏洞挖掘以及代码审计的,其实在安全这块,一个漏洞修补起来或者说识别出来可能非常容易,但是在这之前的挖掘上,很少有人会仔细写这块,看似水到渠成,但是这里的挖掘思路在笔者看来是极其关键的。
安装cms的过程就不说了,这里对照下载地址给的安装步骤一步步来即可。
对于代码审计这块,由于离不了cms所提供的功能,因此我在进行代码审计之前倾向于先搜集这个cms所提供的功能,例如用户注册、留言板、购物等等功能,然后根据相应的功能去进行源代码的审计,这样审计下来不会做太多重复的工作,效率上也能得到提升,慢慢地就形成了自己的审计路子。
安装完第一个可能想到的就是是否存在重装漏洞,那么我们需要看一看install这块是否会判断install文件的存在。
这里可以看到会判断installfile的存在,因此此处没有数据库重装这样的漏洞,继续审计~
之后可能就要搜集页面的功能点,这个应该也比较简单。
随便点击页面,发现页面是纯静态的(http://127.0.0.1/dm/contact.html)
那么可能对页面id这种常见的注入漏洞可以说是不存在的,前台搜集下来发现存在搜索以及留言板这样的功能,那么思路就应该是搜索处或者留言板是否存在sql注入或者xss漏洞。
前台就是这两个功能点,后台的话之前版本存在一个cookie注入,因此这里我们也可以把重点放在后台的认证上来,毕竟出现出过问题,另一个常见的可能就是后台的登录框注入、未授权访问等等。
整理一下,前台潜在的漏洞点就是搜索功能、留言板功能,后台潜在的漏洞点就是登录框注入、cookie的认证问题或是其他未授权访问、CSRF等常见的漏洞,下面我们根据整理出来的功能点进行一一测试。
0x03 cms代码审计
1.搜索功能
这里我搜索的是test”<>,老司机应该都能看出来,这其实就是一个最简单的fuzz语句,来初步看看后台的处理功能
这里可以看到都做了实体化,因此这里可以判断后台应该使用htmlspecialchars或者htmlentities这样的函数来写的,事实上也是如此。
下面进入代码审计时间,在审计之前稍微说下该cms的路由是怎么写的,也就是说是怎么找到最终的函数文件的,后面不再赘述~
先抓包 测试下留言板这个功能 ,跟到 dmpostform.php
前30行基本上都是无关代码
可以看到开发人员自定义了一个 过滤函数,htmlentitdm2 () 其实和 htmlentities() 这个函数差不多,只不过在里面也加入 了一些其他的内容,这里尝试对 htmlentities()函数进行绕过,通过查询发现,ENT_QUOTES 这个选项是既过滤单引号,也过滤双引号,可以看到基本上是无法绕过的,
然后57行判断了 $type 所传入的值是否在 $typeformarr_men () 数组里面,抓包可以看到,$type传进来的值是formblock ,在 $typeformarr 这个数组里面
至此, $file= 'file_formpost/formpost_formblock'
但是并没有看到处理 留言板的函数,继续跟进,略过无关紧要的部分
发现在 102 行包含了 indexDM_load.php ,跟进indexDM_load.php 看这个函数的名字大概可以猜出来,这是个重要的主页加载函数,确实,里面的代码比较乱
前面基本上都是 define 定义常量,直接进行 $file 的搜索即可
在通篇中,只有后半部分这点和 $file 变量有关,那我们基本上可以略过中间 了
我们可以忽略第386到390行了,因为 $file= 'file_formpost/formpost_formblock',符合第 392行,
即 $filev = ./component/dm-include/file_formpost/formpost_formblock.php 接下来直接去找文件就行了
在大佬那篇文章中,版本是 17年的版本,没有对 ip 进行过滤,但是这里可以看到,已经是完全严格过滤了
接下来是对
3.后台登录功能
鉴于这里之前出过cookie上的认证问题,这里重点就是cookie的认证方式是否存在漏洞,这里首先还是来看看前台登录框的代码是怎么写的。
这里还是采用了自定义的htmlentitdm函数,对单引号、双引号进行了转义,并且在sql语句中也不是直接进行拼接,需要对单引号进行闭合,因此这里不存在登录框注入这样的安全问题。
下面来看看后台是怎么对cookie进行校验的,这里笔者做的就是看看后台文件是否都包含了一些基础配置文件,然后再从这些配置文件中去查找cookie的相关操作函数,这里后台的基础配置文件为common.inc2010.php
这里和大佬那篇文章有所不同的是对 cookie 也进行了 html实体过滤 ,无法注入
至此,审计基本结束,可以说都看的懂,只要慢慢来,总会牛逼的!!