有人在QQ群发招聘信息,我顺便看了一下他们项目的地址,错误信息显示是ThinkPHP框架写的,并且版本为2.2。
如图一
闲来无事,于是搜索2.2相关的漏洞,运气不错,很快找到一个。
ThinkPHP framework 任意代码执行漏洞预警
这是很早以前的的一个漏洞,对ThinkPHP2.2以下版本有效,包含2.2版本。
网上有一些利用的文章,说用“中国菜刀”啥的直接去连就可以了,哥又不是专门去黑人的,也就懒得下这玩意玩,
分析了一下,虽然说可以执行任意代码,但利用这个也是需要通过一些技巧,比如这样的话是可以的
index.php/module/action/param1/${@print(THINK_VERSION)}
但如果想要执行
index.php/module/action/param1/${@print("hello hack!")}
这是不行的,因为Thinkphp会把里面的引号屏蔽掉。那怎样才能把带有引号的内容执行呢?
我想了个办法,不把引号放这里面是吧,好,那放在请求参数里。比如把URL构造成这样
index.php/module/action/param1/${@eval(implode($_GET))}?a=print("hello hack!");
如图二:
好了,既然已经可以执行任意代码了,到这一步就没什么技术含量了,想干嘛干嘛了。
已通知了这哥们,但貌似人家忽略了,额,忽略了…
好吧,截图留个纪念:
不过在国内用ThinkPHP2.2以下版本的网站太多了,Thinkphp的特征非常明显,用搜索引擎一抓一大把,危害极大!
防范:
1.Thinkphp官方补丁已经发布,或者升级到Thinkphp最新版本
2.php.ini中禁用部分可能产生安全问题或者暴露敏感信息的的函数,如在这里涉及到的eval和phpinfo等
3.适当配置服务器权限,比如文件目录的读写权限,这样即便漏洞被利用,也在一定程度上增加黑客提权的难度。