利用白盒与黑盒结合的方式审计某CMS
在群里看到Ashe表哥放了几手0day,心里那个羡慕啊于是打算开始学代码审计逛CNVD的时候发现最近SDCMS的漏洞比较多,于是下手挖掘,找到了两个漏洞的位置,因为此源码一些关键的位置都混淆了,所以对我这个刚接触的憨憨有点难度,于是采用白盒加黑盒的方式进行审计。














而主题模板的功能文件在app/admin/controller/themecontroller.php
目录下,查找问题原因,定位到themecontroller.php文件的150行

此处找到问题原因,如果路径中存在字符串.php则执行 if代码块的内容
if代码块的内容正是向文件中写入下面的代码:
if(!defined('IN_SDCMS')) exit;
该代码导致了我们写入的代码无法执行,看到查找字符串的函数是strpos
学过PHP的朋友们应该知道strpos函数是对大小写敏感的,于是我们可以用.PHP的方法跳过该判断分支,前面我们还遇到一个问题就是phpinfo()函数写入时会报非法内容,原先的猜想是他有一个WAF会过滤,结果看到一个函数调用处理提交的数据,然后跟踪到该文件最后一行时震惊了

他自己写了一个函数,函数功能是用正则来过滤php的一些函数和变量名称,而且还没有过滤全,system函数漏了呀(程序员出来挨打).
这个绕过方法就不用多讲了,直接以变量为函数名,将函数名的字符串拆开绕过
先将访问一个php文件然后Burp抓包,操作与上面目录遍历的方法相同,不过文件后缀要大写然后Base64编码修改后访问,然后写文件时进行函数名拆分赋给变量str3,最后以变量str3为函数名执行

最后访问文件地址

成功写入PHP文件并执行了我们的代码
本人最近刚开始学代审,文章深度可能达不到各位表哥的水平,但是希望该文章能给与我一样刚接触代码审计的小白一个思路,同时也希望与云众的各位共同进步,感谢在我的学习之路上一直鼓励和帮助过我的表哥们。