Moke|墨客

 找回密码
 立即注册
搜索
查看: 8201|回复: 0

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

[复制链接]

3636

主题

0

回帖

3681

积分

超级版主

Rank: 8Rank: 8

积分
3681
发表于 2016-5-9 13:55:23 | 显示全部楼层 |阅读模式



    0x01 查看访问日志
  看是否有文件上传操作(POST方法),
IPREMOVED--[01/Mar/2013:06:16:48-0600]"POST/uploads/monthly_10_2012/view.php HTTP/1.1"20036"-""Mozilla/5.0"
IPREMOVED--[01/Mar/2013:06:12:58-0600]"POST/public/style_images/master/profile/blog.php HTTP/1.1"20036"-""Mozilla/5.0"  
  nginx默认记录的日志格式为:
access_log logs/access.log  

access_log logs/access.log combined;  
  nginx默认记录日志的位置为:
nginx安装目录/log/  
0x02 查找含有恶意php代码的文件
  2.1 查找最近发生变化的php文件
find.-typef-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 查找文件中是否存在疑似代码
find.-typef-name'*.php'|xargsgrep-l"eval *("--color  
  (*代表任意个空格)
find.-typef-name'*.php'|xargsgrep-l"base64_decode *("--color
find.-typef-name'*.php'|xargsgrep-l"gzinflate *("--color
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编码
  也可以使用正则表达式来搜索文件,查找可以代码:
find.-typef-name'*.php'|xargsegrep-i"(mail|fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *("  
  下面解释webshell常用的函数:
  mail():可用来向网站用户发送垃圾邮件
  fsockopen():打开一个网络连接或者一个unix套接字连接,可用于payload发送远程请求
  pfsockopen():和fsockopen()作用类似
  stream_socket_client():建立一个远程连接,例子如下:
<?php
$fp=stream_socket_client("tcp://www.example.com:80",$errno,$errstr,30);  
if(!$fp){  
echo"$errstr($errno)<br/>\n";  
}else{  
fwrite($fp,"GET/HTTP/1.0\r\nHost:www.example.com\r\nAccept:*/*\r\n\r\n");  
while(!feof($fp)){  
echofgets($fp,1024);  
}  
fclose($fp);  
}  
?>  
  exec():命令执行函数
  system():同exec()
  passthru():同exec()
  preg_replace()正则表达式由修饰符"e"修饰的时候,替换字符串在替换之前需要按照php代码执行,这种情况也需要考虑到,这种情况可采用这种以下扫搜:
find.-typef-name'*.php'|xargsegrep-i"preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *,"--color  
0x03 比较代码文件
  这种情况需要有一份干净的代码,这份代码和正在使用的代码进行比较。例如
diff-rwordpress-clean/wordpress-compromised/-xwp-content  
  上面的例子是比较wordpress-clean/ 和wordpress-comprised/两个目录,并且目录里面的wp-content/子目录不比较
0x04 搜寻可写的目录
  看这个目录里面是否有可疑文件,如下脚本查找权限为777的目录是否存在php文件
#!/bin/bash
search_dir=$(pwd)
writable_dirs=$(find$search_dir-typed-perm0777)
fordirin$writable_dirs
  do
  #echo $dir
  find$dir-typef-name'*.php'
done  
  黑客经常在jpg文件中插入php代码,因此在查询这些目录的时候也要查询jpg文件:
findwp-content/uploads-typef-iname'*.jpg'|xargsgrep-iphp  
  注意:-iname 表示文件名不区分大小写 grep -i 也表示不区分大小写
0x05 检测iframe标签
  黑客经常做的是嵌入iframe标签,因此可以查看网页的源代码,并且搜索其中是否存在iframe标签,可使用如下命令:
grep-i'<iframe'mywebsite.txt  
  对于动态生成的页面,可使用ff的Live HTTP Headers插件,下载到源码之后再查找是否存在iframe标签
0x06 查找数据库中是否存在敏感字符串
  包括%base64_%、%eval(%<等上面提到的一些关键词
0x07 检查.htaccess文件
  是否包含了auto_prepend_file和auto_append_file,使用如下命令
find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file
find . -type f -name '\.htaccess' | xargs grep -i auto_append_file  
  auto_prepend_file的作用是加载当前脚本文件之前,先加载的php脚本 auto_append_file的作用是加载当前脚本文件之后,再加载的php脚本。黑客如果这么修改了.htaccess文件,那么可以在访问.htaccess目录的php脚本时,加载上自己想要加载的恶意脚本.
  htaccess文件还可以被用来把访问网站的流量劫持到黑客的网站,
RewriteCond %{HTTP_USER_AGENT}^.*Baiduspider.*$
Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]  
  将baidu爬虫的访问重定向到黑客的网站(包含HTTP_USER_AGENT和http关键字)
RewriteCond %{HTTP_REFERER} ^.*baidu.com.*$ Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]  
  将来自baidu搜索引擎的流量重定向到黑客的网站(包含HTTP_REFERER和http关键字) 为了查看网站是否被.htaccess修改导致流量劫持,可以在搜索.htaccess文件的时候采用如下命令:
find . -type f -name '\.htaccess' | xargs grep -i http;
find . -type f -name '\.htaccess' | xargs grep -i HTTP_USER_AGENT;
find . -type f -name '\.htaccess' | xargs grep -i HTTP_REFERER  
新浪微博
<img alt="SosoImg"/>

imlonghao2015-06-10 11:48:59  
  挺实用的教程

看风者2014-08-20 12:33:22  
  好主意

isno2014-08-04 09:01:00  
  还应该检查php.ini吧?auto_prepend_file什么的也有在这里设置的

DragonEgg2014-08-02 21:46:30  
  遍历各个文件MD5咋样= =!

小秦2014-08-02 00:46:54  
  其实我觉得这些都是扯蛋, 真正的解决方案可以尝试使用rsync,将自己本地备份的内容与服务器上的进行对比,先使用 -n 参数,把不同的文件列出来,然后单个审查,然后哪些文件是不是自己的,有没有被改过,一清二楚. 在确认服务器上的文件没有问题的时候,再将文件同步至本地,然后定期进行该操作. 对于那些查log, 遍历文件找关键字的, 我还是觉得对比文件来的靠谱些. 即只有第3点可以考虑,但第3点,只支持一个目录与另一个目录对比,不支持本地目录与服务器目录比对.

动后河2014-08-01 19:04:56  
  webshell大马频繁使用的关键字之一 : pass 没想到吧

cfc4n2014-08-01 13:39:20  
  可以试试用Pecker Scanner来做webshell检测。 https://github.com/cfc4n/pecker

spiderman2014-08-01 13:37:14  
  对,变形的webshell确实是不能直接检测,但是变形的webshell也是后来添加的php文件或者添加到了已经存在的php文件中,这些文件也是最近修改过的文件,所以在这些文件里面加上变形webshell的检测就可以了,至于变形webshell怎么检查,那只能根据webshell变形来检查了

chock2014-08-01 13:31:02  
  那对于变形变种加密的后门貌似就不会被检测到特征
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 

 

快速回复 返回顶部 返回列表