Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
webshell-analyzer — Web shell 扫描器和分析器。 | Kitploit
工具/GitHubGitHub/tstillz/webshell-analyzer
静态分析漏洞扫描器取证分析Web安全恶意软件分析
GitHubtstillz/webshell-analyzer

webshell-analyzer

Web shell 扫描器和分析器。

查看仓库
113263年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Web Shell Analyzer

Web shell analyzer 是一个跨平台的独立二进制文件,专门用于识别、解码和标记疑似Web Shell的文件。Web shell analyzer 是 Web shell scanner 项目(http://github.com/tstillz/webshell-scan)的升级版,后者仅通过正则表达式扫描文件,不进行解码或属性分析。

免责声明

扫描器附带的正则表达式及其内置解码例程不能保证找到磁盘上的每一个Web Shell,并可能识别出一些误报。建议在生产系统上运行前先测试分析器并评估其影响。分析器不含任何担保,使用风险自负。

功能特性

  • 跨平台,静态编译的二进制文件。
  • JSON输出
  • 当前支持大多数 PHP、ASP/X Web Shell。JSP/X、CFM 及其他类型正在开发中。
  • 递归多线程扫描,能够快速遍历嵌套目录。
  • 能够处理多层混淆的Web Shell,如base64、gzinflate和char code。
  • 支持PRE/POST操作,为分析引擎提供分层反混淆和解码能力。
  • 可调的正则表达式逻辑,模块化接口,易于扩展分析器能力。
  • 可调属性标记
  • 匹配时捕获原始内容
  • 系统信息
  • 已针对Web Shell仓库测试:https://github.com/tennc/webshell

PRE/POST 操作

每个被扫描的文件都可以经过PRE和/或POST操作:

  • PRE解码:在执行匹配之前调用的函数,例如base64解码或字符串替换。
  • POST解码:在执行匹配之后调用的函数,例如URL去毒化。

PreDecodeActions 函数的设计思路是使用正则表达式识别匹配的字符串或模式,获取其原始匹配内容,执行定义的解码/清理步骤,然后将最终输出送回分析引擎进行重新扫描/处理。 一个非常简单的例子是Base64解码。为了检查针对base64编码的Web Shell是否有检测逻辑,我们必须先移除所有base64层。为此,我们可以使用以下 PreDecodeAction:

root@kitploit:~
{
    Name:        "PHP_Base64Decode",
    Regex:       *regexp.MustCompile(`(?i)(?:=|\s+)(base64_decode\('('?\"?[A-Za-z0-9+\/=]+'?\"?))`),
    DataCapture: *regexp.MustCompile(`(?i)((?:'|")[A-Za-z0-9+\/=]+(?:'|"))`),
    PreDecodeActions: []cm.Action{
        {Function: cm.StringReplace, Arguments: []interface{}{"\"", "", -1}},
        {Function: cm.StringReplace, Arguments: []interface{}{"'", "", -1}},
    },
    Functions: []cm.Base_Func{cm.DecodeBase64},
},

查看上面的代码块,首先有函数名称、用于匹配的正则表达式、数据捕获正则表达式(有时你可能想调整捕获的内容与匹配的内容)以及 PreDecodeActions。在这种情况下,在将函数 cm.DecodeBase64 应用于匹配文本之前,系统会先移除以下字符 " 和 '。 PostDecodeActions 则相反,它会在解码后检查输出。使用这种模型,我们可以制作多个自定义解码器,拥有无限的PRE/POST和解码函数,以满足大多数Web Shell分析需求。

检测

检测是一个带有名称和描述的正则表达式。这种模型的设计理念是使检测模块化、可扩展,并与实际检测保持上下文关联。 检测与属性的格式相同,但属性不能生成检测,它们只能为现有检测添加上下文。让我们看看下面的检测逻辑示例:

root@kitploit:~
{
    Name:        "Generic_Embedded_Executable",
    Description: "查找与PE文件关联的魔术字节",
    Regex:       *regexp.MustCompile(`(?i)(?:(?:0x)?4d5a)`),
},

根据正则表达式,我们可以看到它正在查找基于魔术头字节 4D 5A 的内嵌Windows PE文件。如果找到,将产生一个检测,并为该文件生成JSON报告。 目前,检测是根据文件扩展名或对所有文件类型通用应用的。例如,PHP的解码例程定义在 cm.GlobalMap.Function_Php 下,属性标记定义在 cm.GlobalMap.Tags_Php 下。 函数 cm.GlobalMap.Function_Generics 和标记 cm.GlobalMap.Tags_Generics 作为一个总括应用于所有Web Shell扩展。

属性

属性标记是我创建的一个新概念,用于为现有的Web Shell检测添加"上下文"。属性本身目前不能单独生成检测。在传统的扫描引擎中,扫描器只会在检测到Web Shell时发出警报,但很少提供关于Web Shell可能具有哪些能力(属性)的额外上下文。属性标记的工作原理与检测逻辑相同,但它们仅在识别出检测后显示,且不能自行生成检测。查看下面的示例逻辑:

root@kitploit:~
cm.GlobalMap.Tags_Php = []cm.TagDef{
    {
        Name:        "PHP_Database_Operations",
        Description: "查找常用于与数据库交互的PHP函数。",
        Regex:       *regexp.MustCompile(`(?i)(?:'mssql_connect\|mysql_exec\()`),
        Attribute: 	 true,
    },
}

我们看到在结构体 Tags_Php 下,我们创建了一个新的PHP标记。当扫描过程中找到匹配时,会检查 Attribute 标志,如果设置为 True,则检测到的Web Shell将在其JSON报告中附加标签 PHP_Database_Operations,以及频率和匹配文本块,如下面的示例输出所示:

root@kitploit:~
{
   "filePath": "/testers/1.php",
   "size": 66109,
   "md5": "6793d8ebab93e5a0f91e5a331221f331",
   "timestamps": {
      "birth": "2019-02-03 02:02:22",
      "created": "2020-07-29 02:50:15",
      "modified": "2019-02-03 02:02:22",
      "accessed": "2020-07-29 02:51:07"
   },
   "matches": {
      "FilesMAn": 5,
      "FilesMan": 29,
      "cmd": 20,
      "eval(": 4,
      "exec(": 2,
      "ipconfig": 1,
      "netstat": 2,
      "passthru(": 1,
      "shell_exec(": 1
   },
   "decodes": {
      "Generic_Base64Decode": 40,
      "Generic_Multiline_Base64Decode": 165
   },
   "tags": {
      "Generic_Embedding_Code_C": {
         "bind(": 2,
         "listen(": 2
      },
      "PHP_Banned_Function": {
         "exec(": 3,
         "get_current_user(": 1,
         "getmyuid(": 1,
         "link(": 7,
         "listen(": 2,
         "passthru(": 1,
         "realpath(": 1,
         "set_time_limit(": 1
      },
      "PHP_Database_Operations": {
         "mysql_query(": 1
      },
      "PHP_Disk_Operations": {
         "@chmod(": 1,
         "@filegroup(": 4,
         "@fileowner(": 4,
         "@rename(": 2,
         "fopen(": 7,
         "fwrite(": 6
      }
   }
}

这些标记不仅有助于定义Web Shell能做什么,还能帮助应急响应顾问等团队在执行实时响应时获得切入点,以确定下一步可能调查的方向。

系统要求

无需任何依赖!只需下载适合您操作系统的二进制文件,提供要扫描的目录(其他参数可选),然后运行即可。

运行二进制文件

不带参数运行 wsa 会显示以下选项:

root@kitploit:~
/Users/beastmode$ ./wsa
选项:
      -dir string
           要扫描Web Shell的目录
     -pretty
           如果设置为true,分析器将以JSON缩进形式输出结果
     -raw_contents
           如果找到匹配项,获取原始内容并将文件以base64 + gzip压缩后放入JSON对象中。
     -size int
           指定要扫描的最大文件大小(默认为10 MB)(默认10)
     -verbose
           如果设置为true,分析器将打印所有分析的文件,而不仅仅是匹配项

唯一必需的参数是 dir。如果需要,可以覆盖其他程序默认值。

分析器的输出将写入控制台(标准输出)。示例如下(为获得最佳效果,将stdout发送到json文件并离线审查/后处理):

root@kitploit:~
Linux: ./wsa -dir /opt/www
Windows: wsa.exe -dir C:\Windows\Inetput\wwwroot

### 使用STDOUT并对完整的Web Shell文件进行编码和压缩:
Linux: ./wsa -dir /opt/www -raw_contents=true > scan_results.json

分析器完成后,会将总体扫描指标输出到STDOUT,如下例所示:

{"scanned":311,"matches":122,"noMatches":189,"directory":"/webshell-master/php","scanDuration":1.4757737378333333,"systemInfo":{"hostname":"Beast","envVars":[""],"username":"beastmode","userID":"501","realName":"The Beast","userHomeDir":"/Users/beastmode"}}

下载工具