python脚本实现查找webshell的方法


Posted in Python onJuly 31, 2014

本文讲述了一个python查找 webshell脚本的代码,除了查找webshell功能之外还具有白名单功能,以及发现恶意代码发送邮件报警等功能,感兴趣的朋友可以自己测试一下看看效果。

具体的功能代码如下:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import sys
import re
import smtplib

#设定邮件
fromaddr = "smtp.qq.com"
toaddrs = ["voilet@qq.com"]
username = "voilet"
password = "xxxxxx"


#设置白名单
pass_file = ["api_ucenter.php"]

#定义发送邮件函数
def sendmail(toaddrs,sub,content):
  '发送邮件模块'
  # Add the From: and To: headers at the start!
  msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
      % (fromaddr, ", ".join(toaddrs), sub))
  msg += content
  server = smtplib.SMTP('mail.funshion.com', 25,)
  server.login(username, password)
  server.sendmail(fromaddr, toaddrs, msg)
  server.quit()

#设置搜索特征码
rulelist = [
  '(\$_(GET|POST|REQUEST)\[.{0,15}\]\(\$_(GET|POST|REQUEST)\[.{0,15}\]\))',
  '(base64_decode\([\'"][\w\+/=]{200,}[\'"]\))',
  'eval\(base64_decode\(',
  '(eval\(\$_(POST|GET|REQUEST)\[.{0,15}\]\))',
  '(assert\(\$_(POST|GET|REQUEST)\[.{0,15}\]\))',
  '(\$[\w_]{0,15}\(\$_(POST|GET|REQUEST)\[.{0,15}\]\))',
  '(wscript\.shell)',
  '(gethostbyname\()',
  '(cmd\.exe)',
  '(shell\.application)',
  '(documents\s+and\s+settings)',
  '(system32)',
  '(serv-u)',
  '(提权)',
  '(phpspy)',
  '(后门)',
  '(webshell)',
  '(Program\s+Files)',
  'www.phpdp.com',
  'phpdp',
  'PHP神盾',
  'decryption',
  'Ca3tie1',
  'GIF89a',
  'IKFBILUvM0VCJD\/APDolOjtW0tgeKAwA',
  '\'e\'\.\'v\'\.\'a\'\.\'l\'',
]

def Scan(path):
  for root,dirs,files in os.walk(path):
    for filespath in files:
      isover = False
      if '.' in filespath:
        ext = filespath[(filespath.rindex('.')+1):]
        if ext=='php' and filespath not in pass_file:
          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])
              print '\n\n'
              sendmail(toaddrs,"增值发现恶意代码",'文件:'+os.path.join(root,filespath)+"\n" + '恶意代码:'+str(result[0]))
              break

try:
  if os.path.lexists("/home/web_root/"):
    print('\n\n开始扫描:'+ "/home/web_root/")
    print('        可疑文件         ')
    print('########################################')
    Scan("/home/web_root/")
    print('提示:扫描完成--~')
  else:
    print '提示:指定的扫描目录不存在--- '
except IndexError:
  print "请指定扫描文件目录"
Python 相关文章推荐
Python中DJANGO简单测试实例
May 11 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
Python2与Python3的区别详解
Feb 09 Python
Python网页解析器使用实例详解
May 30 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
Python字符串查找基本操作代码案例
Oct 27 Python
用python删除java文件头上版权信息的方法
Jul 31 #Python
Python datetime时间格式化去掉前导0
Jul 31 #Python
python处理文本文件并生成指定格式的文件
Jul 31 #Python
Python中关键字is与==的区别简述
Jul 31 #Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 #Python
Python中zip()函数用法实例教程
Jul 31 #Python
Python中apply函数的用法实例教程
Jul 31 #Python
You might like
php批量上传的实现代码
2013/06/09 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
js继承实现方法详解
2016/12/16 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python实现电子词典
2020/03/03 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
房地产销售大学生自我评价分享
2013/11/11 职场文书
农业开发项目建议书
2014/05/16 职场文书
服务标语口号
2014/07/01 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
儿园租房协议书范本
2014/12/02 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python