前言:
总是听闻师傅们挖出的各种框架的0day,然后对同类型的网站乱杀,所以决定开始从简单的cms开始进行代码审计,边学边记录,挖出0day指日可待嘿嘿嘿。
环境:
由于我使用的phpmyadmin仅支持php5.4以上的版本,因此测试使用的环境是php5.5.9+apache+mysql8.0.12
开始测试:
先上一张师傅总结的php代码审计脑图:
看了很多师傅的文章,对于代码审计来说通过敏感函数溯源或者是从可控参数入手进行探索都是比较好的方法,不过由于我是第一次对cms进行审计,我打算通过通读全文的方法进行审计。
重安装漏洞:
首先是安装,对应的目录是install文件夹:
进入install/index.php后进行安装
在进行到xxx/install/index.php?act=step5时发生了问题,页面呈现为空白,我们查看代码发现这里本应判断xxx/data是否可写,若可写则写入在data文件夹下写入Install.lock来防止重复安装:
然而这里并没有返回step5.htm也没有生成install.lock文件,经过测试后发现在该cms的所有common.inc.php文件中,错误的应用了require:
为什么使用require会出错的呢?require和include的区别:include运行时碰到错误会继续执行代码,require不会继续执行代码;include()是有条件包含函数,而require()则是无条件包含函数;include有返回值,而require没有。加_once的区别在于如果该文件中已经被包含过,则不会再次包含。
由于在index.php文件中分别在开头调用了/install/include/common.inc.php和在step5中调用了/include/common.inc.php,两个调用文件都包含了Smarty类的文件,这里重复调用产生了错误,也就不会生成install.lock文件,造成重安装漏洞,修复只需将require改为require_once就会正常的生成install.lock文件。
然后我们来看看install文件夹下有没有什么可控的参数。在step3时出现了一些可控参数并将参数写入到/data/config.php中,不过对参数都进行了验证,无法注入:
安装完之后我们来看一看bluecms其他的功能。