2017年9月26日凌晨2点某朋友致电告诉我博客被黑
我默默地看了一眼原来是我们的模板作者(李明浩)来过
当时博客体现的是模板、文章被删(如下)

然而我并没有在意,默默地进入景安空间把域名绑定删除.
因为这几天比较忙,昨天开始着手分析。
首先upyun的日志体现在26日0:00至2:00总共有两个iP进行了大量敏感操作
①222.93.133.213 江苏省苏州市 电信(疑似为服务器)
②42.234.15.101 河南省焦作市 联通(李明浩个人iP)
嗯那就差不多可以确定是模板作者本人操作了
我把这个时间段的日志全部下载下来分析 发现有将近1w条记录
大部分都是漏洞扫描器的记录。疑似为了混肴视线开的扫描器
于是乎我看到了这条记录。

代码如下:
/content/templates/limh.me/function/image.php?url=../../../../config.php
正常访问为空白页面,但我的直觉告诉我肯定有问题于是我加了view-source。然后出现了如下页面

噢原来是这样哦。明浩你真棒的呢。
正巧我用的是景安外网数据库 外网是可以直接 于是乎可以直接看到数据库和AUTH_KEY
那就意味着可以通过AUTH_KEY和密文算出Cookies直接登陆后台
真的很棒很棒的呢,你真是个合格的程序员
于是乎在00:54我们的明月浩空进入了我的后台

然后就能干一些见不得人羞羞的事情了
喏,我们看看他到底做什么

噢?原来是在后台操作文章标签插件呢。可以可以。所用的iP都是自己的呢。不错。厉害
——-请注意 本文正片——-
我们现在来分析一下image.php这个文件

file_get_contents
函数,参考w3school的定义file_get_contents()
函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
可以说file_get_contents()是完全可以读取本地文件的,比如file_get_contents("../../../../config.php")
,就可以读取config.php文件的内容
那么问题来了,为什么那么多人用模板没人发现这个问题呢,首先image这个文件一开始想到的就是获取图片等操作,至于代码么很容易被忽略掉。
包括favicon.php也是一样也附带了这个后门代码

其实原理也很简单
就是通过后门获取数据库账号密码和AUTH_KEY然后通过数据库的密文和AUTH_KEY算出Cookies进入后台
注:进入后台等于拿到了空间权限.可通过后台上传WebShell
然后你们都懂
——-修复方法——-
将file_get_contents()替换成curl函数,※前提是PHP必须开启curl扩展
curl函数呢,比file_get_contents()效率高,速度快,性能好,而且不会读取本地文件。
以下是修复好的完整代码
附上模板标识码位置
content/templates/limh.me/js/pjax.min.js

修复后门文件后,务必重新安装Emlog程序,以生成新的AUTH_KEY
模板下载和修复文件(Colorful2.6-patch.zip)[https://pan.baidu.com/s/1dGA8OKx](覆盖到模板目录即可)
原创文章,作者:Y4er,未经授权禁止转载!如若转载,请联系作者:Y4er