【免费下载链接】niktoNikto web server scanner项目地址https://gitcode.com/gh_mirrors/ni/nikto点击查看免费下载Nikto 是一款基于 Perl 的开源 Web 服务器扫描器通过内置的测试数据库与插件体系对目标 Web 服务器执行漏洞探测、配置检查与信息泄露检测。本篇指南以仓库 README.md 为骨架结合 program/nikto.pl 主程序、program/nikto.conf.default 配置文件与 program/plugins/nikto_core.plugin 核心插件源码系统讲解 Nikto 的安装方式、全部命令行参数、配置文件调优、报告输出格式以及新引入的 Nikto DSL 响应匹配器读者阅读后可独立完成从部署到定制扫描的完整实战流程。项目概览Nikto 是一个 Web 服务器扫描器当前仓库代码版本标识为 2.6.1见 program/nikto.pl主脚本位于仓库的program/目录下。它通过db_tests等数据库文件驱动扫描并配合plugins/目录下的大量插件如nikto_cgi.plugin、nikto_ssl.plugin、nikto_shellshock.plugin等实现能力扩展。在扫描流程上program/nikto.pl 依次完成配置初始化config_init、目录建立setup_dirs、SSL 引擎选择LW2::init_ssl_engine、插件加载load_plugins、目标解析set_targets、数据库加载load_databases、扫描项设定set_scan_items随后逐目标执行端口探测与漏洞测试最后通过报告插件输出结果。使用前提Nikto 面向授权范围内的安全测试。主程序头注释明确声明“本程序仅用于授权方式”见 program/nikto.pl请勿对未授权的目标使用。安装与运行源码方式运行从仓库克隆后主脚本位于program/子目录git clone https://github.com/sullo/nikto # 主脚本位于 program/ 目录 cd nikto/program # 使用 shebang 解释器直接运行 ./nikto.pl -h http://www.example.com # 若忘记 chmod可用 perl 显式调用 perl nikto.pl -h http://www.example.com运行前需保证系统安装了 Perl 及其依赖模块。仓库 Dockerfile 中列出了 Nikto 运行所需的 Perl 组件清单Alpine 包名perl、perl-net-ssleaySSL 支持替代 Net::SSL 以支持 SAN 提取、perl-json、perl-io-socket-ssl、perl-xml-writerXML 报告、perl-mime-base64、perl-xml-libxmlXML 校验。这些即是在非容器环境下需要自行安装的模块参考。Docker 方式运行README 提供了三种镜像获取/构建路径从 Docker Hub 拉取docker pull hackllc/nikto:latest从 ghcr.io 拉取docker pull ghcr.io/sullo/nikto:latest从仓库 Dockerfile 自行构建git clone https://github.com/sullo/nikto.git cd nikto docker build -t hackllc/nikto . # 不带参数运行可显示完整帮助 docker run --rm hackllc/nikto # 基本用法 docker run --rm hackllc/nikto -h http://www.example.com # 挂载 /tmp 卷以保存特定格式报告 docker run --rm -v $(pwd):/tmp hackllc/nikto -h http://www.example.com -o /tmp/out.json镜像基于alpine:3.23.3创建了非 root 用户nikto并以该用户身份运行ENTRYPOINT直接指向/opt/nikto/nikto.pl见 Dockerfile。因此容器内传递的参数即 nikto.pl 的命令行参数-o /tmp/out.json配合-v $(pwd):/tmp挂载即可把报告落盘到宿主机当前目录。命令行参数全解README 完整列出了全部命令行选项以下逐一说明表示该参数需要附带一个值目标与连接控制参数说明-host/-url目标主机/URL-url是-host的别名-port端口默认 80-ssl强制对该端口启用 SSL 模式-nossl禁用 SSL 使用-ipv4/-ipv6仅使用 IPv4 / 仅使用 IPv6-vhost虚拟主机用于设置 Host 头-root为所有请求前置根路径格式为/directory-noslash去除 URL 尾部的斜杠如/admin/变为/admin-timeout请求超时默认 10 秒-Pause测试之间的暂停时间秒-maxtime每个主机的最长测试时间如1h、60m、3600s-nolookup禁用 DNS 反查-check6检查 IPv6 是否可用连接 ipv6.google.com或 nikto.conf 中配置的地址-followredirects跟随 3xx 重定向到新位置-useproxy使用 nikto.conf 中定义的代理或直接传http://server:port-nointeractive禁用交互功能认证与证书参数说明-id主机认证格式为id:pass或id:pass:realm-key客户端证书密钥文件-RSAcert客户端证书文件在 program/nikto.pl 中可以看到-key与-cert任一缺失时会被自动补齐为另一个值即只需要指定其中一个主程序会将其同时用作证书与密钥。探测行为控制参数说明-Cgidirs扫描这些 CGI 目录none、all或类似/cgi/ /cgi-a/的具体目录列表。主程序中该参数在 cgi 插件被禁用时依然生效见 program/nikto.pl-evasion编码绕过技巧见下表-mutate猜测附加文件名见下表-mutate-options为 mutate 提供附加信息-Tuning扫描调优见下表-Plugins要运行的插件列表默认 ALL-list-plugins仅列出所有可用插件不执行测试-Platform目标平台nix、win、all-Userdbs只加载用户数据库all表示禁用标准库仅加载用户库tests表示仅禁用 db_tests 并加载 udb_tests-useragent强制指定 User-Agent而不是从数据库提取-Add-header添加 HTTP 头可多次使用每次一对-nocookies不使用响应中的 Cookie默认会存储并回发-no404禁用 Nikto 猜测 404 页面-404code始终将这些 HTTP 状态码视为否定响应格式为302,301-404string始终将响应体中该字符串视为否定响应支持正则表达式-Save将阳性响应保存到该目录.表示自动命名-evasion编码绕过选项值含义1随机 URI 编码非 UTF82目录自引用/./3URL 提前结束4前置长随机字符串5伪造参数6用 TAB 作为请求分隔符7改变 URL 大小写8使用 Windows 目录分隔符\A用回车符0x0d作为请求分隔符B用二进制值 0x0b 作为请求分隔符-mutate文件名猜测选项值含义1用所有根目录测试所有文件2猜测密码文件名3通过 Apache/~user型请求枚举用户名4通过 cgiwrap/cgi-bin/cgiwrap/~user型请求枚举用户名5尝试暴力枚举子域名假定主机名为父域6根据提供的字典文件猜测目录名-Tuning扫描调优选项值含义1有趣文件 / 日志中曾出现的文件2错误配置 / 默认文件3信息泄露4注入XSS/脚本/HTML5Web 根目录内的远程文件获取6拒绝服务7服务器级远程文件获取8命令执行 / 远程 Shell9SQL 注入0文件上传a认证绕过b软件识别c远程源包含dWebServicee管理控制台x反向调优即包含除指定项外的所有项这些调优编号与测试数据库db_tests中每条记录的字段 3 一一对应program/databases/db_tests 文件头部的注释即列出了 0~e 的完整调优类别说明扫描时主程序依据-Tuning决定启用哪些类别的测试。输出与显示参数说明-Display控制显示输出见下表-output将输出写入该文件.表示自动命名-Format保存文件-o的格式可多选并用逗号分隔-ask是否询问提交更新yes默认逐次询问、no不询问不发送、auto不询问直接发送-nocheck启动时不检查更新-Display显示选项值含义1显示重定向2显示接收到的 Cookie3显示所有 200/OK 响应4显示需要认证的 URLD调试输出E显示所有 HTTP 错误P向 STDOUT 打印进度S清洗输出中的 IP 与主机名V详细输出配置与维护参数说明-config使用此配置文件-Option覆盖 nikto.conf 中的某个选项可多次使用-dbcheck检查数据库及其他关键文件的语法错误-Version打印插件与数据库版本-Help显示帮助信息配置文件 nikto.conf 详解Nikto 的默认配置样例位于 program/nikto.conf.default。官方建议如需自定义请复制为nikto.conf再修改以免升级时被覆盖。以下为各配置项的说明更新与遥测配置项说明UPDATESyes每次提交前询问是否发送版本更新信息可取值yes/no/auto与-ask参数对应。Nikto 只发送相关版本信息不发送IP、主机名等服务器特定信息CIRTcirt.net更新服务器名VERSION_APIhttps://telemetry.hack.llc/products.json版本检查 API。成功的检查结果会在EXECDIR/.last_update_check缓存 6 小时删除该文件可强制重新检查或用-nocheck完全跳过代理与 Cookie# 代理设置——仍需用 -useproxy 启用 #PROXYHOST127.0.0.1 #PROXYPORT8080 #PROXYUSERproxyuserid #PROXYPASSproxypassword # 随所有请求发送的 Cookie多个用分号分隔 #STATIC-COOKIEcookie1cookie value;cookie2cookie val主程序在解析目标后会读取STATIC-COOKIE并写入每个目标的 Cookie jar见 program/nikto.pl之后所有请求都会携带这些静态 Cookie。扫描行为配置项说明CHECKMETHODSGET探测 HTTP(S) 服务器存活时使用的 HTTP 方法。某些服务器如 autopsy web server不实现 HEAD 方法因此默认用 GETFAILURES20放弃前的失败次数设为 0 可完全禁用LW_SSL_ENGINEauto选择 SSL 库SSLeay使用 Net::SSLeay、SSL使用 Net::SSL不推荐不支持 SAN 提取、auto自动选择最佳可用。主程序会据此初始化 SSL 引擎并在检测到 Net::SSL 时输出 SAN 提取警告见 program/nikto.plSSLKEEPALIVE0默认启用 TLS 连接复用对行为异常的服务器可设为 0或使用-nosslkeepalive禁用CHECK6HOSTipv6.google.com/CHECK6PORT443-check6标志使用的可访问 IPv6 主机与端口目录与插件宏# 指定各文件位置默认自动探测 # EXECDIR/opt/nikto # PLUGINDIR/opt/nikto/plugins # DBDIR/opt/nikto/databases # TEMPLATEDIR/opt/nikto/templates # DOCDIR/opt/nikto/docs # 默认插件宏 # 移除设计为独立运行的插件 EXTRASdictionary;siebel DEFAULTALL;-EXTRAS;tests(report:500)DEFAULT宏表示默认加载全部插件减去EXTRASdictionary、siebel两个独立运行插件并启用tests插件且指定报告阈值 500。其余默认项还包括# 默认 HTTP 版本必要时会自动调整 DEFAULTHTTPVER1.1 # DTD 文件位置 NIKTODTDtemplates/nikto.dtd # 覆盖 db_variables/udb_variables 中的 RFIURL远程文件应返回 ?php phpinfo(); ? #RFIURL # 从不告警的 ID 列表仅对 db_tests 加载的 ID 生效 #SKIPIDS # 默认命令行选项不能是需携带值的选项用于所有运行 #CLIOPTS-g -a注意RFIURL主程序会优先使用配置中的RFIURL覆盖数据库变量若两者都未定义则输出提示并跳过 RFI 测试见 program/nikto.pl。SQL 直接上报配置# 数据库类型mysql 或 postgresql #DB_TYPEmysql #DB_HOSTlocalhost #DB_PORT3306 #DB_NAMEnikto #DB_TABLEnikto_table # 注意凭据通过环境变量 NIKTO_DB_USER 和 NIKTO_DB_PASS 提供使用-Format sqldSQL Direct时除在配置中填写上述项外还需通过环境变量NIKTO_DB_USER、NIKTO_DB_PASS提供数据库凭据。对应的建表 Schema 可参考 documentation/nikto_schema_mysql.sql 与 documentation/nikto_schema_postgresql.sql。报告输出格式-Format支持同时指定多种格式逗号分隔可用格式包括格式说明csv逗号分隔值jsonJSON 格式htmHTML 格式sql通用 SQLSchema 见 documentation 下文档sqldSQL 直插直接写入 MySQL/PostgreSQL 数据库txt纯文本xmlXML 格式若未指定-Format则从-output传入的文件扩展名推断格式。sqld格式需要上文所述的环境变量与配置项支持。仓库内置了多种报告插件实现nikto_report_csv.plugin、nikto_report_html.plugin、nikto_report_json.plugin、nikto_report_sqld.plugin、nikto_report_sqlg.plugin通用 SQL、nikto_report_text.plugin、nikto_report_xml.plugin。以 XML 报告为例program/plugins/nikto_report_xml.plugin 通过钩子函数xml_open、xml_host_start、xml_item、xml_close等生成符合 program/templates/nikto.dtd 的 XML输出后还会用 XML::LibXML 依据 DTD 校验报告合法性xml_validate_output。HTML 报告的页面结构则由program/templates/下的htm_start.tmpl、htm_host_head.tmpl、htm_host_item.tmpl、htm_summary.tmpl、htm_end.tmpl、htm_close.tmpl模板拼装。Nikto DSL 匹配器Nikto 的测试数据库内置了一套迷你 DSL领域特定语言用于匹配响应这是 README 特别强调的新特性。所有匹配器可组合使用匹配器含义BODY:/!BODY:匹配 / 排除响应体中的内容HEADER:/!HEADER:匹配 / 排除 HTTP 头中的内容COOKIE:/!COOKIE:匹配 / 排除 HTTP Cookie 中的内容新增CODE:/!CODE:匹配 / 排除 HTTP 状态码多个匹配器可用AND 逻辑组合例如 README 给出的示例BODY:login!BODY:logoutHEADER:X-Powered-ByCOOKIE:sessionid该表达式匹配的条件是响应体包含login、不包含logout、响应头包含X-Powered-By、且存在名为sessionid的 Cookie四个条件全部满足才算命中。DSL 语法细节来自 db_tests 文件头program/databases/db_tests 文件头部对 DSL 语法给出了更完整的说明CODE:pattern匹配 HTTP 状态码如CODE:200、CODE:404|500BODY:pattern匹配响应体如BODY:error、BODY:(?i)phpHEADER:name:val匹配响应头如HEADER:server:apache、HEADER:content-type:COOKIE:name:val匹配响应 Cookie如COOKIE:sessionid:abc123、COOKIE:auth:!否定如!CODE:404、!BODY:error、!COOKIE:sessionid:条件间的 AND 逻辑|模式内部的 OR 逻辑正则语义(?i)大小写不敏感正则标志组合示例取自 db_tests 头注释CODE:200BODY:admin # 200 状态码 且 body 含 admin !CODE:404BODY:error # 非 404 且 body 含 error CODE:200|500HEADER:server:apache # 200 或 500 且 server 头为 apache BODY:(?i)php!BODY:error # body 含 php忽略大小写且不含 error CODE:200COOKIE:sessionid:.* # 200 且 sessionid cookie 匹配 .*数据库条目格式db_tests中每条测试记录的字段格式为见 program/databases/db_tests 文件头ID,References,Tuning,URI,Method,DSL,Message,Data,Headers实际条目示例000001,,b,/TiVoConnect?CommandQueryServer,GET,BODY:Calypso Server,The Tivo Calypso server is running. ...,,即测试 ID、参考链接、调优类别字段 3与-Tuning参数对应、请求 URI、HTTP 方法、第 6 字段 DSL 匹配表达式、告警消息、附加数据与请求头。主程序在加载数据库时通过build_matcher将第 6 字段的 DSL 编译为匹配闭包并挂载到对应测试项上见 program/plugins/nikto_core.plugin 附近。DSL 匹配器的源码级实现原理在 program/plugins/nikto_core.plugin 中DSL 的实现包含以下关键环节1. 解析与缓存build_matcher/parse_dslbuild_matcher首先调用expand_lfi_dsl展开LFI()占位符该占位符会被替换为LFIMATCHWIN与LFIMATCHNIX变量拼出的 OR 正则用于平台相关本地文件包含检测随后调用parse_dsl将 DSL 字符串编译为结构化树并缓存到%DSL_CACHE中同一表达式只解析一次见 program/plugins/nikto_core.plugin。2. 分组与优先级parse_dsl支持括号分组(...)嵌套并区分“OR 组”任一分支命中即可与“NOT 组”任一分支命中则整体失败即!(A||B)语义正则构造(?...)不会被误判为分组见 program/plugins/nikto_core.plugin 附近。DSL 层面的 OR 运算符是||而单个|属于正则内部语法二者被严格区分。3. 求值顺序dsl_evaluate匹配求值按“代价从低到高”执行——先匹配状态码code_neg/code_pos再匹配响应头与 Cookieheader_*/cookie_*最后才匹配需要扫描整个响应体的BODY正则分组最后递归求值可无限嵌套见 program/plugins/nikto_core.plugin。正向项匹配后还会收集$1..$9捕获组供告警消息插值使用。4. 与 404 判定协作dsl_requires_body_matchNikto 的 404 启发式判定有权否决发现但若某 DSL 的所有匹配路径都要求正向BODY:匹配即发现是由具体响应体内容驱动的则该发现优先于 404 猜测见 program/plugins/nikto_core.plugin。该判断基于解析后的结构而非原始字符串避免误把 BODY 令牌值中恰好出现的 BODY: 当作术语。测试数据库与插件体系Nikto 的扫描能力来自program/databases/与program/plugins/两套目录数据库program/databases/db_tests核心测试、db_404_strings404 页面识别、db_content_search、db_favicon、db_headers_common、db_headers_suggested、db_multiple_index、db_options、db_outdated、db_realms、db_server_msgs、db_useragents、db_variables等分别对应各类扫描数据来源。插件program/plugins/除核心插件nikto_core.plugin与LW2.pm外还包括nikto_cgi.plugin、nikto_ssl.plugin、nikto_shellshock.plugin、nikto_ms10_070.plugin、nikto_optionsbleed.plugin、nikto_springboot.plugin、nikto_apacheusers.plugin、nikto_robots.plugin、nikto_sitefiles.plugin、nikto_put_del_test.plugin、nikto_negotiate.plugin、nikto_multiple_index.plugin、nikto_favicon.plugin、nikto_content_search.plugin、nikto_cookies.plugin、nikto_headers.plugin、nikto_outdated.plugin、nikto_paths.plugin、nikto_auth.plugin、nikto_fileops.plugin、nikto_msgs.plugin、nikto_options.plugin、nikto_siebel.plugin、nikto_tests.plugin以及全部报告插件。可用-list-plugins查看当前环境的完整插件清单用-Plugins指定要运行的子集。仓库还提供了配套工具program/utils/nikto-bulk.sh批量扫描脚本与 program/utils/replay.pl请求重放工具。命令行手册见 documentation/nikto.1其 XML 源为 documentation/manpage.xml。许可证说明根据 README.md 与仓库文件Nikto 代码遵循 GPL v3 许可见 COPYINGCopyright (C) 2001–2026 Chris Sullo。LibWhisker 部分的许可见 COPYING.LibWhisker。数据库文件不在 GPL 许可范围内只能作为官方 Nikto 软件包或安装程序的一部分分发且仅供 Nikto 使用这也是从源码自建时需注意的分发约束。结语本文以 README 为基础完整覆盖了 Nikto 的两种运行形态源码与 Docker、全部命令行参数、配置文件调优、多格式报告输出以及 DSL 匹配器的语法与实现原理。如需深入建议对照 program/databases/db_tests 阅读真实测试条目的 DSL 写法并结合 program/plugins/nikto_core.plugin 理解匹配求值的完整路径。在实际使用中请始终牢记仅在获得授权的目标上运行扫描。赞分享【免费下载链接】niktoNikto web server scanner项目地址https://gitcode.com/gh_mirrors/ni/nikto点击查看免费下载相关推荐OpenSandbox Server 配置完全指南TOML 全参数解析与 Docker/Kubernetes 运行时实战OpenSandbox Server 配置完全指南TOML 全参数解析与 Docker/Kubernetes 运行时实战 导读 OpenSandbox 是面向人工智能AI 应用Agent 沙箱云原生后端代码智能体Gel Server 配置完全指南运行时配置参数与环境变量详解Gel Server 配置完全指南运行时配置参数与环境变量详解 本文基于 edgedb 仓库中 docs/reference/running/configur数据库图数据库关系型数据库wagmi 的 walletConnect 连接器完全指南安装、配置参数与源码原理wagmi 的 walletConnect 连接器完全指南安装、配置参数与源码原理 walletConnect 是 wagmi 生态中最常用的连接器Conn区块链Web3前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?