原创工具:Python Webshell后门查杀工具源码+C# 服务

  • A+
所属分类:Seay信息安全博客

显示不全请点击全屏阅读

正在学习python,前段时间无聊写的一个小工具,可以直接运行,也可以带参数运行,具体自己玩玩吧,C#也写了一个,但是远远比这个强大,

功能列表:

1.后门查杀——webshell查杀、定时查杀、邮件发送
1、基于危险代码扫描。
2、基于文件最后修改扫描。
3、基于非常规脚本语言扫描。
4、基于畸形文件名或文件夹扫描。

2.实时监控——监控网站指定的几种扩展名文件、定时邮件发送日志附件、邮件安全报警

3.防黑加固——系统补丁、目录权限、系统服务、端口管理、组件管理、账户管理、系统共享、apache/nginx/iis配置检测等

还没设计好logo

2

00

01

00

稍微改进一下,算得上一个产品了。等写完再放出来玩。

下载:点我下载

 

1

#coding=gbk

'''
CodIng By Seay
Blog www.cnseay.com
'''

import os
import sys
import datetime
import time

#----------------------特征码数组-----------------------------------

_php_arr = ['eval(','assert(','disk_total_space','wscript.shell','gethostbyname(','cmd.exe','shell.application','touch(','documents and settings','system32','serv-u','','提权','phpspy','后门']
_asp_arr = ['eval(','execute(','wscript.shell','cmd.exe','touch(','documents and settings','system32','serv-u','','提权','aspspy','后门']
_jsp_arr = ['getHostAddress(','wscript.shell','gethostbyname(','cmd.exe','documents and settings','system32','serv-u','','提权','jspspy','后门']
_aspx_arr = ['eval(','UseShellExecute','wscript.shell','cmd.exe','documents and settings','system32','serv-u','','提权','aspxspy','后门']

#----------------------特征码数组-----------------------------------

#脚本文件集合
_Type_list = ['asp', 'php','aspx','jsp','cer','asa','cdx','ashx','ascx' ]

#扫描函数
#获取路径下指定扩展名文件,判断是否存在后门
def _Get_Files(_type,_path):

    print('\n')
    print('             可疑文件                   ')
    print('##############################################')
    print('    可疑说明        文件路径               \n')

    for _root,_dirs,_files in os.walk(_path):
        for _file in _files:

            if _file.find('.')!=-1:

                _txt = _file[(_file.rindex('.')+1):]

                _Is_Over = False

                if _txt==_type : 

                    #读取文件内容
                    _R_Str = open(os.path.join(_root,_file),'r')
                    _Str = _R_Str.read()
                    _R_Str.close()

                    if _type =='php':    #扫描PHP类型的文件
                        for code in _php_arr:
                            if _Str.find(code)!=-1:
                                print('    可疑代码        '+os.path.join(_root,_file))
                                break
                    elif _type =='jsp':  #扫描JSP类型的文件
                        for code in _jsp_arr:
                            if _Str.find(code)!=-1:
                                print('    可疑代码        '+os.path.join(_root,_file))
                                break
                    elif _type =='asp':  #扫描ASP类型的文件
                        for code in _asp_arr:
                            if _Str.lower().find(code)!=-1:
                                print('    可疑代码        '+os.path.join(_root,_file))
                                break                       
                    elif _type =='aspx':  #扫描ASPX类型的文件
                        for code in _aspx_arr:
                            if _Str.find(code)!=-1:
                                print('    可疑代码        '+os.path.join(_root,_file))
                                break    
                    continue
                else:  #判断是否为其他脚本语言
                    for _File_Type in _Type_list:
                        if _File_Type == _txt:
                            print('    '+_File_Type+' 脚本文件    '+os.path.join(_root,_file))  
                            _Is_Over = True
                            break 

                #如果没有特征码,也不是其他脚本文件,就检测是不是畸形文件
                if _Is_Over == False:
                    __FreakFile_Scan(_root,_file) 
        #畸形目录扫描
        _FreakDir_Scan(_root)

#由文件最后修改时间扫描
def _Get_Time_Files(_type,_path,_time):
    print('\n')
    print('             可疑文件                   ')
    print('#####################################################')
    print('    可疑说明        文件路径           最后修改时间   \n')

    for _root,_dirs,_files in os.walk(_path):
        for _file in _files:
            if _file.find('.')!=-1:

                _txt = _file[(_file.rindex('.')+1):]

                if _txt==_type : 
                    _File_Time =os.path.getmtime(_root+'\\'+_file)
                    if _File_Time>_time:
                        print('    时间符合        '+_root+'\\'+_file+'    '+ time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getmtime(_root+'\\'+_file))))

#畸形文件检测
def __FreakFile_Scan(_root,_FileName):
    if _FileName.find('.')!=-1 and _FileName.count('.')>1:
        if _FileName[_FileName.index('.'):_FileName.rindex('.')].find('php')!=-1:
            print('    畸形文件名      '+os.path.join(_root,_FileName))
    elif _FileName.find('.')!=-1 and _FileName.find(';')!=-1:
        print('    畸形文件名      '+os.path.join(_root,_FileName)) 

#畸形文件夹检测
def _FreakDir_Scan(_root):
    if _root.find('.') and _root[-(_root.rfind('.')):].lower().find('asp')!=-1:
        print('    畸形目录名      '+os.path.join(_root)) 

#错误报告函数
def _Error_Report(_Err):
    print('  ------------------------------\n\n')

    print('  '+_Err+'\n\n')

    print('  ------------------------------\n\n')

#main函数-程序入口
def main(): 
    if len(sys.argv)==3 :
        if sys.argv[1].lower()!='-p' and  sys.argv[1].lower()!='-j':
            _Error_Report('-- 扫描类型参数不正确 -p 或者 -j')
            return

        if os.path.lexists(sys.argv[2])==False:
            _Error_Report('-- 目录不存在 ')
            return

        if sys.argv[1].lower() == '-p' and os.path.lexists(sys.argv[2])==True :
            _Get_Files('php',sys.argv[2])

        elif sys.argv[1].lower() == '-j' and os.path.lexists(sys.argv[2])==True :
            _Get_Files('jsp',sys.argv[2])   

        elif sys.argv[1].lower() == '-a' and os.path.lexists(sys.argv[2])==True :
            _Get_Files('asp',sys.argv[2])       

        elif sys.argv[1].lower() == '-x' and os.path.lexists(sys.argv[2])==True :
            _Get_Files('aspx',sys.argv[2])       

    elif len(sys.argv)==2 and sys.argv[1].lower()=='-h':
        print('\n  参数说明:\n')
        print('   -p 扫描php文件\n')
        print('   -a 扫描asp文件\n')
        print('   -j 扫描jsp文件\n')
        print('   -x 扫描aspx文件\n')

        print('   -t 根据时间扫描\n')

        print('   -h 帮助\n')

        print('   参数示例:\n')
        print('    s.py –p E:\\wwwroot\n')
        print('    扫描E:\\wwwroot目录下的php文件\n')

        print('    s.py –p E:\\wwwroot –t "2012-12-12 12:12:12"\n')
        print('    根据时间“2012-12-12 12:12:12”扫描E:\\wwwroot目录下的php文件\n')

        print('    提示:直接运行程序,可根据提示输入扫描参数。\n')

        exit(0)
    elif len(sys.argv)==1:

        _type = 0

        while _type !=1 and _type != 2:
            print('请选择扫描文件类型:\n\n')
            print('1、 PHP\n')
            print('2、 JSP\n')
            print('3、 ASP\n')
            print('4、 ASPX\n')
            print('5、 退出\n\n')

            try:
                _type = int(raw_input('请选择:'))

            except Exception:
                _type=0

            if _type==5:
                exit(0)

        _path = ''  

        while os.path.lexists(_path) == False:
            _path = raw_input('\n\n请输入存在的扫描路径:')

        _Is_Time = False

        _Scan_Type = 0
        while _Scan_Type!=1 and _Scan_Type!=2 :
            print('请选择扫描类型:')
            print('1、 常规扫描\n')
            print('2、 时间扫描\n') 
            try:
                _Scan_Type = int(raw_input('请选择:'))
            except Exception:
                _Scan_Type = 0

            if _Scan_Type==1:
                if _type==1:
                    _Get_Files('php',_path)  
                elif _type==2:
                    _Get_Files('jsp',_path)  
                elif _type==3:
                    _Get_Files('asp',_path)  
                elif _type==4:
                    _Get_Files('aspx',_path)   

            elif _Scan_Type==2:
                _True_Time = False
                _time = time.time
                while _True_Time==False:
                    _Str_Time = raw_input('请输入时间(例:2012-12-12 12:12:12):')
                    try:
                        _time = time.mktime(time.strptime(_Str_Time, '%Y-%m-%d %H:%M:%S'))
                        _True_Time = True
                    except Exception:
                        _Error_Report('-- 时间参数不正确 例:2012-12-12 12:12:12')
                else:
                    if _type==1:
                        _Get_Time_Files('php',_path,_time)
                    elif _type==2:
                        _Get_Time_Files('jsp',_path,_time)
                    elif _type==3:
                        _Get_Time_Files('asp',_path,_time)
                    elif _type==4:
                        _Get_Time_Files('aspx',_path,_time)   

    elif len(sys.argv)==5:
        _time = time.time
        try:
            _time = time.mktime(time.strptime(sys.argv[4], '%Y-%m-%d %H:%M:%S'))
        except Exception:
            _Error_Report('-- 时间参数不正确 例:"2012-12-12 12:12:12"')        

        if sys.argv[1].lower() == '-p' and sys.argv[3].lower() == '-t':
            _Get_Time_Files('php',sys.argv[2],_time)

        elif sys.argv[1].lower() == '-j' and sys.argv[3].lower() == '-t':
            _Get_Time_Files('jsp',sys.argv[2],_time) 

        elif sys.argv[1].lower() == '-a' and sys.argv[3].lower() == '-t':
            _Get_Time_Files('asp',sys.argv[2],_time)       

        elif sys.argv[1].lower() == '-x' and sys.argv[3].lower() == '-t':
            _Get_Time_Files('aspx',sys.argv[2],_time)
        else:
            _Error_Report('-- 参数不正确 ')
            return
    else :
        _Error_Report('-- 参数不正确 ')
        return    
    _Is_Con = raw_input('\n是否继续Y/N:').lower()
    if _Is_Con=='y':
        main()

#打印LOGO函数
def _P_Logo_Code():
    print('\n')
    print('                    /--------\    ')
    print('                  .-          -.    ')
    print('                  /            \    ')
    print('                 |              |   ')
    print('                 |;  .-.  .-.  ;|   ')
    print('                 | )(__/  \__)( |   ')
    print('                 |/     /\     \|   ')
    print('       (@_       (_     ^^     _)   ')
    print('  _     ) \_______\__|IIIIII|__/__________________________')
    print(' (_)8{}<________|-\IIIIII/-|___________________________>  ')
    print('        )_/        \          /     ')
    print('       (@           `--------`      ')

    print('\n\n                幻刃-webshell查杀工具     ')
    print('                ~~~Coding By Seay~~~   ')
    print('                -->Blog: www.cnseay.com     ')
    print('                ---------------------------    \n')

#打印LOGO
_P_Logo_Code()

#程序入口
main()

Tags:

python资料,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
原创工具:Python Webshell后门查杀工具源码+C# 服务