本文讲述了一个python查找 webshell脚本的代码,除了查找webshell功能之外还具有白名单功能,以及发现恶意代码发送邮件报警等功能,感兴趣的朋友可以自己测试一下看看效果。
具体的功能代码如下:
#!/usr/bin/env python #-*- coding: utf-8 -*- import os import sys import re import smtplib #设定邮件 fromaddr = \"smtp.qq.com\" toaddrs = [\"voilet@qq.com\"] username = \"voilet\" password = \"xxxxxx\" #设置白名单 pass_file = [\"api_ucenter.php\"] #定义发送邮件函数 def sendmail(toaddrs,sub,content): \'发送邮件模块\' # Add the From: and To: headers at the start! msg = (\"From: %s\\r\\nTo: %s\\r\\nSubject: %s\\r\\n\\r\\n\" % (fromaddr, \", \".join(toaddrs), sub)) msg += content server = smtplib.SMTP(\'mail.funshion.com\', 25,) server.login(username, password) server.sendmail(fromaddr, toaddrs, msg) server.quit() #设置搜索特征码 rulelist = [ \'(\\$_(GET|POST|REQUEST)\\[.{0,15}\\]\\(\\$_(GET|POST|REQUEST)\\[.{0,15}\\]\\))\', \'(base64_decode\\([\\\'\"][\\w\\+/=]{200,}[\\\'\"]\\))\', \'eval\\(base64_decode\\(\', \'(eval\\(\\$_(POST|GET|REQUEST)\\[.{0,15}\\]\\))\', \'(assert\\(\\$_(POST|GET|REQUEST)\\[.{0,15}\\]\\))\', \'(\\$[\\w_]{0,15}\\(\\$_(POST|GET|REQUEST)\\[.{0,15}\\]\\))\', \'(wscript\\.shell)\', \'(gethostbyname\\()\', \'(cmd\\.exe)\', \'(shell\\.application)\', \'(documents\\s+and\\s+settings)\', \'(system32)\', \'(serv-u)\', \'(提权)\', \'(phpspy)\', \'(后门)\', \'(webshell)\', \'(Program\\s+Files)\', \'www.phpdp.com\', \'phpdp\', \'PHP神盾\', \'decryption\', \'Ca3tie1\', \'GIF89a\', \'IKFBILUvM0VCJD\\/APDolOjtW0tgeKAwA\', \'\\\'e\\\'\\.\\\'v\\\'\\.\\\'a\\\'\\.\\\'l\\\'\', ] def Scan(path): for root,dirs,files in os.walk(path): for filespath in files: isover = False if \'.\' in filespath: ext = filespath[(filespath.rindex(\'.\')+1):] if ext==\'php\' and filespath not in pass_file: file= open(os.path.join(root,filespath)) filestr = file.read() file.close() for rule in rulelist: result = re.compile(rule).findall(filestr) if result: print \'文件:\'+os.path.join(root,filespath) print \'恶意代码:\'+str(result[0]) print \'\\n\\n\' sendmail(toaddrs,\"增值发现恶意代码\",\'文件:\'+os.path.join(root,filespath)+\"\\n\" + \'恶意代码:\'+str(result[0])) break try: if os.path.lexists(\"/home/web_root/\"): print(\'\\n\\n开始扫描:\'+ \"/home/web_root/\") print(\' 可疑文件 \') print(\'########################################\') Scan(\"/home/web_root/\") print(\'提示:扫描完成--~\') else: print \'提示:指定的扫描目录不存在--- \' except IndexError: print \"请指定扫描文件目录\"