检测php网站是否已经被攻破的方法

原文地址:http://drops.wooyun.org/web/2718                     分类:web安全
(这篇文章的侧重点是利用系统命令)
一、查看访问日志
看是否有文件上传操作(POST方法),

[plain] view plain copy

  1. IPREMOVED - - [01/Mar/2013:06:16:48 -0600] "POST/uploads/monthly_10_2012/view.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
  2. IPREMOVED - - [01/Mar/2013:06:12:58 -0600] "POST/public/style_images/master/profile/blog.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"

nginx默认记录的日志格式为:

[plain] view plain copy

  1. access_log logs/access.log

[plain] view plain copy

  1. access_log logs/access.log combined;

nginx默认记录日志的位置为:
nginx安装目录/log/

二、查找含有恶意php代码的文件
2.1 查找最近发生变化的php文件

[plain] view plain copy

  1. find . -type f -name ‘*.php‘ -mtime -7

-type f 表示搜索正常的一般文件   -mtime -7 表示7*24小时内修改的文件
结果可能如下:
./uploads/monthly_04_2008/index.php
./uploads/monthly_10_2008/index.php
./uploads/monthly_08_2009/template.php
./uploads/monthly_02_2013/index.php
2.2 查找文件中是否存在疑似代码

[plain] view plain copy

  1. find . -type f -name ‘*.php‘ | xargs grep -l "eval *(" --color

(*代表任意个空格)

[plain] view plain copy

  1. find . -type f -name ‘*.php‘ | xargs grep -l "base64_decode *(" --color
  2. find . -type f -name ‘*.php‘ | xargs grep -l "gzinflate *(" --color
  3. find . -type f -name ‘*.php‘ | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color

注解:很多命令不支持管道传递参数,而实际上又需要这样,所以就用了xargs命令,这个命令可以用来管道传递参数;grep -l表示只包含某个字符串的文件名,如果去掉-l则会显示匹配特定字符串的行内容
几个特殊字符串的意义: eval()把字符串按照php代码来执行,是最常见的php一句话木马
base64_decode() 将字符串base64解码,攻击的时候payload是base64编码,则这个函数就有用武之地了
gzinflate() 将字符串解压缩处理,攻击的时候payload用gzdeflate压缩之后,使用这个函数进行解压缩
str_rot13() 对字符串进行rot13编码
也可以使用正则表达式来搜索文件,查找可以代码:

[plain] view plain copy

  1. find . -type f -name ‘*.php‘ | xargs egrep -i "(mail|fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *("

下面解释webshell常用的函数:
mail():可用来向网站用户发送垃圾邮件
fsockopen():打开一个网络连接或者一个unix套接字连接,可用于payload发送远程请求
pfsockopen():和fsockopen()作用类似
stream_socket_client():建立一个远程连接,例子如下:

[php] view plain copy

  1. <?php
  2. $fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
  3. if (!$fp) {
  4. echo "$errstr ($errno)<br />\n";
  5. } else {
  6. fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
  7. while (!feof($fp)) {
  8. echo fgets($fp, 1024);
  9. }
  10. fclose($fp);
  11. }
  12. ?>

exec():命令执行函数
system():同exec()
passthru():同exec()
preg_replace()正则表达式由修饰符"e"修饰的时候,替换字符串在替换之前需要按照php代码执行,这种情况也需要考虑到,这种情况可采用这种以下扫搜:

[plain] view plain copy

  1. find . -type f -name ‘*.php‘ | xargs egrep -i "preg_replace *\(([‘|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color

三、比较代码文件
这种情况需要有一份干净的代码,这份代码和正在使用的代码进行比较。例如

[plain] view plain copy

  1. diff -r wordpress-clean/ wordpress-compromised/ -x wp-content

上面的例子是比较wordpress-clean/ 和wordpress-comprised/两个目录,并且目录里面的wp-content/子目录不比较

四、搜寻可写的目录
看这个目录里面是否有可疑文件,如下脚本查找权限为777的目录是否存在php文件

[plain] view plain copy

  1. search_dir=$(pwd)
  2. writable_dirs=$(find $search_dir -type d -perm 0777)
  3. for dir in $writable_dirs
  4. do
  5. #echo $dir
  6. find $dir -type f -name ‘*.php‘
  7. done

黑客经常在jpg文件中插入php代码,因此在查询这些目录的时候也要查询jpg文件:

[plain] view plain copy

  1. find wp-content/uploads -type f -iname ‘*.jpg‘ | xargs grep -i php

注意:-iname 表示文件名不区分大小写     grep -i 也表示不区分大小写

五、检测iframe标签
黑客经常做的是嵌入iframe标签,因此可以查看网页的源代码,并且搜索其中是否存在iframe标签,可使用如下命令:

[plain] view plain copy

  1. grep -i ‘<iframe‘ mywebsite.txt

对于动态生成的页面,可使用ff的Live HTTP Headers插件,下载到源码之后再查找是否存在iframe标签

六、查找数据库中是否存在敏感字符串
包括%base64_%、%eval(%<等上面提到的一些关键词

七、检查.htaccess文件
是否包含了auto_prepend_file和auto_append_file,使用如下命令

[plain] view plain copy

  1. find . -type f -name ‘\.htaccess‘ | xargs grep -i auto_prepend_file
  2. find . -type f -name ‘\.htaccess‘ | xargs grep -i auto_append_file

auto_prepend_file的作用是加载当前脚本文件之前,先加载的php脚本 auto_append_file的作用是加载当前脚本文件之后,再加载的php脚本。黑客如果这么修改了.htaccess文件,那么可以在访问.htaccess目录的php脚本时,加载上自己想要加载的恶意脚本 .
htaccess文件还可以被用来把访问网站的流量劫持到黑客的网站,

[plain] view plain copy

  1. RewriteCond %{HTTP_USER_AGENT}^.*Baiduspider.*$
  2. Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]

将baidu爬虫的访问重定向到黑客的网站(包含HTTP_USER_AGENT和http关键字)

[plain] view plain copy

  1. RewriteCond %{HTTP_REFERER} ^.*baidu.com.*$ Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]

将来自baidu搜索引擎的流量重定向到黑客的网站(包含HTTP_REFERER和http关键字) 为了查看网站是否被.htaccess修改导致流量劫持,可以在搜索.htaccess文件的时候采用如下命令:

[plain] view plain copy

  1. find . -type f -name ‘\.htaccess‘ | xargs grep -i http;
  2. find . -type f -name ‘\.htaccess‘ | xargs grep -i HTTP_USER_AGENT;
  3. find . -type f -name ‘\.htaccess‘ | xargs grep -i HTTP_REFERER
时间: 2024-10-13 11:41:42

检测php网站是否已经被攻破的方法的相关文章

怎么用啊D注入工具检测asp网站注入漏洞

1. http://jingyan.baidu.com/article/4d58d541ce04ae9dd4e9c0f9.html 2. asp网页很怕注入漏洞,特别是比较老的企业网站,很多都有注入漏洞,怎么用啊D注入工具检测asp网站注入漏洞? 啊D注入工具是一种主要用于SQL的注入工具,由彭岸峰开发,使用了多线程技术,能在极短的时间内扫描注入点.使用者不需要经过太多的学习就可以很熟练的操作.并且该软件附带了一些其它的工具,可以为使用者提供极大的方便. 工具/原料 啊D注入工具 DSQLToo

测试网站访问速度的5个方法(转)

网页载入速度对于一个网站来讲很关键,Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中,也就是说如果你的网站有足够的内容,而且载入速度比别人的网站更快一步的话,那么你就是获得更好的排名.那么下面就赶快测试你的网站,提高网站访问速度吧. 1:用Ping命令简单测网站速度的方法 Ping可以用来检查网络是否通畅或者网络连接速度,点击开始→运行 在运行中输入“cmd”回车或点击确定,输入ping www.你的网址.com 就可以了. (新手只需注意本图红框里的含义即可) Ping结

保留上次访问网站的时间的几种方法

这里保留上次访问网站的时间的三种方法.即用cookie\session\servletContext.其实这三种方法的思路都是一样的. 思路如下: 把你访问网站的时间作为在上述三个对象的属性值,然后再把上述三个对象的属性值给读出来.而这个属性值就是你访问网站时的时间. 下面的代码是这样写的:把三种方法的存放属性值放在一个方法中分别:注明了cookie方法.session方法.servletContext方法.而读取属性值用同样的方式放在了同一个类中. //存放属性(即存放时间的代码如下) 1 p

分享发布网站外链的几种方法

分享发布网站外链的几种方法 俗话说:"内容为王.外链为皇".根据得易搜分类信息网的情况,可见外链关于网站的重要程度.很多新手站长为此煞费苦心.请认真看完本文.坚持做稳定添加肯定能有意想不到的收获. 一.站点友谊衔接 友谊衔接是一种简单.也是最原始进步权重的办法.传奇小子就不多讲细致操作啦.关键要懂得选择优秀的站点交流.避免由于不好的友谊链接可能托你后腿.招致引擎降低你权重.所以大家在交流友谊链接的时分一定要多看看对方网站的内容.对每个交流的站点要逐一审核.定期查看能否稳定能否降权. 二

浅谈小网站SEO的几点建设方法

现在很多小企业也开始建站,那该怎样做好小企业的seo呢? 1.通过seo树立品牌 对于小企业来说,当然不能做到像大型企业一样品牌人人皆知.但是与其他同等小企业.竞争对手相比,如果能够在搜索引擎结果中表现良好,就可以树立 良好的形象.所谓"排名第一就是品牌",在搜索引擎中排名第一就能让客户感觉到企业是一个充满活力.办事认真.积极上进的组织,客户第一面就打上了良 好的印象分.排名第一带来的客户在互联网真是数不甚数.那么如何通过seo树立品牌呢?第一,要使自己的企业名.地区行业关键字排名第一

phpcms v9网站搬家更换域名的详细方法(转)

修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名. 进入后台设置-->站点管理,对相应的站点的域名修改为新域名. 点击后台右上角的"更新缓存"按钮更新系统缓存.进入内容-->附件管理-->附件地址替换.把附件地址批量的替换为新的地址. 内容-->批量更新URL .把所有的文章的地址都更新一下. 内容-->管理栏目-->更新栏目缓存.将栏目的链接地址改为新地址.如果你的网站是静态页面,则需要把全站

PHP网站验证码图片不显示解决方法

找到php.ini配置文件之后,双击打开,hp_gd2.dll,找到如下图1-2所示.查看extension=php_gd2.dll前面是否有;号,如果有的话,去除,保存.编者注:如果php.ini是在系统目录下的话,保存之后重起电脑才生效,如果是系统变量里直接指定的话,重起IIS服务器或者重起apache服务器即可生效(不用重起服务器电脑). 如果找不到php.ini文件,在别的电脑拷贝一个即可. PHP网站验证码图片不显示解决方法

OpenCV运动目标检测——帧间差,混合高斯模型方法

一.简单的帧间差方法 帧差法是在连续的图像序列中两个或三个相邻帧间采用基于像素的时间差分并且闽值化来提取图像中的运动区域. 代码: int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture("bike.avi"); if(!capture.isOpened()) return -1; double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; Mat

网站性能工具Yslow的使用方法

Yslow是雅虎开发的基于网页性能分析浏览器插件,从年初我使用了YSlow后,改变了博客模板大量冗余代码,不仅提升了网页的打开速度,这款插件还帮助我分析了不少其他网站的代码,之前我还特意写了提高网站速度的秘籍,就是通过这款插件分析得出的.网络上已经有不少Yslow使用说明了,本文我想介绍下我使用Yslow的方法和一些别人没提到的小技巧. Yslow的安装方法 现在Yslow已经有很多版本了,本文介绍的是3.0.4最新版,打开Yslow官网就能看到有四个版本可供选择:火狐(firefox)浏览器.