ThinkPHP V5.0.5漏洞_漏洞考古:thiknphp5 代码执行漏洞

thinkphp版本:v5.0.5

下载地址 https://www.thinkphp.cn/down/870.html

poc:?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

带poc访问index.php以后经过初始化以后,流程执行到App类中的run方法

在一百多行左右对路由信息进行了处理,跟入进去

v2-9315797fcc78d03fd217d387d659fa6d_b.jpg

v2-4236a3c4a9a8a1c7efffef0007000ec9_b.jpg

v2-cb131ee7d0bd6476378885cf4d8be1e2_b.png

跟进到module方法

一直到354行出现关键位置,绿色的注释的就是tp官方的修复代码。

v2-ace8bd42e6f36492f11df704ed9b1d9d_b.jpg

v2-e8d6f6e5dcc4a5eea4e0a466bbe36794_b.jpg

v2-48b051359ff688380fec2caaa2b0a598_b.png

在Loader类中对传入的恶意类进行反射

v2-a71c1452ed677404873a6fb15a1c6185_b.jpg

v2-62ecb41f72926627fdd7429de6d237dc_b.jpg

反射执行类方法

v2-be2030420887e44dbe7f3ba2a6045cc6_b.jpg

获取到参数

v2-0d873c6a122cad7c784f9e5b37304ebb_b.jpg

反射执行方法 call_usser_func_array 参数phpinfo

v2-645de5b55b20bcc3bc9d8d7b4ed8aae2_b.jpg

v2-efeea58d464583df9762a8abceb4ebf6_b.jpg

到这里 phpinfo执行成功

v2-49d25b978471acd2171a14e2c22c1a89_b.jpg

漏洞调用堆栈

v2-59c73559c82dfd4e9d96aa213ccab3b4_b.jpg

漏洞产生的主要原因就是think框架应该是通过/,来分割路由,但是因为没有考虑的情况,导致可以通过路由传入thinkApp这样的任意类, 然后再反射执行invokeFunction方法实现任意函数的执行。

官方的修复方法,也就是对路由里面的特殊字符串进行过滤。

漏洞修复方案:

Thinkphp v5.0.x补丁:

library/think/App.php

$controller = strip_tags($result[1] ?: $config['default_controller']);后添加

if (!preg_match('/^[A-Za-z](w)*$/', $controller)) {
    throw new HttpException(404, 'controller not exists:' . $controller);
}

Thinkphp v5.1.x补丁:

library/think/route/dispatch/Module.php

$controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller'));

替换为

$controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller'));
if (!preg_match('/^[A-Za-z](w)*$/', $controller)) {
   throw new HttpException(404, 'controller not exists:' . $controller);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值