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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
在Django中创建第一个静态视图
Jul 15 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python获取中文字符串长度的方法
Nov 14 Python
python交互界面的退出方法
Feb 16 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
Python:slice与indices的用法
Nov 25 Python
centos7中安装python3.6.4的教程
Dec 11 Python
提高python代码运行效率的一些建议
Sep 29 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
python本地文件服务器实例教程
May 02 Python
用Python将GIF动图分解成多张静态图片
Jun 11 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP中设置时区方法小结
2012/06/03 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
python实现梯度下降算法
2020/03/24 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python向excel中写入数据的方法
2019/05/05 Python
python 实现多维数组(array)排序
2020/02/28 Python
Python安装Bs4的多种方法
2020/11/28 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
应届毕业生自我评价分享
2013/12/15 职场文书
医学生自我评价
2014/01/27 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
弄虚作假心得体会
2014/09/10 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
横空出世观后感
2015/06/09 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Python实现随机生成迷宫并自动寻路
2021/06/13 Python