阿里云云盾发现WebShell处理过程
2016-09-29 by dongnan
问题描述
触发报警

检查文件
file 172*
17285897515.jpg: PHP script text
17290674875.jpg: ASCII text, with very long lines, with no line terminators
紧急处理
- 移除该 web目录,外部无法访问。
- 使用脚本遍历日志,没有找到相关访问记录。
- 检查业务系统,没有发现异常登陆信息。
- 遍历上传目录所有图片,发现其它异常文件移除。
shell命令
find ./ -type f > files.txt
while read line ;do file $line >> upload.txt ;done < files.txt
awk '!/csv|PNG image data,|JPEG image data,|GIF image data,|conclusion.txt/ && /text/ {print $1}' upload.txt
后续处理
这是一个比较老的 php 解析漏洞 ,经和开发同学确认,是做安全渗透测试时上传的测试文件,测试结束后没有删除它。接下来验证下这个 php木马程序是否能够执行。 
开始之前
阿里云.云盾发现了一个伪装图片的后门文件,虽然是 php 木马程序,但是被 php 拒绝执行。 
环境描述
- php-5.6.x
- 使用 docker创建一个测试用的容器在其内部进行测试操作。
测试
第1次测试,直接访问这个木马程序伪装的图片。
浏览器访问,返回 200 状态码。
curl -IL https://ywwd.net/upload/20160411/17285897515.jpg
HTTP/1.1 200 OK
nginx 日志
10.0.100.9 - - [22/Sep/2016:15:27:25 +0800] "GET /upload/20160411/17285897515.jpg HTTP/1.1" 200 0 "-"
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 123.124.X.X -
注意
- nginx日志中 最后的字段- -这个对应的是- $upstream_response_time变量, 表示上游- php-fpm执行的时间。
- 如果是 -则表示非php文件,也就是代表这请求没有到达php,状态为 200表示 Nginx 成功执行, 浏览器割裂的图片无法显示,这是正常的因为它是伪装的php木马程序,而非图片。
第2次测试,利用文件类型错误解析漏洞
浏览器访问,返回 403 状态码
curl  https://ywwd.net/upload/20160411/17285897515.jpg/1.php
Access denied.
nginx 日志
10.0.100.9 - - [22/Sep/2016:15:21:21 +0800] "GET /upload/20160411/17285897515.jpg/1.php HTTP/1.1" 403 46 "-" 
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 123.124.x.x 0.007
php 日志
[22-Sep-2016 15:21:21] WARNING: [pool www] child 2545 said into stderr: 
"NOTICE: Access to the script '/path/upload/20160411/17285897515.jpg' 
has been denied (see security.limit_extensions)"
注意
- 在原有 url的基础上,添加了/1.php,而 nginx日志最后的字段不再是-,而是0.007表示上游的php-fpm执行时间。
- 返回了 403与Access denied关键字。
- 而 php日志,则提示的更明显php-fpm拒绝了本次的执行,并要求你查看security.limit_extensions选项。
第3次测试,抽风模式。
调整 php配置文件 security.limit_extensions = .php .jpg
如愿以偿,终于执行了php木马程序。

小结
基于上面的3个小测试,如果不是作死,主动配置 php-fpm security.limit_extensions = .jpg,是无法执行伪这个装图片的 php木马程序的。