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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
Python读写文件方法总结
Jun 09 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
python实现五子棋小游戏
Mar 25 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
Python 实现Mac 屏幕截图详解
Oct 05 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
与数据库连接
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php遍历数组的方法分享
2012/03/22 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
PHP读取Excel类文件
2017/05/15 PHP
最短的IE判断代码
2011/03/13 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python 操作hive pyhs2方式
2019/12/21 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
Python更换pip源方法过程解析
2020/05/19 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
公司门卫管理制度
2014/02/01 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
运动会开幕式主持词
2015/07/01 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
Go获取两个时区的时间差
2022/04/20 Golang