概述
前言
目前网上大多数的开源系统都是使用的mvc框架,php中用的比较多的也就是thinkphp框架,这里就记录一下我在审计使用thinkphp框架的系统,经常关注的几个点。
0x1基类的public方法
Thinkphp框架中,有一个基础的控制器类。几乎所有的控制器都会继承这个类。这就意味着我们是可以调用这个类里面的public方法的,如果在对tp框架二次开发的话,可能会存在一些可以被利用的方法。
实例二:
某商城源码对thinkphp进行的二次开发
将thinkphp基础的controller类中display方法访问控制模式改为了public
原本的display访问控制模式时protected的
所以这个方法,我们是可以调用的,加上thinkphp会自动绑定方法参数。
123行的$_content在我们可控的情况下,是可能进入eval当中的。
我们就可以构造参数实现代码执行。所以我们在审计源码的时候,可以去看看继承的类里面会不会存在public的危险方法。
0x2对assign模板变量方法赋值的错误使用
Thinkphp提供对模板赋值的assign方法
可以看到如果我们传入的$name是一个数组那么就会进行array_merge操作,就代表着我们转入一个数组就能控制模板变量
然后进入fetch
在125行对模板变量进行了extract操作,而且还是EXTR_OVERWRITE,代表这里是可以实现变量覆盖的,如果覆盖了$templateFile参数,那么就可以实现文件包含漏洞,使用php://filter也可以实现任意文件读取漏洞
实例
某系统的search方法中,95行将$keyword传入assign方法中,该系统使用的是老版本的thinkphp,所以I方法,我们是可以传入数组的,在这里传入我们想要覆盖的变量,keywords[想要覆盖的变量名 ],就可以实现任意文件包含。
0x3模板文件的方法调用
在模板文件里面,有时候也会有方法的调用。
实例二:
这里的shareBox方法,获取query参数,urldecode,parse_str,然后模板变量赋值,然后调用display。这个方法在这里并没有做什么 操作,那我们就去看看模板文件里面有没有进行方法的调用
这是部分的模板文件,可以看到在第九行,进行了方法调用,而且传入的参数是我们完全可控的。
40行传入了getinfo方法
D方法是用于实例化自定义模型类,传入一个param数组,然后调用D方法获取实例化后的模型类,在调用到指定的方法传入指定的参数。那么就代表我们是可以用该方法调用任意模型类的需要传入一个参数的任意方法。那么就需要去寻找看有没有这种方法来供我们实现代码执行。
0x4总结
Thinkphp的两个代码执行,还有传入数组,exp,实现sql注入的,都是一些审计技巧。这里把我最近遇到的几个例子也给表哥们分享一下,希望对表哥们有些帮助。
最后
以上就是碧蓝大碗为你收集整理的php框架审计,对TP框架的审计总结的全部内容,希望文章能够帮你解决php框架审计,对TP框架的审计总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复