searchsploit illegal option -- - 与 Exploit-DB 本地漏洞检索排查

searchsploit illegal option -- - 与 Exploit-DB 本地漏洞检索排查

仅供已获得书面授权的安全测试使用。

searchsploit 是 Exploit-DB 的命令行检索工具,把官方漏洞库整份下载到本地,按关键词、CVE 编号或 EDB-ID 检索已公开的利用代码与 PoC。检索过程不联网,适合在内网或隔离环境里查资料。

用惯了 GNU 风格的参数名,容易踩到 illegal option -- - 这条报错,它的含义和常规的参数写错不太一样,处置写在下面第一节。

报错 illegal option -- -

执行带长参数的检索命令,报错原文:

text 复制代码
/usr/bin/searchsploit: illegal option -- -
Usage: searchsploit [options] term1 [term2] ... [termN]

这条报错的真实含义是:searchsploit 用的是 getopts,只认单字母短参数 ,没有 --help、--version 这类 GNU 长参数。看到 illegal option -- - 基本可以判定是在命令里写了 --xxx 形式。

对照处置:

bash 复制代码
# 报错的写法
searchsploit --version          # illegal option -- -

# 正确的写法:查版本看包信息
dpkg -l exploitdb | tail -1

# -h 是短参数,可以正常打印用法
searchsploit -h

少数长参数是有意保留的,比如 --nmap、--cve、--exclude、--id、--disable-colour,它们确实以 -- 开头,能正常识别。判据是看 searchsploit -h 的列表里有没有,不在列表里的长参数一律按上面的报错处理。

报错没有检索结果但命令退出码为 0

按关键词搜不到东西时,searchsploit 不报错,只打印一行说明后正常退出:

text 复制代码
Exploits: No Result
Shellcodes: No Result

这不算命令失败,脚本里靠退出码判断会误以为检索成功。要区分「确实没有」和「参数写错」,用 JSON 输出看结构:

bash 复制代码
searchsploit -j apache 2.4.49 | jq '.RESULTS_EXPLOIT | length'

返回 0 就是真的没有命中,先把关键词放宽(去掉版本号)再试。

报错 Exploit-DB 目录不存在或索引文件缺失

本地库没装全、或从 git 克隆后没跑初始化脚本时,检索会报路径找不到:

text 复制代码
/usr/bin/searchsploit: line 1183: cd: /usr/share/exploitdb: 没有那个文件或目录

或者索引文件读不到:

text 复制代码
Exploits: No Result
Shellcodes: No Result

判定方法:直接看库根目录和两个索引文件在不在。

bash 复制代码
ls -d /usr/share/exploitdb
ls -l /usr/share/exploitdb/files_exploits.csv

目录不存在,用 apt 重装包;索引文件在但行数为 0,说明下载中断,重新拉一次:

bash 复制代码
sudo apt install --reinstall exploitdb
searchsploit -u

从 git 安装的场合,库路径由脚本里的变量决定,索引文件要另行下载,缺文件时报的就是上一条错误,按官方仓库的 README 补一次索引下载即可。

安装与更新

Kali 自带,包名 exploitdb。本次实测环境为 Kali GNU/Linux Rolling 2025.4:

bash 复制代码
dpkg -l exploitdb | tail -1
# ii  exploitdb  20251101-0kali1  all  Searchable Exploit Database archive

本地库放在 /usr/share/exploitdb,全部数据来自两个索引文件:

bash 复制代码
wc -l /usr/share/exploitdb/files_exploits.csv \
      /usr/share/exploitdb/files_shellcodes.csv
#   46923 /usr/share/exploitdb/files_exploits.csv
#    1066 /usr/share/exploitdb/files_shellcodes.csv

首行是表头,实测本地有 46922 条利用代码与 1065 条 shellcode。索引字段依次是 id、file、description、date_published、author、type、platform、port、date_added、date_updated、verified、codes、tags、aliases、screenshot_url、application_url、source_url。命令里能按这些字段做后续过滤。

更新本地库:

bash 复制代码
searchsploit -u

这条命令按当前的安装方式来更新,deb 包环境下走发行版包管理(Kali 下即 apt),git 或 Homebrew 安装的则改用对应仓库,实测提示是按周节奏。装完的版本滞后时可以直接对比:

bash 复制代码
apt-cache policy exploitdb
# 已安装:20251101-0kali1
# 候选: 20260205-0kali1

检索

按关键词检索,多个词之间是 AND 关系:

bash 复制代码
searchsploit apache 2.4.49

结果分两列,左边是标题,右边是本地相对路径:

text 复制代码
Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE) | multiple/webapps/50383.sh

常用检索开关:

  • -t:只匹配标题(默认标题与路径都参与匹配)
  • -e:精确匹配标题,且词序必须一致
  • -s:严格匹配,关闭版本区间的模糊匹配
  • -c:区分大小写(默认不区分)
  • --exclude="X|Y":排除命中项,多个值用竖线分隔
  • --cve:直接按 CVE 编号检索
  • -o:标题过长时不截断,允许溢出显示
bash 复制代码
searchsploit linux kernel 3.2 --exclude="(PoC)|/dos/"
searchsploit --cve 2021-44228

按 CVE 检索时返回的是该编号在库中关联的全部条目:

text 复制代码
Apache Log4j 2 - Remote Code Execution (RCE)      | java/remote/50592.py
Apache Log4j2 2.14.1 - Information Disclosure     | java/remote/50590.py

索引与文件

/usr/share/exploitdb 下按类型分目录:exploits/ 放利用代码,shellcodes/ 放 shellcode,再按平台与类型两级组织。检索结果的第二列就是这个相对路径,例如 exploits/multiple/webapps/50383.sh 表示多平台 Web 应用类型,拼上库根目录即文件实际位置:

bash 复制代码
ls -l /usr/share/exploitdb/exploits/multiple/webapps/50383.sh

要看结果的 EDB-ID 而不是路径,加 --id;需要更详细的信息用 -v;写成日志时不想带高亮加 --disable-colour:

bash 复制代码
searchsploit --id apache 2.4.49
searchsploit --disable-colour linux kernel 3.2 > result.txt

定位与取用

标题和路径不够用时,用 EDB-ID 反查完整信息:

bash 复制代码
searchsploit -p 50383
#   Exploit: Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE)
#       URL: https://www.exploit-db.com/exploits/50383
#      Path: /usr/share/exploitdb/exploits/multiple/webapps/50383.sh
#     Codes: CVE-2021-41773
#  Verified: True
# File Type: ASCII text

Verified: True 表示 Exploit-DB 已实际验证过这份代码。取用有三种方式:

bash 复制代码
searchsploit -m 50383    # 复制到当前工作目录
searchsploit -x 50383    # 用分页器打开查看
searchsploit -w 50383    # 只输出 Exploit-DB 在线地址

-m 把文件拷到当前目录,适合之后手工调整参数;-x 直接打开,只读,不改动本地文件。

要接后续脚本时用 JSON:

bash 复制代码
searchsploit -j apache 2.4.49 \
  | jq '.RESULTS_EXPLOIT[] | {ID:."EDB-ID", T:.Title, P:.Path}'

JSON 顶层有 SEARCH 与 DB_PATH_EXPLOIT 两个字段,结果都在 RESULTS_EXPLOIT 数组里,每条带 EDB-ID、Title、Date_Published、Date_Added、Date_Updated、Author、Type、Platform、Port、Verified、Codes、Path 等字段。

与扫描结果联动

--nmap 接受一份带服务版本信息的 Nmap XML,把扫描到的服务逐条回到库里比对:

bash 复制代码
nmap -sV -oX scan.xml 192.168.1.0/24
searchsploit --nmap scan.xml

这一步只做匹配,命中是否真的可利用,还要看目标服务版本是否落在利用代码写明的区间内。

注意事项

  • 本地库滞后是主要风险来源。从漏洞披露到进 Exploit-DB 通常有间隔,本地索引的更新时间就是判断依据;检索不到不代表不存在。
  • 命中不等于可利用。库里相当比例的条目是本地提权或拒绝服务,与目标的服务暴露方式不匹配,取用前先看清 Type 与 Platform 两列。
  • -m 取下来的脚本默认没有执行权限,交给目标之前应先通读一遍代码,确认它不是针对其他版本,或带有额外的破坏性动作。
  • 不适用边界:searchsploit 只检索已公开收录的利用代码,不含未公开或商业 PoC,也不覆盖逻辑漏洞与配置错误。
相关推荐
EasyGBS1 小时前
社区、校园安防难统一?国标GB28181公网平台EasyGBS视频系统,打破安全监管难题!
深度学习·安全·自动化
pt10431 小时前
Cisco设备网络安全系列-3:远程访问虚拟专用网、站点间虚拟专用网与Cisco SD-WAN安全
网络·安全
Xudde.1 小时前
DC-6 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
Patrick在香港1 小时前
你写的「比较 token」函数,正在用 36 纳秒泄露密码:时序攻击实测
python·安全·标准库·时序攻击·常量时间
躺柒2 小时前
读数据安全架构设计与实践03身份认证(上)
网络安全·信息安全·数据安全·安全架构·身份认证
deepseek232 小时前
MCP SSRF 连环漏洞拆解:从 Google 到 mcp-server-fetch,Agent 的信任链如何变成攻击链
安全·漏洞分析·ssrf·ai agent·mcp
Xudde.2 小时前
Mr-Robot 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
聚铭网络3 小时前
你的“三高一弱”排查到位了吗?
安全