『黑客与极客』通读审计之DOYOCMS( 四 )



可是问题来了 , 我们所包含类文件的路径是 /source , 而不是/source/admin/xxx.php
那么我们如何引入呢?不慌 。
『黑客与极客』通读审计之DOYOCMS
本文插图

全局搜索一下哪里修改了$doyoConfig['view']['config']['template_dir']的值(该值影响包含路径)
在admin.php中重现了index.php的操作 。 只是略有一些不同
『黑客与极客』通读审计之DOYOCMS
本文插图

那么我们SSRF漏洞利用点也只能在后台了 , 有一定的局限性
登陆后台后
我们包含a_sys.php文件并实例化该类 , 然后调用template_cache方法
『黑客与极客』通读审计之DOYOCMS
本文插图

这里是传入的$y 。 我们再该文件内翻半天也不会翻到syArgs方法的 。
原因很简单 , 继承了一个类 。
『黑客与极客』通读审计之DOYOCMS
本文插图

这里构造方法有了和template_cache方法相同的步骤
我们之前所看过的这个类的一个syArgs方法
可是在syController中也没有找到syArgs方法 , 那么我们就需要看一下__call魔术方法的处理了
『黑客与极客』通读审计之DOYOCMS
本文插图

第48行
return syClass($name)->__input($args);
syClass我们之前了解到的功能就是进行包含syArgs这个类文件或实例化该类 , 随后调用__input方法 , 把我们__construct的$this->a=$this->syArgs(‘a’,1);中’a’,1以数组的形式传递给__input方法
『黑客与极客』通读审计之DOYOCMS
本文插图

看一下get方法
『黑客与极客』通读审计之DOYOCMS
本文插图

调用了has方法 , 把字符串’a’传递进去了
跟进has方法
『黑客与极客』通读审计之DOYOCMS
本文插图

咦?多了一个成员属性$this->args
我们看一下构造方法是否初始化该属性
该类的构造方法
『黑客与极客』通读审计之DOYOCMS
本文插图

args成员属性是$_REQUEST进来的变量
如果我们传入的?a=template_cache , 返回true
再回来看一下该分支结构
『黑客与极客』通读审计之DOYOCMS
本文插图

继续跟进filters方法
『黑客与极客』通读审计之DOYOCMS
本文插图

看到该方法是用来过滤传入数据内容的 。 在其中的 case 0 , 1,2,3,4,5,中 , 可以看到都对传入的数据进行过滤操作 。 可是在case 2中 , 漏洞出现了 。 这里涉及到array_walk_recursive函数利用问题 。
『黑客与极客』通读审计之DOYOCMS
本文插图

看着arrays方法的代码块 , 好像过滤的还挺全的 。 不仔细想一想还真不知道 。
array_walk_recursive函数并不会影响到数组本身 。 例如:
『黑客与极客』通读审计之DOYOCMS
本文插图

可以看到我们放入的 test=>’aaa , 单引号并没转义 。 好了 , 现在了解到syArgs的第二个参数存在未过滤问题 。


推荐阅读