论坛首页 编程语言技术论坛

php网站webshell检查脚本

浏览 2576 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-16  
参考了一些别人写的脚本,自己用Python写的一个小脚本,简单实用。学习Python为主。
1、检查你的php文件是否是webshell程序,也可以检查危险的函数。
2、可以检查图片文件,但是可能会有误报。


#!/usr/bin/python
#coding=utf-8

#程序描述:webshell检查工具
#版本:1.0.0
#作者:sapling
#创建日期:2009-12-16
#修改原因:
#修改日期:
#修改者:
#使用方法:
#        输入参数:
#        1、第一个参数为被检查文件夹
#        2、第一个参数后跟要检查的文件后缀名,检查多个后缀以空格分开(默认.php .inc)。
#        example:
#        ./webshellChecker ./
#        ./webshellChecker ./ .gif .jpg


import os,sys
import re,time
from stat import ST_MTIME
ISOTIMEFORMAT = '%Y-%m-%d %X'

keywords = (
            (r"eval\(\$\_POST","find php muma!!!"),
            (r"(system|shell_exec|exec|popen)","find php exec func!!!"),
            )

def checkfile(filename):
    try:
        fp = open(filename)
    except:
        print "'%s' file open deny"%filename
    else:
        contents = fp.read()
        mtime = time.strftime(ISOTIMEFORMAT,time.gmtime(os.stat(filename)[ST_MTIME]))
        for keyword in keywords:
            if re.search(keyword[0],contents,re.I):
                log = "%s  |  %s  |  %s"%(filename,mtime,keyword[1])
                print log
    fp.close()

def check(dirname,exts):
    try:
        ls = os.listdir(dirname)
    except:
        print "'%s' dir access deny"%dirname
    else:
        for item in ls:
            temp = os.path.join(dirname,item)
            if(os.path.isdir(temp)):
                check(temp,exts)
            else:
                ext = os.path.splitext(temp)[1].lower()
                if ext in exts:
                    checkfile(temp)


if __name__ == "__main__":
    print "php webshell checker for python!"
    print "by sapling"
    print "2009-12-16"
    if len(sys.argv)<2:
        print """输入参数:
        1、被检查文件夹
        2、要检查的文件后缀名,检查多个后缀以空格分开(默认.php .inc)。
        example:
        ./webshellChecker ./
        ./webshellChecker ./ .gif .jpg
        """
    else:
        dir = sys.argv[1]
        exts = ['.php','.inc']
        if len(sys.argv)>=3:
            exts += sys.argv[2:]
        print "Check dir is '%s' | ext is %s"%(dir,exts)
        print "Start check"
        
        if os.path.exists(dir):
            check(dir,exts)
        else:
            print "dir: '%s' not exists!"%dir
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics