a-tan-cyber/breach_point
GitHub: a-tan-cyber/breach_point
一款基于 Bash 的道德渗透测试自动化实验脚本,通过菜单驱动的工作流串联从扫描到利用的完整攻击路径,帮助学生在受控环境中系统学习渗透测试流程。
Stars: 0 | Forks: 0
设计用于网络安全道德测试的自动化攻击路径工作流
学生姓名:Tan Amos
学生学号:s22
班级代码:CCK3\_250714
学院:网络安全中心
指导教师:Samson
### 1. 引言
Project Breach Point 是渗透测试轨道下突破模拟系列的第一部分。它旨在模拟威胁行为者的战术、技术和程序(TTPs),并引导学生完成渗透测试的生命周期:信息收集、漏洞利用、权限提升和数据渗出。总体目标是使用 Bash(`.sh`)脚本自动化部分攻击过程,使得这些步骤可重复且可追溯。
本报告解释了随附的 Bash 脚本 `Project Breach Point - Automation Script` 是如何设计和实现的,以满足项目要求。本解释专为初学者编写,重点逐步清晰地描述了脚本的功能以及它如何与项目任务书中定义的七个主要范围保持一致。
### 2. 项目要求概述
项目任务书定义了一组结构化的任务,分为七个范围:
* **获取用户输入** – 询问用户目标网络,如有需要则创建输出目录,并让用户在 **基础** 或 **全面** 扫描模式之间进行选择。基础模式必须扫描 TCP 和 UDP 服务,包括服务版本和弱密码。全面模式必须增加 Nmap 脚本引擎(NSE)检查和漏洞分析,并使用 NSE 和 Searchsploit 显示潜在漏洞。
* **呈现攻击路径** – 一旦收集到初始信息,脚本必须呈现多个攻击选项,并让用户选择接下来的操作。这些选项包括弱凭据检查、生成 Metasploit 资源(`.rc`)文件、payload 生成和数据渗出。
* **弱凭据** – 查找登录服务(SSH、RDP、FTP 和 SMB)中使用的弱密码。脚本必须具有内置的 `password.lst` 文件,但也允许用户提供自己的密码列表。
* **使用资源文件自动化** – 允许用户生成不同的 Metasploit 资源(`.rc`)文件以:(a) 使用 `auxiliary/scanner/ssh/ssh_login` 或其他模块利用 SSH 登录,(b) 创建一个 handler,以及 (c) 运行本地 exploit 建议器。用户还应能够选择是否执行生成的 `.rc` 文件。
* **生成 payload** – 询问用户将 payload 存储在何处,并收集所有必要的选项,例如 payload 名称、`LHOST`、`LPORT`、输出格式以及 `msfvenom` 要求的其他详细信息。
* **数据渗出** – 询问操作系统(Linux 或 Windows),然后生成命令,帮助用户查找、压缩、编码和传输感兴趣的文件(例如包含单词 `password`、`.docx` 和 `.xlsx` 的文件)。
* **记录结果** – 在终端中清楚地显示当前阶段,在会话结束时总结所做的工作,并允许用户在退出前在结果中进行搜索。
此外,交付成果要求提供脚本的录制演示、带注释的代码、对任何重用代码片段的适当署名,并在单个压缩文件中提交脚本和 PDF 报告。
### 3. 整体脚本设计
`Project Breach Point - Automation Script` 是用 Bash 编写的,旨在受控且合法的实验室环境中于 Linux 系统上使用 `sudo` 运行。
主要设计功能包括:
* **安全和环境检查** – 脚本首先检查它是否以 root 身份运行(`$EUID -ne 0`),如果不使用 `sudo` 则会打印清晰的消息。这很重要,因为像 `nmap` 和 `masscan` 这样的工具通常需要 root 权限。
* **帮助和标头** – `print_usage` 函数显示了关于脚本功能以及如何运行它的详细概述。可以通过三种方式访问此帮助:
* 通过使用 `h` 或 `-help` 启动脚本。
* 通过在初始横幅提示符下按 `h` 或 `H`。
* 通过在主菜单中按 `h` 或 `H`。
* **特定于会话的输出结构** – 脚本要求用户输入输出目录名称,然后在该目录中创建一个带时间戳的 `run_YYYYMMDD_HHMMSS` 文件夹。在此运行文件夹内,它创建子目录:`scans/`、`credentials/`、`metasploit/`、`payloads/` 和 `logs/`。这保持每次运行独立且有条理。
* **日志记录和操作跟踪** – `log_msg` 函数将带时间戳的消息同时写入屏幕和会话日志文件(例如 `logs/session.log`)。一个名为 `SESSION_ACTIONS` 的数组记录高级操作(例如“TCP 扫描完成”),这些操作将在会话结束时进行总结。
* **菜单驱动的工作流** – 收集初始输入后,脚本会呈现一个主菜单,该菜单直接对应于项目结构中描述的攻击路径。用户可以运行扫描、执行弱凭据检查、生成 `.rc` 文件、创建 payload、构建数据渗出命令、检查依赖项或搜索结果。
* **依赖管理** – 脚本会检查常见的工具,例如 `nmap`、`masscan`、`hydra`、`msfconsole`、`msfvenom`、`searchsploit`、`zip`、`scp`、`base64` 和 `pscp`。如果缺少某个工具,脚本可以提供通过 `apt-get` 安装它的选项(如果可用),或者以有限的功能继续运行。
这种设计使脚本模块化且更易于理解:每个主要任务都由一个专门的函数处理(例如 `run_scans`、`weak_credentials`、`generate_msf_rc`、`generate_payload` 和 `data_exfil_helper`)。
### 4. 按范围实施
### 4.1 范围 1 – 获取用户输入
为了满足范围 1,脚本在运行开始时会向用户询问几条重要信息:
* **目标网络** – 脚本反复提示输入目标网络(例如 `192.168.1.0/24`),并检查是否为空输入或明显的错误(如空格)。
* **输出目录** – 用户可以键入输出目录的名称(默认:`output`)。如果该目录不存在,脚本将创建它。
* **扫描类型(基础或全面)** – 脚本要求用户在 `basic` 和 `full` 之间进行选择。它接受大写或小写输入,并重复提问,直到用户键入有效的选择。
收集这些值后,脚本会设置运行目录和日志记录,如果默认的密码字典不存在则创建它,并写入一个简单的默认用户列表。这些列表稍后将用于弱密码检查。
### 4.2 范围 2 – 呈现攻击路径并让用户选择
主菜单代表了项目要求的不同攻击路径。每个菜单项都映射到一个函数:
* **运行网络扫描** – 阶段 2:发现和漏洞扫描。
* **弱凭据检查** – 阶段 3:针对常见服务的暴力破解登录尝试。
* **生成 Metasploit** **`.rc`** **文件** – 阶段 4:为 Metasploit 生成资源文件。
* **生成 payload** – 阶段 5:`msfvenom` payload 创建。
* **数据渗出助手** – 阶段 6:生成文件搜索、压缩、编码和传输命令。
* **在结果中搜索** – 阶段 7:递归搜索所有运行输出。
* **检查/安装依赖项** – 按需提供依赖状态报告和可选安装。
* **帮助 / 概述** – 显示与 `h` / `-help` 选项相同的用法信息。
这种结构清晰地呈现了攻击路径,并允许用户以任何顺序在它们之间移动。
### 4.3 范围 3 – 弱凭据
脚本通过两种互补的方式满足弱凭据要求。
* **内置和自定义字典**
* 函数 `ensure_wordlist` 在脚本首次运行时创建一个默认的 `password.lst` 文件,其中包含典型的弱密码,例如 `password`、`admin123` 和简单的数字序列。
* 脚本还会写入一个默认的用户列表,其中包含 `root`、`admin`、`guest`、`user` 和 `test` 等用户名。
* 在进行弱凭据检查期间,用户可以选择使用此内置列表或提供自定义的密码列表。如果自定义列表路径无效,脚本将回退到默认列表。
* **涵盖的服务和使用的工具**
* **快速弱密码 NSE 扫描**(`quick_weak_scan`)使用 Nmap Scripting Engine 针对整个目标网络运行诸如 `ssh-brute`、`ftp-brute`、`smb-brute` 和 `rdp-brute` 等脚本。它使用提供的用户和密码列表,并保存文本和 XML 格式的结果。
* **基于 Hydra 的弱凭据检查**(`weak_credentials`)允许用户使用 `hydra` 测试特定的主机和服务。用户可以:
* 选择服务:SSH、RDP、FTP 或 SMB。
* 提供单个用户名或包含多个用户名的文件。
* 提供或确认密码列表。
* 如有需要可调整端口。
* 如果已安装 `hydra`,脚本将运行它并将输出存储在 `credentials/` 目录中。如果缺少 `hydra`,脚本会写出一个建议的 `hydra` 命令,以便学生仍然了解测试将如何运行。
这些功能共同实现了对任务书中列出的所有服务(SSH、RDP、FTP 和 SMB)的自动化弱密码检查,并满足了内置和用户提供字典的要求。
### 4.4 范围 4 – 使用资源文件自动化
`generate_msf_rc` 函数通过指导用户创建 Metasploit 资源(`.rc`)文件来实施范围 4。为用户提供了三个选项:
* **SSH 登录利用/扫描** – 默认情况下,生成一个使用 `auxiliary/scanner/ssh/ssh_login` 模块的 `.rc` 文件。脚本会询问:
* `RHOSTS`(单个主机、网络或主机列表),
* `USERNAME`,
* `PASS_FILE`,
* `THREADS`。
* **创建一个 handler** – 生成一个 `.rc` 文件,以启动用于反向 shell payload 的 multi/handler。脚本会提示:
* Payload 类型(默认:`windows/meterpreter/reverse_tcp`),
* `LHOST`,
* `LPORT`(验证是否为数字)。
* **使用建议器** – 生成一个 `.rc` 文件,针对给定的 Metasploit 会话 ID 运行 `post/multi/recon/local_exploit_suggester`。
在 `metasploit/` 目录中生成选定的 `.rc` 文件后,脚本会询问用户是否要使用该文件运行 `msfconsole -r`。如果 `msfconsole` 可用且用户回答“是”,脚本将使用正确的选项启动 Metasploit。如果不可用,用户仍然拥有一个随时可用的 `.rc` 文件。
此行为符合生成 SSH exploit、handler 和建议器资源文件,并让用户选择执行它们的要求。
### 4.5 范围 5 – 生成 payload
Payload 生成由 `generate_payload` 函数处理。它遵循项目要求,收集来自用户的必要信息:
* 存储 payload 的目录(默认:当前运行的 `payloads/` 子目录)。
* Payload 文件的基本名称(例如 `payload`)。
* `LHOST` – 反向连接应返回的 IP 地址或主机名。
* `LPORT` – 用于反向连接的端口,验证是否为数字。
* Payload 类型:
* Windows Meterpreter reverse TCP,
* Linux x64 Meterpreter reverse TCP,或
* 用户输入的完全自定义的 payload 字符串。
* 输出格式(例如 `exe`、`elf`、`asp`、`msi`、`raw`)。根据选择的 payload 系列提供合理的默认值。
如果已安装 `msfvenom`,脚本将使用提供的参数运行它,并将 payload 文件写入所选目录。否则,脚本会打印一条建议的 `msfvenom` 命令,以便用户确切了解如何手动创建 payload。
### 4.6 范围 6 – 数据渗出助手
`data_exfil_helper` 函数不直接执行渗出。相反,它安全地生成示例命令,渗透测试人员可能会使用这些命令来定位和准备敏感文件以进行传输。这符合项目任务书的要求,任务书强调生成命令而不是实际窃取数据。
该函数首先询问:
* 目标操作系统:`linux` 或 `windows`。
* 要搜索的根目录(Linux 上默认为 `/`,Windows 上默认为 `C:\`)。
* 要压缩的路径或模式(可选;可能包括诸如 `/home/user/*.docx` 之类的通配符)。
* 可选的 SCP 目标,例如 `user@attacker-ip:/tmp`。
根据操作系统的不同,脚本随后将相应的命令写入 `logs/data_exfil_commands.txt`:
* **Linux 命令**:
* 使用 `find` 搜索文件名中包含 `password`、`.docx` 或 `.xlsx` 的文件。
* 使用 `zip` 将选定文件压缩到 `/tmp/exfil.zip` 中。
* 使用 `64` 将 ZIP 文件编码为 `/tmp/exfil.zip.b64`。
* 使用 `scp` 将编码后的文件复制到攻击者机器。
* **Windows 命令**:
* 带有开关 `/s /b` 的 `dir` 以递归搜索匹配的文件名。
* PowerShell `Compress-Archive` 创建 `C:\exfil.zip`。
* `certutil -encode` 将 ZIP 文件转换为 `C:\exfil.zip.b64`。
* `pscp`(PuTTY SCP 客户端)将编码后的文件传输给攻击者。
如果本地缺少诸如 `zip`、`base64`、`scp` 或 `pscp` 等辅助工具,脚本会将此情况记录在日志中,以便用户意识到在命令工作之前需要进行额外的设置。
### 4.7 范围 7 – 日志记录和结果搜索
范围 7 通过结合日志记录、横幅和最终总结来实施:
* **阶段横幅** – 在每个主要步骤之前,脚本会打印一个横幅(例如,“阶段 2 – 网络扫描”),以便用户清楚当前的活动。
* **会话日志** – 所有重要消息都会写入 `logs/session.log`,包括工具可用性、扫描命令、文件路径和错误。
* **操作摘要** – `finalize_session` 函数打印一个“会话摘要”横幅,总结依赖状态,并列出存储在 `SESSION_ACTIONS` 中的高级操作。
* **在结果中搜索** – `search_results` 函数允许用户键入搜索词,并在整个运行目录中运行递归 `grep`。这便于在存储的输出文件中查找特定的 IP 地址、主机名、凭据或漏洞名称。
这种方法确保学生能够重放会话期间发生的事情,并快速定位相关信息。
### 5. 使用的工具及理由
该脚本旨在与一组广泛使用的渗透测试工具配合工作。
* **Nmap** – 执行 TCP 和 UDP 端口扫描、服务和版本检测,并使用 NSE 脚本进行弱密码暴力破解和识别已知漏洞。
* **Masscan** – 充当快速 UDP 发现扫描器。脚本使用它快速识别活动的 UDP 端口,然后仅针对这些端口运行更详细的 `nmap -sU` 扫描。
* **Hydra** – 使用用户名和密码列表对 SSH、RDP、FTP 和 SMB 等服务执行并行登录尝试。
* **Searchsploit** – 基于 Nmap XML 输出,将发现的服务和版本与 Exploit-DB 中的公开 exploit 进行匹配。
* **Metasploit(****`msfconsole`****)** – 执行资源文件以自动化 exploit 尝试、handler 和本地 exploit 建议器。
* **Msfvenom** – 根据用户指定的参数生成 payload 二进制文件(例如 Windows 和 Linux Meterpreter 反向 shell)。
* **Zip、scp、base64、pscp** – 在数据渗出阶段提供搜索、压缩、编码和传输潜在敏感文件的构建块。
该脚本包含一个依赖项检查器,以确保这些工具可用,并在可能的情况下使用 `apt-get` 安装缺少的包。这减少了初学者的设置摩擦,并清楚地显示了每次运行中哪些功能是活动的或受限的。
### 6. 示例使用工作流
使用此脚本的典型实验室工作流如下:
* 学生使用 `sudo ./breach_point.sh` 运行脚本。
* 脚本显示一个标头横幅,并提供通过按 `h` 或 `H` 显示完整帮助/概述的选项。
* 脚本提示输入目标网络、输出目录和扫描类型(基础或全面)。
* 脚本检查并根据请求安装核心依赖项,然后显示主菜单。
* 学生选择 **运行网络扫描** 以执行 TCP/UDP 扫描,并(在全面模式下)执行额外的 NSE 漏洞检查和 Searchsploit 映射。
* 学生选择 **弱凭据检查** 以针对特定服务运行基于 NSE 的暴力破解或基于 Hydra 的测试。
* 如果发现可利用的弱点,学生使用 **生成 Metasploit** **`.rc`** **文件** 和 **生成 payload** 来创建用于漏洞利用的 handler 和 payload。
* 学生使用 **数据渗出助手** 生成用于在 Linux 或 Windows 目标上搜索、压缩、编码和传输文件的示例命令。
* 学生使用 **在结果中搜索** 在保存的输出中定位特定的发现。
* 退出时,脚本会打印会话摘要和执行的关键操作。所有输出和日志都保留在带时间戳的运行目录中,以便日后查看和报告。
此序列与渗透测试生命周期非常吻合:侦察、漏洞利用、后漏洞利用和数据渗出。
### 7. 局限性和未来的改进
虽然脚本涵盖了所有主要的项目要求,但仍存在一些局限性和有待进一步改进的领域:
* **错误处理和验证** – 实现了基本检查(例如非空输入和数字端口),但可以添加对 IP 格式、网络范围和文件路径的更详细验证。
* **用于针对性攻击的服务检测** – 目前,弱凭据检查和 Metasploit 资源文件依赖于手动输入主机、用户和端口。未来的版本可以自动解析 Nmap 结果并建议预填充的值。
* **支持额外的服务和 payload** – 脚本重点关注用于弱凭据的 SSH、RDP、FTP 和 SMB,以及用于 payload 的两个常见 Meterpreter 系列。随着学生的进步,可以对其进行扩展以涵盖更多的服务和 payload 类型。
* **跨发行版支持** – 脚本假设存在 `apt-get` 用于软件包安装。支持其他包管理器(例如 `yum` 或 `dnf`)可以使其更具可移植性。
反思这些局限性是学习过程的一部分。它有助于识别如何在更高版本或更高级的课程中改进当前的自动化。
### 8. 结论
本报告描述了如何设计和实现 `Project Breach Point - Automation Script` 以满足项目任务书的要求。该脚本引导用户从初始侦察到弱凭据发现、漏洞利用设置、payload 生成和数据渗出命令构建,同时保持输出的有条理和记录。
对于渗透测试的初学者来说,该脚本既是一种学习辅助工具,也是一种实用的自动化工具。它演示了如何将常见的安全工具组合成一个结构化、可重复的工作流,以及如何使用 Bash 脚本在安全的实验室环境中模拟真实的攻击者行为。
标签:CTI, 应用安全