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,也不覆盖逻辑漏洞与配置错误。