findWebshell – 基于python的webshell检查工具

  • 发表于
  • webshell

findWebshell简介

findWebshell是一款基于python开发的webshell检查工具/webshell扫描工具,可以检查任意类型的webshell后门。
该工具具有一定的扩展能力,能够通过字典添加以及插件开发两种方式,对findwebshell进行扩展。

因为是基于python开发的小工具,只要有python运行环境就可以了。

https://github.com/he1m4n6a/findWebshell

使用说明

Usage: main.py [options]

Options:
-h, --helpshow this help message and exit
-p PATH, --path=PATHinput web directory filepath
-o OUTPUT, --output=OUTPUT
create a html report
-e php|asp|aspx|jsp|all, --ext=php|asp|aspx|jsp|all
define what's file format to scan

示例

python main.py -e php -p /var/www/test -o output
-e 网页格式
-p 扫描的路径
-o 生成的html文件名,默认生成report.html

扫描结果:

findWebshell

开发文档

字典添加

directory目录下的sensitiveWord.py定义的是后门中的敏感关键字,可以手动添加,格式为{"关键字":"类型"}

php_sensitive_words = {
"www.phpdp.org":"PHP神盾加密后门",
"www.phpjm.net":"PHP加密后门"
}

directory目录下的webshell.py定义的是webshell列表,直接添加webshell到列表里

php_webshell = [
"后门.php",
"xxoo.php",
"一句话.php"
]

插件开发

命令规范

插件命名格式:网页类型_后门类型-plugin.py,示例

php_eval_assert-plugin.py
php_preg_replace-plugin.py
asp_execute-plugin.py

函数规范和返回值,函数格式

def judgeBackdoor(fileCtent)
成功返回后门类型,失败返回None

示例

def judgeBackdoor(fileCtent):
	if keyword in fileCtent:
		result = re.compile(rule).findall(fileCtent)
		if len(result) > 0:
			returnbackdoorType
	else:
		return None

我们扩展的插件基本上是基于一个原理,即通过正则表达式在读入的文件内容筛选出可疑的字段,从而判断是否存在特定类型的webshell,这样的方式一般需要较为强大的webshell特征代码储备,但是其本身还是对文件内容的扫描,并没有基于行为等。

优点

  1. 开源
  2. 文件小,扫描速度快
  3. 容易扩展,存在字典方式和插件方式,这两种方式。

缺点

  1. 字典方式和插件方式都是静态的,是基于对webshell文件名、敏感文件内容文本或者webshell内容中的特征代码的识别。其实现方式还是比较简单粗暴的。