php框架审计,对TP框架的审计总结

前言

目前网上大多数的开源系统都是使用的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注入的,都是一些审计技巧。这里把我最近遇到的几个例子也给表哥们分享一下,希望对表哥们有些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值