Python实现的检测网站挂马程序


Posted in Python onNovember 30, 2014

系统管理员通常从svn/git中检索代码,部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比对之前生成MD5值快速查找去那些文件被更改,为了使系统管理员第一时间发现,可结合crontab或nagios等工具。

程序测试如下:

# python check_change.py

  Usage: python check_change.py update /home/wwwroot
      python check_change.py check /home/wwwroot

# python check_change.py update /data/www #生成站点的md5值
# echo ' ' > /data/www/sitemap.html #测试清空文件
# rm -rf /data/www/sitemap.xml #测试删除文件
# python check_change.py check /data/www #查找那些文件被篡改
/data/www/sitemap.xml
/data/www/sitemap.html

代码如下(check_change.py):

#!/usr/bin/env python

import os,sys,subprocess

def update(path):
  f = open(file,'w')
  for root,dirs,files in os.walk(path):
    for name in files:
      line = os.path.join(root, name)
      (stdin,stderr) = subprocess.Popen(['md5sum',line],stdout=subprocess.PIPE).communicate()
      f.write(stdin)
  f.close()

def check(path):
  f = open(file,'r')
  for line in f:
    check_ok = """echo '%s' | md5sum -c > /dev/null 2>&1""" % line
    #print check_ok
    if not subprocess.call(check_ok, shell = True) == 0:
      abnormal = line.split()
      print abnormal[1]
  f.close()

def Usage():
  print '''
  Usage: python %s update /home/wwwroot
      python %s check /home/wwwroot
  ''' % (sys.argv[0],sys.argv[0])
  sys.exit()

if len(sys.argv) != 3:
  Usage()

file = 'file.key'
model = sys.argv[1]
path = sys.argv[2]

if os.path.exists(path) == False:
  print "\033[;31mThe directory or file does not exist\033[0m"
  sys.exit()
elif model == 'update':
  update(path)
elif model == 'check':
  check(path)
else:
  Usage()
Python 相关文章推荐
python 实现文件的递归拷贝实现代码
Aug 02 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
Python实现网站表单提交和模板
Jan 15 Python
在python里从协程返回一个值的示例
Feb 19 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python+selenium实现自动化百度搜索关键词
Jun 03 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
Django url 路由匹配过程详解
Jan 22 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 Python
Python利用capstone实现反汇编
Apr 06 Python
Python实现网站文件的全备份和差异备份
Nov 30 #Python
Python3 能振兴 Python的原因分析
Nov 28 #Python
Python3 正在毁灭 Python的原因分析
Nov 28 #Python
关于你不想知道的所有Python3 unicode特性
Nov 28 #Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 #Python
用Python编写一个国际象棋AI程序
Nov 28 #Python
Python中给List添加元素的4种方法分享
Nov 28 #Python
You might like
生成卡号php代码
2008/04/09 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
php解析json数据实例
2014/08/19 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
document.write的几点使用心得
2014/05/14 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
Python实现批量修改文件名实例
2015/07/08 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
python树的同构学习笔记
2019/09/14 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
详解Python设计模式之策略模式
2020/06/15 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
道路交通安全实施方案
2014/03/12 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
医院合作协议书
2014/08/19 职场文书
五年级作文之成长
2019/09/16 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python