基于Python的正则表达式PHP Webshell检测工具实现
本文介绍了一款使用Python编写的PHP Webshell检测工具。该工具利用正则表达式匹配eval、system等危险函数,支持自定义关键字规则。通过递归遍历指定目录下的.php和.inc文件,将匹配结果记录至log.txt。文章提供了完整的源代码及使用方法,适用于Windows和Linux环境下的代码安全审计。
工具使用方法与原理
运行脚本时,需在命令行传入目标目录路径,命令格式为:find.py [目录名称]。
核心检测逻辑依赖于Python的正则表达式匹配机制。用户可以根据实际需求,在keywords列表中追加自定义的正则规则及其对应的日志描述。
自定义规则的格式为列表形式,例如:["eval\(\$\_POST", "发现PHP一句话木马!"]。其中前半部分为正则表达式,后半部分为匹配成功时写入日志的描述信息。
通过调整文件后缀名过滤列表和关键字正则表达式,该脚本框架可轻松扩展为其他编程语言(如JSP、ASP等)的Webshell检测工具。
开发环境基于Windows XP系统,使用的Python版本为ActivePython 2.6.2.2。由于本地缺乏Linux环境,暂未进行虚拟机测试,计划后续在公司Linux环境中验证兼容性。
当前版本仅为基础功能框架,后续计划逐步优化检测逻辑并完善功能细节。
Python检测脚本源码
具体实现代码如下:
#coding:gbk
import os,sys
import re
findtype=['.php','.inc'] #要检查的文件后缀类型
#定义关键字正则表达式与日志描述的二维数组。
keywords=[ ["eval\(\$\_POST","发现PHP一句话木马!"],\
["(system|shell_exec|exec|popen)","发现PHP命令执行函数!"]\
]
writelog = open('log.txt', 'w+')
def checkfile(filename):
fp=open(filename)
content = fp.read()
for keyword in keywords:
if re.search(keyword[0],content,re.I):
log="%s:%s" % (filename,keyword[1])
#print log
print >>writelog,log
fp.close()
def checkdir(dirname):
try:
ls=os.listdir(dirname)
except:
print 'access deny'
else:
for l in ls:
temp=os.path.join(dirname,l)
if(os.path.isdir(temp)):
checkdir(temp)
else:
ext = temp[temp.rindex('.'):]
if ext in findtype:
checkfile(temp)
if __name__=="__main__":
print "PHP webshell check for Python!"
print "By:Neeao"
print "http://Neeao.com"
if len(sys.argv) < 2:
print "%s C:\\" % sys.argv[0]
else:
print "Check start!"
dirs=sys.argv[1:]
#print dirs[0]
if os.path.exists(dirs[0]):
checkdir(dirs[0])
else:
print "Dir:'%s' not exists!" % dirs[0]
print "Check finsh!"
writelog.close()
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









