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实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python读写zip压缩文件的方法
Aug 29 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
python进程和线程用法知识点总结
May 28 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
python实现斗地主分牌洗牌
Jun 22 Python
Django nginx配置实现过程详解
Sep 10 Python
python简单验证码识别的实现过程
Jun 20 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
公休请假条
2014/04/11 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
mysql优化
2021/04/06 MySQL
Python 键盘事件详解
2021/11/11 Python
介绍一下28个JS常用数组方法
2022/05/06 Javascript
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android