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

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

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

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

工具目录

分类

查看所有分类
Loading categories
lightweight_static_analysis — 使用开源工具 + 少量你自己的代码,创建实用、轻量级的静态分析 | Kitploit
工具/GitHubGitHub/nccgroup/lightweight_static_analysis
静态代码分析 (SAST)漏洞分析代码分析脚本与自动化Web安全渗透测试学习与教育
GitHubnccgroup/lightweight_static_analysis

lightweight_static_analysis

使用开源工具 + 少量你自己的代码,创建实用、轻量级的静态分析

查看仓库
13456年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

轻量级静态分析

本仓库包含 ShellCon 2019 演讲“Rolling Your Own: How to Write Custom, Lightweight Static Analysis Tools”的 PoC 代码(幻灯片)。

简而言之,本仓库演示了几个具体示例,展示如何使用开源工具和少量自定义代码构建一些有趣的静态分析。

本仓库中的代码示例:

  1. 迭代式探索 Rails 代码库,以了解它所定义的控制器及其使用的 before_action。
  2. 查找 NodeJS 应用中的命令注入。

这些示例的工作原理

从高层来看,示例的实现方式如下:

  1. 找到你想要分析的源代码。
  2. 使用 GitHub 的 semantic 工具将源代码解析为抽象语法树(AST),并输出为 JSON。
  3. 用我们的 Python 代码解析 JSON 形式的 AST,然后据此进行一些有趣的分析。

环境搭建

本项目设计为使用 Docker 运行。

为此,你需要先完成一些准备工作。

由于我们的 Dockerfile 基于 semantic Docker 镜像,而该镜像托管在 GitHub 的包注册表上,因此你需要为 GitHub 包注册表配置 Docker。

  1. 按照上述文章的描述创建一个个人访问令牌,并赋予相应权限。
  2. 向 GitHub 包注册表进行身份验证:$ docker login docker.pkg.github.com -u USERNAME -p TOKEN
  3. 构建 Docker 容器:docker build -t lightweight_static_analysis .
  4. 在 Docker 容器内运行一个 bash shell,然后运行我们的脚本。
root@kitploit:~
# 运行以下命令
# (请确保在本仓库的项目根目录下的终端中运行)
$ docker run -it --rm --entrypoint /bin/bash -v $PWD:/lightweight_static_analysis lightweight_static_analysis

# 在正在运行的容器中
# cd 进入此项目的源代码目录
$ cd /lightweight_static_analysis

# 使用下文所述的不同配置选项运行 main.py

运行

当你在 Docker 容器中进入 bash shell 后(参见上面的 docker run 命令),你可以用以下几种模式之一运行 main.py。

root@kitploit:~
/lightweight_static_analysis> $ python3 src/main.py <options>

你可以通过不带任何选项运行 src/main.py 或查看 main.py 中的 parser.add_argument 部分,来查看所有可用选项。

探索 Rails 代码库

以下是一些可以帮助你交互式探索 Rails 代码库的命令。

首先,你需要克隆一个或多个 Rails 仓库,并将它们放入 examples/ 中。如果你需要一些示例仓库,可以使用 rubygems.org 的源代码,或 Open Source Rails 上列出的仓库之一。

root@kitploit:~
# 打印所有控制器的类、超类、已定义方法和 before actions
$ python3 src/main.py --rails-summarize-controllers examples/<repo_name>

# 打印所有控制器名称,按超类分组
#
# 这可以发现父类(例如 ApplicationController 或 Api::BaseController)中定义的安全保护
# 未生效的情况,原因是易受攻击的控制器没有继承适当的类。
$ python3 src/main.py --rails-controllers-by-superclass examples/<repo_name>

# 对于任何控制器使用的每个 before_action,列出使用该 before_action 的控制器,
# 以及该 before_action 被应用和未应用的路由
# (例如处理 'except' 和 'only' 关键字)
#
# 这可以:
# * 让你快速了解应用定义的各种 before_action,从而对代码的流程和组织有一些直觉。
#   * `verify_with_otp` - 嗯,这听起来很有趣,我可能想要
#     审查这个过滤器是如何实现的。
# * 向你展示某个给定 before_action 在整个代码库中被应用和未应用的位置,
#   从而可能发现因使用不一致而导致的 bug。
#
# 例如
# * 是否存在一个 before_action 被用来保护所有改变状态的 API 路由,
#   但偏偏只有 1 个模型除外?这很奇怪。
# * 是否存在一个身份验证或授权 before_action 被应用于控制器中的每个 action,
#   但唯独一个 action 除外?为什么?
$ python3 src/main.py --rails-controllers-by-before_action examples/<repo_name>

如果你希望在解析完成后进入 ipdb REPL,以便交互式检查解析后的 Ruby 代码,可以在上述命令中额外传入 --repl 标志。

这些示例依赖于 ast_node.py 中定义的各种 AstNode 类,而所有与 Rails 相关的代码都在 ruby.py 中。

通过 JS 中的 shell exec() 查找命令注入

此实现尚未清理和编写文档,但请参阅 main.py 中的 batch_parse_json(),以及 visitor.py 中的 visit() 和它调用的其他方法。

保持联系

我们很乐意更详细地讨论这项工作,欢迎提出问题,或通过 Twitter 联系我们:@clintgibler、@defreez。

如果你想了解这项工作以及我们开展的其他项目,请查看我们的 tl;dr sec newsletter,我们会在其中发送顶级安全演讲的详细摘要以及最佳安全工具和资源的链接。

这是一份低流量、高信号的 newsletter,旨在让你了解安全领域的最新动态,从而更高效、更有效地完成工作,并让你在信息安全茶歇时也能分享一些有用的小知识。

下载工具