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

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

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

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

工具目录

分类

查看所有分类
Loading categories
FFM — 自由战斗模式:开源黑客工具集 | Kitploit
工具/GitHubGitHub/justicerage/ffm
权限提升横向移动数据泄露信息收集后渗透利用渗透测试命令与控制实用工具与框架红队
GitHubjusticerage/ffm

FFM

自由战斗模式:开源黑客工具集

查看仓库
349474个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

自由作战模式 (FFM)

FFM 是一个黑客工具包,可在红队演练的后渗透阶段使用。该工具的设计理念源自 @thegrugq 在 2007 年的一次会议 上的演讲。

它曾在 SSTIC 2018 上进行展示(视频),配套的幻灯片可通过 此链接 获取。如果你不熟悉这类工具,强烈建议你先了解它们,以理解黑客工具包的作用。所有评论都包含在幻灯片中。

本项目根据 GPL v3 许可证 的条款分发。

文档

主要文档存放在本 README 以及 commands/ 目录下的命令模块中。上述 SSTIC 演讲链接仍然是了解工具包使用方式的最佳高级背景资料。更多演练材料可在以下地址获取:

  • https://ice-wzl.gitbook.io/hacknetics/c2-frameworks/ffm-documentation

贡献者

  • ice-wzl 在项目历史中贡献了命令、文档和重构。

安装

Docker 安装

  • 考虑到现代终端提示的多样性,我们强烈建议使用 docker 运行此工具。
  • 使用本仓库中的 Dockerfile 可以大幅减少可能遇到的错误。
  • 使用容器与远程主机交互也更加安全。如果在与远程主机交互时被利用,攻击者只会进入你的容器,而不是你的实际主机。当然,我们还是希望这不会发生。
  • 确保你的本地系统已安装 Docker
root@kitploit:~
git clone https://github.com/JusticeRage/FFM.git
cd /FFM

docker build Docker_Install/ -t ffm:ffm

docker image list 
REPOSITORY                TAG         IMAGE ID      CREATED        SIZE
localhost/ffm             ffm         fb6dd17e3b91  9 minutes ago  614 MB
docker.io/library/ubuntu  22.04       3b418d7b466a  2 weeks ago    80.3 MB

# 运行新容器并进入 root 用户的 /bin/bash 提示符
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
  • 进入容器后,设置 root 和 neo 的 passwd
  • su neo 然后你就可以开始了

非 Docker 安装

  • 不推荐
root@kitploit:~
 git clone https://github.com/JusticeRage/FFM.git
 cd /FFM
 pip install -r requirements.txt

使用方法

黑客工具包的目标是作为一个助手,自动化后渗透阶段的常见任务,同时保护用户免受可能犯的错误。

它是 shell 的工具化。运行 ./ffm.py 激活它,你就可以立即开始工作。命令分布在 commands/ 下的小模块中,其中 commands/command_manager.py 负责发现和注册。主要分组包括枚举、帮助、隐蔽、传输和执行。

你需要了解两个命令:

  • 输入 !list 显示工具包提供的所有命令。
  • 输入 !list tags 查看命令可被归类的不同标签
root@kitploit:~
!list tags
可用命令列表:
	 enumeration
	 execution
	 help
	 stealth
	 transfer
  • 现在你可以输入 !list enumeration(或其他标签之一)来查看属于该类别的命令。
root@kitploit:~
!list enumeration
可用命令列表:
	!backup-hunter: 搜索备份文件
	!info: 返回当前机器的 CPU、架构、内存和内核版本。
	!log: 切换将工具包的输入和输出记录到文件。
	!mtime: 返回最近 X 分钟内修改过的文件
	!os: 打印当前机器的发行版信息。
	!db-hunter: 搜索 .sqlite、.sqlite3 和 .db 文件
	!sshkeys: 搜索当前机器上的私钥和公钥 SSH 密钥。
	!suid: 查找当前机器上的 SUID、SGID 二进制文件。
	--snip--

  • 按下 SHIFT+TAB 可对本地机器进行 Tab 补全。如果你通过 SSH 登录到远程计算机但需要引用本地机器上的文件时,这可能会很有用。

功能列表

此黑客工具包提供了一些功能,如下所述。在描述的过程中,也会介绍工具的设计哲学。不期望 FFM 中实现的所有命令都适合你。每个人都有自己做事的方式,根据你的具体需求调整工具包可能需要对某些代码进行修改和/或编写一些插件。我们付出了大量努力确保这是一项轻松的任务。

命令

枚举命令

  • !os 是一个非常简单的命令,它仅运行 cat /etc/*release* 来显示当前机器正在运行的操作系统。它最重要的价值可能在于演示:在黑客工具包的上下文中,你可以定义跨机器边界工作的别名。SSH 到任何计算机,输入 !os 命令即可运行。枚举命令位于 commands/enumeration_commands.py 中,帮助命令位于 commands/help_commands.py 中,与隐蔽相关的命令分布在 commands/stealth_commands.py、commands/notty_sudo.py 和 commands/log_control.py 中。
  • !backup-hunter 搜索备份文件
  • !info 返回当前机器的 CPU、架构、内存和内核版本。
  • !log 切换将工具包的输入和输出记录到文件。实现于 commands/log_control.py。
  • !mtime 返回最近 X 分钟内修改过的文件。例如 !mtime 5 将获取本地机器上(你有权限查看的)最近 5 分钟内修改的所有文件。

传输命令

  • 帮助您拉取和推送文件的命令,相当直接。
  • !download [远程文件] [本地路径] 从远程机器获取文件并通过终端复制到本地。这个命令稍微复杂一些,因为需要进行更严格的错误检查,但它是另一个你可以轻松阅读以便入门的命令。它位于 commands/download_file.py 中。请注意,它需要远程机器上的 xxd 或 od 才能正常运行。
  • !download-dir [远程目录] [本地目标] 通过终端流式传输远程目录的 tar 归档,并在本地提取而不接触远程文件系统。它位于 commands/download_directory.py 中。它需要远程机器上的 tar 和 base64,并在可用时使用 gzip。
  • !upload [本地文件] [远程路径] 的工作原理与前一个命令完全相同,只是将本地文件放入远程机器。它位于 commands/upload_file.py 中。

执行命令

  • !sh [本地脚本] 在内存中运行来自本地机器的 shell 脚本。它位于 commands/remote_script.py 中。
  • !py [本地脚本] 在远程机器上执行本地 Python 脚本,并且完全在内存中执行。它位于 commands/remote_script.py 中。请查看我的另一个仓库 以获取你可能想使用的脚本。此命令使用 << 的多行语法,这意味着不支持该语法的伪 shell(Weevely 就是一个很好的例子)会严重破坏此命令。
  • !py3 [本地脚本] 除了针对使用 python3 的系统外,功能完全相同。它使用相同的模块 commands/remote_script.py。
  • !elf [本地脚本] 使用远程机器上任何兼容的 Python 解释器,在内存中运行来自本地机器的可执行文件。它位于 commands/remote_elf.py 中。

隐蔽命令

  • 我完全知道这两个模块与“隐蔽”相反,但这是它们目前的位置,直到找到替代位置。这个隐蔽类别很可能包含帮助您更好地融入环境以及可能让您脱颖而出的命令。
  • !pty 生成一个 TTY,这在大多数情况下是你不想要的,因为它往往会留下取证证据。然而,某些命令(sudo)或漏洞利用需要 TTY 才能运行,因此提供此功能作为便利。生成 TTY 后,会立即传递 UNSET HISTFILE HISTFILESIZE HISTSIZE PROMPT_COMMAND,以及 export TERM=xterm。
  • !sudo 在没有 TTY 的情况下调用 sudo。它位于 commands/notty_sudo.py 中。

通过编辑 ffm.conf 可以进一步配置插件。

处理器

从概念上讲,命令(如上所述)用于生成一些 bash 代码并转发到 shell。它们可以通过捕获 shell 的输出并根据返回结果生成附加指令来执行更复杂的操作。 处理器则稍有不同,它们主要用于重写用户与底层 bash 进程之间流通的数据。虽然任何处理器都可以改写为命令,但将两者分开似乎更清晰。输入处理器作用于用户在按下 ENTER 键后输入的任何内容,输出处理器可以修改 shell 返回的任何内容。

  • 一个好的处理器示例可以在 processors/ssh_command_line.py 中找到。它所做的只是在任何它看到的 SSH 命令中添加 -T 选项(如果缺少的话)。如果你有兴趣编写处理器,请务必查看其简单代码。
  • 框架中存在的另一个输入处理器 processors/assert_torify.py 包含一个网络命令黑名单(ssh、nc),如果它们似乎没有通过诸如 torify 之类的工具进行代理,则会阻止它们。工具包会尽力只在命令似乎在本地机器上运行时才打扰用户。显然,这不应成为防止泄露你家庭 IP 地址的唯一保障。
  • 最后,processors/sample_output_processor.py 是一个非常简单的输出处理器,它会以红色突出显示任何出现的“password”一词。由于它相当无用,因此未在框架中启用,但如果你想要做更复杂的事情,仍然可以将其作为起点。

已知问题

CTRL+R 尚未实现,我们都非常想念它。

更成问题的是,框架偶尔会挂起。在 99% 的情况下,这是因为框架未能检测到它启动的命令已经运行完毕。通常,这意味着无法识别你所登录机器的命令提示符。在这种情况下,你可以尝试改进位于 ffm.py 文件最开头的正则表达式,或者使用 ssh -T 登录到同一台机器,这样就不会再有有问题的提示符了。 默认情况下,FFM 会在 5 分钟后放弃尝试读取命令的输出(某些插件可能实现不同的超时时间);因此如果框架挂起,你需要等待直到看到错误消息(不过如果底层进程仍在运行,你可能仍然无法输入命令)。

结语

我想我已经涵盖了该工具的所有内容。再次强调,它与我通常发布的内容有些不同,因为大多数人可能需要修改它才能使其对自身有价值。

许多插件尚未编写,因此请务必分享你对 FFM 所做的任何改进。如果遇到错误,或者你想做某事但不知道如何做,欢迎提出问题;这样我就能为大家改进文档。

待办事项

  • 单文件加密模块

联系方式

下载工具
  • !db-hunter 搜索 .sqlite、.sqlite3 和 .db 文件以及其他数据库文件
  • !sshkeys 搜索当前机器上的私钥和公钥 SSH 密钥。
  • !suid 查找当前机器上的 SUID、SGID 二进制文件。
  • !strange-dirs 从用户指定的路径开始检查主机上的异常目录
  • !sudo-version 检查是否存在易受攻击的 sudo 版本
  • !vm 检查设备是否为虚拟机