使用说明:

1.查杀指定路径:python webshell.py 路径

2.按时间查找文件:python webshell.py 路径 “2013-09-28 00:00:00″

# -*- coding: utf-8 -*-

import os
import sys
import re
import time

rulelist = [
'(\$_(GET|POST|REQUEST)\[.{0,15}\]\s{0,10}\(\s{0,10}\$_(GET|POST|REQUEST)\[.{0,15}\]\))',
'(base64_decode\([\'"][\w\+/=]{200,}[\'"]\))',
'(eval(\s|\n)*\(base64_decode(\s|\n)*\((.|\n){1,200})',
'((eval|assert)(\s|\n)*\((\s|\n)*\$_(POST|GET|REQUEST)\[.{0,15}\]\))',
'(\$[\w_]{0,15}(\s|\n)*\((\s|\n)*\$_(POST|GET|REQUEST)\[.{0,15}\]\))',
'(call_user_func\(.{0,15}\$_(GET|POST|REQUEST))',
'(preg_replace(\s|\n)*\(.{1,100}[/@].{0,3}e.{1,6},.{0,10}\$_(GET|POST|REQUEST))',
'(wscript\.shell)',
'(cmd\.exe)',
'(shell\.application)',
'(documents\s+and\s+settings)',
'(system32)',
'(serv-u)',
'(phpspy)',
'(jspspy)',
'(webshell)',
'(Program\s+Files)'
]

def Scan(path):
print (' 可疑文件 ')
print ('################################')
for root,dirs,files in os.walk(path):
for filespath in files:
if os.path.getsize(os.path.join(root,filespath)) < 1024000:
file = open (os.path.join(root,filespath))
filestr = file.read()
file.close()
for rule in rulelist:
result = re.compile(rule).findall(filestr)
if result:
print ('文件:'+os.path.join(root,filespath))
print ('恶意代码:'+str(result[0])[0:200])
print ('最后修改时间:'+time.strftime('%Y-%m-%d %H:%M:%S', time.localtim))
print ('\n\n')
break

#由文件最后修改时间扫描
def _Get_Time_Files(_path,_time):
_time = time.mktime(time.strptime(_time,'%Y-%m-%d %H:%M:%S'))
print ('\n')
print (' 可疑文件 ')
print ('#############################')
print ('文件路径 最后修改时间 \n')

for _root,_dirs,_files in os.walk(_path):
for _file in _files:
if _file.find('.') != -1:
_txt = _file[(_file.rindex('.')+1):].lower()

if _txt == 'php' or _txt == 'jsp':
_File_Time = os.path.getmtime(_root+'/'+_file)
if _File_Time > _time:
print (_root+'/'+_file+' '+time.strftime('%Y-%m-%d %H:%M:%S', time))

if len(sys.argv) != 3 and len(sys.argv) != 2:
print ('参数错误:')
print ('\t按恶意代码查杀:'+sys.argv[0]+' 目录名')
print ('\t按修改时间查杀:'+sys.argv[0]+' 目录名 修改时间(格式:"2013-09-09 12:00:00")')

if os.path.lexists(sys.argv[1]) == False:
print ('提示:指定的扫描目录不存在!')

print ('\n\n开始查杀:'+sys.argv[1])

if len(sys.argv) == 2:
Scan(sys.argv[1])
else:
_Get_Time_Files(sys.argv[1],sys.argv[2])

print ('提示:完成查杀,哈哈!')

linux下python版webshell后门查杀工具的更多相关文章

  1. Linux系统木马后门查杀方法详解

    木马和后门的查杀是系统管理员一项长期需要坚持的工作,切不可掉以轻心.以下从几个方面在说明Linux系统环境安排配置防范和木马后门查杀的方法: 一.Web Server(以Nginx为例) 1.为防止跨 ...

  2. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

  3. Linux下python安装升级详细步骤 | Python2 升级 Python3

    Linux下python升级步骤  Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...

  4. Linux下python安装升级详细步骤 | Python2 升级 Python3 转载

    Linux下python升级步骤  Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...

  5. DedeCMS顽固木马后门专杀工具V2.0实现方式研究

    catalog . 安装及使用方式 . 检查DEDECMS是否为最新版本 . 检查默认安装(install)目录是否存在 . 检查默认后台目录(dede)是否存在 . 检查DedeCMS会员中心是否关 ...

  6. Remmina:一个 Linux 下功能丰富的远程桌面共享工具(转载)

    Remmina:一个 Linux 下功能丰富的远程桌面共享工具 作者: Aaron Kili 译者: LCTT geekpi | 2017-05-10 09:05   评论: 2 收藏: 4 Remm ...

  7. Linux下制作Windows启动U盘的工具

    Linux下制作Windows启动U盘的工具 很多人说Linux下制作Windwos启动盘要用GRUB4DOS建立引导,其实不用,有专门的工具的,就像Windows下有Rufus制作Linux启动U盘 ...

  8. linux下python多版本共存

    为何要安装python,linux下不是已经集成了python吗? 大多数linux系统都集成了python,但是他们的版本太低了.不能满足我们的需求,尤其是好多系统居然仍停留在 python2.6. ...

  9. linux下python启动第三方程序,并控制关闭

    import subprocess import os import signal p = subprocess.Popen("recordmydesktop -o /home/test/t ...

随机推荐

  1. U3D physics总结

    物理系统基于collider, 没有collider的物体不会发生任何主动和被动的物理交互,也不会产生trigger相关消息. 当且仅当A和B都有碰撞体时,两者才有可能发生交互,才有可能产生trigg ...

  2. python 调用 shell 命令方法

    python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等   ...

  3. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    我用过的编辑器不少,真不少- 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号.它小巧绿色且速度非 ...

  4. CSS 实现加载动画之四-圆点旋转

    圆点旋转也是加载动画中经常用到的.其实现方式和菊花旋转一样,只不过一个是线条形式,一个是圆点形式.圆点按照固定的旋转角度排列,加上延时的改变透明度的动画就可以实现.这个实现也比较简单. 1. 动画截图 ...

  5. UISwitch和UIActivity的使用

    - (void)viewDidLoad{    [super viewDidLoad];    //创建一个开关控件,苹果给它固定的size(79*27),frame更改size无效    //继承于 ...

  6. IOS开发之—— 客服QQ(调用qq网页聊天),客服热线(拨打电话)

    @property (nonatomic,strong) UIButton *but;@property (nonatomic,strong) UIButton *but1;@property (st ...

  7. ios UILocalNotification的使用

    iOS下的Notification的使用 Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iO ...

  8. 闭包拾遗 & 垃圾回收机制

    闭包拾遗 之前写了篇<闭包初窥>,谈了一些我对闭包的浅显认识,在前文基础上,补充并且更新些对于闭包的认识. 还是之前的那个经典的例子,来补充些经典的解释. function outerFn ...

  9. IE firefox 兼容性整理

    1.尽量用jquery操作. 2.jquery取值时要用准确的方法,attr(), val(), text(), html(). 例如: <span value="a"> ...

  10. Node服务一键离线部署

    背景说明 项目测试通过,到了上线部署阶段.部署的机器安全限制比较严格,不允许访问外网.此外,没有对外网开放ssh服务,无法通过ssh远程操作. 针对上面提到的两条限制条件,通过下面方式解决: 无法访问 ...