KALI LINUX 工具大全之web分析 --- Nikto (尼克托人)
nikto -update
但是由于wall的存在,不一定能更新成功
nikto -host 192.168.86.130 -port 80 或nikto -host http://192.168.86.130 或 nikto -h 192.168.0.1nikto -host www.baidu.com -port 443 -ssl 或nikto -host https://192.168.86.130:443
没有必要指定端口443是加密的,因为Nikto将首先测试常规HTTP,如果失败,则测试HTTPS。如果您确定它是一个SSL/TLS服务器,稍微指定-s (-ssl)将会加快测试速度(这对于在端口443上响应HTTP的服务器也是有用的,即使只有在使用加密时才提供内容)。
perl nikto.pl -h 192.168.0.1 -p 443 -ssl
多个端口
perl nikto.pl -h 192.168.0.1 -p 80,88,443
perl nikto.pl -h 192.168.0.1 -p 80-90
192.168.0.123:80
https://www.baidu.com:443/
www.163.com
nmap -p80 192.168.1.4/24 -oG - | nikto -host -
5.设置cookie,用于需要登录才能访问的网站
/etc/nikto.conf中修改即可
6.全量命令
7.反ids
逃逸 nikto -host http://192.168.1.34/dvwa/ -evasion 167
代理 nikto -host https://www.baidu.com -useproxy htpp://localhost:1080
延时
功能如下:
检查服务器配置项(例如是否存在多个索引文件,HTTP服务器选项)
默认文件和程序
不安全的文件和程序
过时的服务器和程序
特定版本的问题
识别已安装的Web服务器和软件
插件自动更新。
SSL支持(带有OpenSSL的Unix或带有ActiveState的Perl / NetSSL的Windows)
全面的HTTP代理支持
以纯文本,XML,HTML,NBE或CSV保存报告
模板引擎可轻松自定义报告
扫描服务器上的多个端口,或通过输入文件(包括nmap输出)扫描多个服务器
LibWhisker的IDS编码技术
使用Basic和NTLM进行主机身份验证(包括许多默认的id / pw组合)
子域猜测
Apache和cgiwrap用户名枚举
诱捕技术以“捕获” Web服务器上的内容
扫描调整以包括或排除所有类别的漏洞检查
交互状态,暂停和详细设置更改
功能简介
Nikto本身只是一个包装脚本,用于管理CLI并传递给插件。
Nikto基于LibWhisker(由RFP构建),并且可以在具有Perl环境的任何平台上运行。 它支持SSL,代理,主机身份验证,IDS逃逸等。 nikto的工作流程大致为200和404的http状态检查,然后运行每个插件。
Nikto并非被设计为隐形工具。它将在最快的时间内测试Web服务器,并且在日志文件或IPS / IDS中显而易见。但是,如果您想尝试一下(或测试您的IDS系统),则支持LibWhisker的反IDS方法。
作者:
Nikto 由 Chris Sullo 和 David Lodge 编写和维护。
LibWhisker 由 Jeff Forristal(Rain Forrest Puppy)编写。
译者注:原来的代码托管在google现在在github
大小只有400k
选项详解
(译者注:下面的+应该表示有多种可能参数值)
-ask+ 是否询问提交更新
yes 询问每一个(默认)
no 不问,不发送
自动 不问,只发送
-check6 用于检查是否支持 IPv6,通过连接 ipv6.google.com 或在 nikto.conf 文件中设置的其他 IPv6 网址来验证。
-Cgidirs+ 给cgi插件指定目录参数,
none 不扫描,
all 扫描所有,
自定义 例如/cgi-test/(必须包含斜杠)。
未指定 将测试config.txt中列出的所有CGI目录。
-config+ 指定备用配置文件,而不是安装目录中的config.txt。
-Display+ 显示输出的开关(例如: -Display 1234EP或者-D dv):
1 显示重定向
2 显示收到的Cookie
3 显示所有200/OK的响应
4 显示需要认证的URL
D 调试输出
E 显示所有http错误
P 进度信息输出到标准输出流(STDOUT)
S 清除输出结果中的ip和主机名
V 详细输出
-dbcheck 检查数据库和其他密码文件的语法错误
-evasion+ 编码技术:
1 随机URI编码(非UTF8)
2 自参照目录 (/./)
3 过早结束的URL
4 前置长随机字符串
5 伪参数
6 TAB作为请求分隔符
7 更改URL的大小写
8 使用Windows目录分隔符(\)
A 用回车符(0x0d)作为请求空格符
B 用二进制值 0x0b 作为请求空格符。
-followredirects 按照3xx重定向到新的位置
-Format+ 指定保存文件-o(-output)的格式,例如-Format htm 如果未指定,则默认值将从-output选项中指定的文件扩展名中获取。 如果不能获取文件格式,那么输出将只发送到标准输出。有效格式为:
csv 以逗号分隔的值
json JSON Format
htm HTML格式
nbe Nessus NBE格式
sql 通用 SQL SQL输出中使用的表的库可以在docs/nikto_schema.sql中找到。
txt 纯文本
xml XML格式 Nikto XML格式的DTD可以在“docs”目录(nikto.dtd)中找到,并且在默认情况下应该可以找到。
-Help 显示扩展帮助信息。
-host+ 目标主机。可以是主机的IP地址,主机名或文本文件。例如:-host 192.168.0.102。 单破折号(-)可用于标准输出。 也可以解析nmap -oG样式输出
-404code 指定要忽略的 HTTP 状态码,这些状态码被视为负面响应。选项的格式应为 "302,301"
-404string 指定在响应正文内容中要忽略的字符串,这些字符串被视为负面响应。字符串可以是正则表达式,以更好地匹配不同的字符串模式。
-id+ 用于主机基本主机身份验证。 格式为 id:pass 或 id:pass:realm
-ipv4 IPv4 Only
-ipv6 IPv6 Only
-key+ 指定客户端证书私钥文件的命令行选项,用于 SSL / TLS 握手过程中使用客户端证书来验证客户端身份。通常,此选项需要与 "-cert+" 选项一起使用,后者指定了客户端证书文件。
-list-plugins 列出所有可用插件,不执行扫描即退出。
-maxtime+ 每台主机的最大扫描时间(e.g., 1h, 60m, 3600s)
-mutate+ 用于生成可能的文件名猜测 。使用参考号指定类型,可以使用多个:
1 测试所有根目录下的所有文件
2 猜测密码文件名
3 通过Apache枚举用户名(/~user类型请求)
4 通过cgiwrap枚举用户名(/cgi-bin/cgiwrap/~user类型请求)
5 尝试暴力破解子域名,假设主机名是父域
6 尝试从提供的字典文件中猜测目录名称
-mutate-options 提供有关突变的其他信息,例如 字典文件
-nointeractive 禁用交互功能
-nolookup 禁止DNS lookups
-nossl 禁止SSL
-no404 禁止猜测404页面。这将减少对Web服务器的请求总数,在通过慢速链接或嵌入式设备检查服务器时可能更可取。 这通常会导致发现更多的误报。
-Option 允许用户在运行时覆盖 nikto.conf 文件中的选项。此选项可重复使用,允许用户设置或更改多个选项值。比如“-Option maxtime=60”,更改工具的最大扫描时间为 60 秒。
-output+ 指定输出文件 ('.' 为自动命名)使用的格式将从文件扩展名中获取。例如- o report.html 可以使用-Format选项来覆盖此设置(例如,以不同的扩展名写入文本文件。现有文件将附加新信息。
-Pause+ 每次测试之间延迟的秒数。 (seconds, integer or float)
-Plugins+ 指定运行的插件。 应该提供一个用逗号分隔的列表,其中列出了插件的名称。 可以使用-list-plugins查找名称。(默认: ALL),这里的ALL表示宏定义。
-port+ 指定端口 。要测试同一主机上的多个端口,请在-p(-port)选项中指定端口列表。 例如 80-90或80,88,90。 如果未指定,则使用端口80。
-RSAcert+ 客户端证书文件
-root+ 为所有请求指定 web根目录 将指定的值放在每个请求的开头。 这对于测试所有文件都位于某个目录下的应用程序或Web服务器很有用。 格式为 /directory
-Save 保存正面响应到目录下,这将为每个发现创建一个包含文本文件的输出目录,其中包含原始请求和响应、有关测试触发原因的附加信息以及请求和响应的 JSON 表示。此外,检查 replay.pl 以根据 JSON 输出重放请求。 ('.' 为自动命名)(译者注:在 HTTP 中,正面响应是指请求得到成功处理和返回相应的结果的情况,通常情况下,这些结果应该也是符合期望的,比如请求的页面成功加载、资源获取成功等。负面响应则是指请求未得到处理,或请求处理失败,返回错误代码或无效结果的情况。比如,请求的资源不存在、请求被拒绝、服务器内部发生错误等。)
-ssl 在端口上强制ssl模式。使用此选项将大大加快对HTTPS端口的请求,因为否HTTP请求将必须首先超时才测试。
-Single
对目标服务器执行单个请求。 (译者注:这个选项可能废弃)
-Tuning+ 测试类型调整。扫描优化可用于减少对目标执行的测试次数。通过指定包含或排除的测试类型,可以完成更快、更集中的测试。这在不希望出现某些文件类型的情况下非常有用,例如XSS或简单的“有趣”文件。
通过将测试类型的标识符指定给-T (-Tuning)选项。在默认模式下,如果-T将只执行指定的测试类型。例如,只能对目标执行“远程文件检索”和“命令执行”测试:
perl nikto.pl -h 192.168.0.1 -T 58
如果将“x”传递给-T然后,这将否定x后面的所有类型的测试。这在测试可能检查几种不同类型的利用时非常有用。例如:
perl nikto.pl -h 192.168.0.1 -T 58xb
可多选,给定的字符串将从左到右进行解析,任何x字符都将应用于该字符右侧的所有字符。例如 -Tuning 123bde :
有效的优化选项包括:
1 :感兴趣的文件/日志中看到的文件;在web服务器日志中发现的未知但可疑的文件或攻击
2 :配置不当/默认文件;这可能是文档,也可能是受密码保护的资源。
3 :信息泄露;揭示目标信息的资源。这可能是文件系统路径或帐户名。
4 :注入(XSS/脚本/HTML);这不包括命令注入。
5 :内部web根目录的远程文件检索;资源允许远程用户从web服务器的根目录中检索未经授权的文件。
6 :拒绝服务;资源允许针对目标应用程序、web服务器或主机的拒绝服务攻击(注意:没有试图进行有意的DoS攻击)。
7 :服务器范围内的远程文件检索;资源允许远程用户从目标上的任何位置检索未经授权的文件。
8 :命令执行/远程 shell;资源允许用户执行系统命令或生成远程外壳。
9 :SQL 注入;允许对数据库执行SQL的任何类型的攻击。
0 :文件上传;允许将文件上传到目标服务器的攻击。
a :身份验证绕过;允许客户端访问不应被允许访问的资源。
b :软件识别;安装的软件或程序可以被肯定地识别。
c :远程源包含;远程源代码包含是指在一个程序中,通过 URL 引入远程主机上的一个源代码文件的技术 ,通常被用来重用代码,简化编程和维护的过程。但如果没有经过正确的安全处理,这也可以被利用来攻击网站或服务器。攻击者可以利用远程源码包含漏洞,将其恶意代码作为参数传递给程序中的 include() 或者 require() 函数,由此可以利用代码注入漏洞,取得服务器的控制权。
d :Web 服务;
e :管理员控制台;
x :反选(即包括所有选项,除了指定的选项)。
-timeout+ 请求超时时间(默认 10s)
-Userdbs 用于加载用户自定义的数据库,而不是标准数据库。默认情况下,Nikto 工具会加载其自带的标准数据库进行扫描。
all 禁用标准数据库,只加载用户数据库
tests 只禁用db_tests并加载udb_tests
-useragent 使用配置文件中定义的HTTP代理
-until 运行到指定时间或时间段
-url+ 目标 host/URL ( -host的别名)
-update 直接从cirt.net更新插件和数据库。
虽然旧版本的Nikto使用-update选项,但从2.1.6版开始应该使用git(https://git-scm.com/)工具来更新(和安装)Nikto。大多数操作系统都有git的安装程序或包,也存在许多具有UI功能的程序。
git pull
维护人员尽了一切努力来确保git主分支始终稳定并正常工作。如果计划进行重大更改,这项工作将在新的分支机构中进行,以防止中断当前的用户和安装。
-usecookies 允许用户在今后的请求中使用来自响应的 cookies。
-useproxy
在Nikto中使用HTTP(S)代理有两种方式——通过nikto.conf文件,或者直接通过命令行。
要使用nikto.conf文件中,设置 PROXY*变量,然后使用-useproxy选项执行Nikto。所有连接都将通过配置文件中指定的代理进行中继。
perl nikto.pl -h localhost -p 80 -useproxy
要在命令行上设置代理,还可以使用-useproxy选项,并将代理集作为参数,例如:
./nikto.pl -h localhost -useproxy http://localhost:8080/
SOCKS代理不直接支持,但是可以通过proxychains或类似程序使用。
-Version 显示Nikto软件,插件和数据库版本。
-vhost+ 指定要发送到目标的主机头。
相关文件
nikto.conf Nikto全局选项配置文件。 可能会存在几个nikto.conf文件,并按以下顺序对其进行解析。 加载每个配置文件后,将取代之前设置的任何配置:
系统范围(例如/etc/nikto.conf)
主目录(例如$ Home /nikto.conf)
当前目录(例如./nikto.conf)
${NIKTO_DIR}/plugins/db* 漏洞数据库
${NIKTO_DIR}/plugins/*.plugin 所有插件
${NIKTO_DIR}/templates 输出模板
交互功能
Nikto包含几个可以在主动扫描期间更改的选项,前提是它运行在提供POSIX支持的系统上(*nix和其他一些操作系统)。在不支持POSIX的系统上,这些特性将被自动禁用。
在主动扫描期间,按下下面的任意键将打开或关闭列出的功能或执行列出的操作。请注意这些是区分大小写。每10个请求轮询一次输入,因此非常慢的扫描可能需要一段时间才能响应。
- 空格-报告当前扫描状态
- v-打开/关闭详细模式
- d-打开/关闭调试模式
- e-打开/关闭错误报告
- p-打开/关闭进度报告
- r-打开/关闭3xx/重定向显示
- c-打开/关闭cookie显示
- o-打开/关闭200/正常显示
- a-打开/关闭授权显示
- q-退出(优雅地)
- N-下一个主机/工作
- P-暂停
例子
-
进度报告(空格)
-
详细输出(v)
-
调试输出(d)
-
暂停(P)
插件简介
插件:parked
Parked Detection - 检查主机是否停放在注册商或广告位置。(译者注:这里的停放是计算机术语 ,指的是这个域名或ip并没有被分配出去。可能会显示一些广告页面)
作者:Sullo,版权(C) 2011 Chris Sullo
插件:Cookie
HTTP Cookie内部IP - 寻找HTTP请求返回的cookie中的内部IP地址。
作者:Sullo,版权(C) 2010 Chris Sullo
插件: report_nbe
NBE报告 - 生成一个NBE报告。
作者:Seccubus, Copyright (C) 2010 Chris Sullo
插件: origin_reflection
CORS Origin Reflection - 检查一个给定的Origin头是否反映在一个Access-Control-Allow-Origin头中。
作者:ss23, Copyright (C) 2017 Chris Sullo
插件:paths
Path Search - 查看链接路径以帮助填充变量
作者:Sullo, Copyright (C) 2012 Chris Sullo
插件: apache_expect_xss
Apache Expect XSS - 检查Web服务器是否有一个跨站脚本漏洞,通过 Expect: HTTP 头
作者:Sullo,版权所有(C) 2008 Chris Sullo
插件: multiple_index
多重索引 - 检查是否有多重索引文件
作者:Tautology,版权(C) 2009 Chris Sullo
插件:headers
HTTP headers - 对从HTTP请求返回的头信息进行各种检查。
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件: cgi
CGI - 枚举可能的CGI目录。
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件: strutshock
strutshock - 寻找 "strutshock "漏洞。
作者:Jeremy Bae, Copyright (C) 2017 Chris Sullo
插件:Domino
IBM/Lotus Domino Specific Tests - 执行IBM/Louts Domino特定测试以识别无需身份验证即可访问的Domino特定文件和服务器版本
(译者注:IBM开发的服务器产品,提供企业级的电子邮件、协作能力以及一个可定制的应用平台。)
由RealRancor编写,版权(C) 2016 Chris Sullo
插件:apacheusers
Apache用户 - 检查是否可以直接从Web服务器上列举用户名
作者:Javier Fernandez-Sanguinoi Pena, Copyright (C) 2008 Chris Sullo
选项:
size: 如果进行暴力破解时最大用户名
enumerate: 标志表示是否尝试列举用户
home: 寻找~user来列举
cgiwrap: 用户cgi-bin/cgiwrap来列举
dictionary: 用户字典文件的文件名
插件: shellshock
shellshock - 寻找bash 'shellshock' 漏洞。
作者:sullo,版权(C)2014 Chris Sullo
选项:
uri: uri来评估
插件: auth
Test Authentication - 尝试猜测身份验证领域(译者注:身份验证领域通常由 Web 服务器、Web 应用程序服务器和 Web 应用程序架构中的安全组件实现。这些组件使用不同的技术来实现身份验证和会话管理,例如基本身份验证、摘要身份验证、表单身份验证等)
作者:Sullo/Tautology,版权(C)2010 Chris Sullo
插件:fileops
File Operations - 将结果保存到一个文本文件。
作者:Sullo, Copyright (C) 2012 Chris Sullo
插件:dishwasher
dishwasher - 寻找联网洗碗机目录遍历的漏洞。
作者:Jeremy Bae, Copyright (C) 2017 Chris Sullo
插件:put_del_test
Put/Delete测试 - 试图通过PUT和DELETE HTTP方法来上传和删除文件。
作者:Sullo,版权(C) 2008 Chris Sullo
插件: report_html
报告为HTML - 产生一个HTML报告。
作者:Sullo/Jabra,版权所有(C) 2008 Chris Sullo
插件:clientaccesspolicy
clientaccesspolicy.xml - 检查客户访问文件是否存在,以及它是否包含通配符条目。
作者:Dirk Sullo, Copyright (C) 2012 Chris Sullo and Dr. Wetter IT-Consulting
插件:drupal
Drupal Specific Tests - 执行一系列的Drupal特定测试。
作者:Tautology,版权(C)2014 Chris Sullo
选项:
path: 模块的基本路径(通常可以在页面源代码中找到)。
0:标志为告诉插件要列举模块。
插件:httpoptions
HTTP选项 - 对从服务器返回的HTTP选项进行各种检查。
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件:embedded
嵌入式检测 - 检查主机是否是一个嵌入式服务器。
作者:Tautology, Copyright (C) 2009 Chris Sullo
插件:outdated
outdated - 检查网络服务器是否为最新版本。
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件:sitefiles
网站文件 - 根据网站的IP/名称寻找有趣的文件
作者:Sullo, Copyright (C) 2014 Chris Sullo
插件:docker_registry
docker_registry - 寻找docker注册
作者:Jeremy Bae, Copyright (C) 2018 Chris Sullo
插件:Siebel
Siebel检查 - 对已安装的Siebel应用程序执行一系列检查
作者:Tautology,版权(C) 2011 Chris Sullo
选项:
applications: 应用程序的列表
application: 要攻击的应用程序
languages: 语言列表
enumerate: 标志,表示我们是否要尝试列举已知的应用程序
插件:dictionary
字典攻击 - 试图用字典攻击已知的目录/文件
作者:Tautology,版权(C) 2009 Chris Sullo
选项:
method: 用来列举的http方法。
dictionary: 要查找的路径的字典。
插件: msgs
服务器信息 - 根据已知问题检查服务器版本。
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件:tests
Nikto测试 - 用标准的Nikto测试来测试主机
作者:Sullo, Tautology, Copyright (C) 2008 Chris Sullo
选项:
tids: 允许您指定要运行的测试ID范围。例如,要运行1到10的测试,您将使用选项`-T 1-10`。
以下是一些常见的 Nikto 测试ID:
- 0:测试是否可以打开指定 URL
- 1:查找敏感文件(robots.txt、sitemap.xml 等)
- 2:测试目标 Web 服务器软件的版本号和类型
- 3:测试是否存在备份/临时文件或目录
- 4:测试 Web 服务器是否支持 PUT 和 DELETE
- 5:测试是否存在未受限制的目录遍历/文件包含漏洞
- 6:测试是否存在未正确配置的身份验证和会话管理
- 7:测试是否存在敏感信息泄露(电子邮件、IP 地址等)
- 8:测试是否存在跨站点脚本(XSS)漏洞
- 9:测试是否存在 SQL 注入漏洞
- 10:测试是否存在本地文件包含漏洞
- 11:测试是否存在远程执行漏洞
- 12:测试是否存在代码注入漏洞
- 13:测试是否存在命令执行漏洞
注意:这只是一小部分可用的测试ID,Nikto 具有数百个测试,您可以在使用 Nikto 时使用其他相应的选项和插件进行配置。
passfiles: 标志,表示是否检查常见的密码文件
all: 标志表示是否检查所有目录的所有文件
report: 在通过的测试数量之后报告状态的标志。例如,要在每5个测试之后收到报告,您将使用选项`-r 5`。
插件: report_text
文本报告 - 生成一个文本报告。
由Tautology编写,版权(C) 2008 Chris Sullo
插件:favicon
Favicon - 针对已知的favicon检查Web服务器的favicon.
作者:Sullo, Copyright (C) 2008 Chris Sullo
插件: report_csv
CSV报告 - 产生一个CSV报告。
作者:Tautology, Copyright (C) 2008 Chris Sullo
插件: report_json
JSON报告 - 生成一个JSON报告。
作者:Gijs Kwakkel, Copyright (C) 2016 Chris Sullo
插件: robots
Robots - 检查 robots.txt 文件内是否有任何东西,并分析它的其他路径,以传递给其他脚本。
作者:Sullo,版权(C)2008 Chris Sullo
选项:
nocheck: 标志是禁止检查robots文件中的条目。
插件:ssl
SSL和证书检查 - 执行对SSL/证书的检查
作者:Sullo,版权所有(C)2010 Chris Sullo
插件:ms10_070
https://docs.microsoft.com/en-us/security-updates/securitybulletins/2010/ms10-070 检查 - 确定一个网站是否容易受到https://docs.microsoft.com/en-us/security-updates/securitybulletins/2010/MS10-070
作者:Sullo, Copyright (C) 2013 Chris Sullo
插件: content_search
内容搜索 - 搜索结果内容中的有趣字符串
作者:Sullo, Copyright (C) 2010 Chris Sullo
插件: report_xml
报告为XML - 产生一个XML报告。
作者:Sullo/Jabra, Copyright (C) 2008 Chris Sullo
插件: negotiate
协商 - 检查mod_negotiation的多视图。(译者注:`mod_negotiation` 可能指的是 Apache HTTP 服务器的一个模块,称为 "mod_negotiation"。它负责处理内容协商机制,该机制允许服务器根据客户端请求的首选项提供多种资源表示。例如,当客户端浏览器请求一个页面时,它可能支持多种语言和编码。通过 mod_negotiation,服务器可以选择和提供最符合客户端需求的资源版本。具体操作涉及文件类型、语言或字符集等元素的选择和协调。)
作者:Sullo, Copyright (C) 2013 Chris Sullo
插件: report_sqlg
通用SQL报告--产生对通用数据库的SQL插入。
作者:Sullo, Copyright (C) 2013 Chris Sullo
Defined plugin macros:
包含所有插件 @@ALL = "parked;cookies;report_nbe;origin_reflection;paths;apache_expect_xss;multiple_index;headers;cgi;strutshock;domino;apacheusers;shellshock;auth;fileops;dishwasher;put_del_test;report_html;clientaccesspolicy;drupal;httpoptions;embedded;outdated;sitefiles;docker_registry;siebel;dictionary;msgs;tests;report_text;favicon;report_csv;report_json;robots;ssl;ms10_070;content_search;report_xml;negotiate;report_sqlg"
包含所有插件 @@EXTRAS = "dictionary;siebel;embedded"
包含除@@EXTRAS以外的所有插件,并且包含限制为500次数的测试报告 @@DEFAULT = "@@ALL;-@@EXTRAS;tests(report:500)"
(上面表达式展开) = "report_csv;shellshock;ssl;apache_expect_xss;auth;parked;favicon;headers;fileops;drupal;cookies;report_nbe;multiple_index;dishwasher;cgi;put_del_test;robots;domino;outdated;msgs;report_text;report_json;content_search;clientaccesspolicy;report_xml;origin_reflection;httpoptions;docker_registry;tests(report:500);apacheusers;report_sqlg;report_html;sitefiles;ms10_070;strutshock;paths;negotiate"
不包含任何插件 @@NONE = ""
这里的宏作用是提供给参数的选项
用法
nikto -Plugins @@ALL
从Nikto 2.1.2开始插件可以单独选择,并且可以直接向其传递参数。
插件选择字符串可以在命令行上通过-Plugin参数传递。它由分号分隔的插件名称列表组成,选项参数放在括号中。插件语句的简单形式如下:
plugin-name[(parameter name[:parameter value ][,other parameters] )]
例如我们可以这样做:
tests(report:500,verbose)
这会将参数report设置为值500,将verbose设置为值1。可以通过运行以下命令找到参数和插件名称:
./nikto.pl -list-plugins
这也意味着我们不再使用mutate选项,而是用传递给插件的参数来替换它们,因此mutate选项现在在内部被转换为:
-
- tests(all)
- tests(passfiles)
- apacheusers(enumerate,home[,dictionary:dict.txt])
- apacheusers(enumerate,cgiwrap[,dictionary:dict.txt])
- subdomain
- dictionary(dictionary:dict.txt)
通常运行的插件集的宏也可以在nikto.conf中定义,例如:
-
- @@MUTATE=dictionary;subdomain
- @@DEFAULT=@@ALL;-@@MUTATE;tests(report:500)
这些是通过使用-list-plugins扩展的,并且可以通过-plugins覆盖。
总之,这可以允许一组定制的插件,可能需要为特定的环境运行。例如,如果一个普通的测试认为服务器容易受到apache Expect头XSS攻击,而我们想通过添加调试来运行一个测试以查看它是否容易受到攻击,我们可以运行:
nikto.pl -host target.txt -Plugins "apache_expect_xss(verbose,debug)"
然后手动检查输出,看它是否真的易受攻击。
应该注意的是,报告也是插件,所以如果您需要定制插件字符串并想要输出,请直接包含报告插件:
nikto.pl -host targets.txt -Plugins "apacheusers(enumerate,dictionary:users.txt);report_xml" -output apacheusers.xml
软件安装
Unix
(译者注:
导致混淆的原因在于,不同的 Nikto 安装可能会拥有不同的配置文件、插件、或者安装路径。这些差异可能会影响 Nikto 在扫描 Web 服务器时的行为,导致扫描结果不准确或者无法得到预期的结果。如果使用了不同的配置文件或插件,或者文件路径被引用错误,就会影响 Nikto 的运行和结果输出。
例如,如果你使用了不同版本或不同分支的 Nikto,可能会使用不同的参数或不同的选项,这会影响 Nikto 扫描的效果以及输出的结果。另一个例子是安装路径的变化、环境变量或其他依赖包的改变,这些都会影响 Nikto 的运行,从而导致混淆和错误的结果。
因此,在使用 Nikto 时,最好使用干净的便携式版本,并在运行 Nikto 之前,了解不同安装之间的差异以及相关的配置问题,以避免混淆和错误的结果。
)
DOCKER
Dockerfile文件已由提供保罗赛可以在repo中找到:
此处还提供了第三方Docker文件:
kali(特别说明)
Kali操作系统自带了Nikto的安装。
因为Kali遵循一个软件安装位置的RFC,与Nikto默认的应用程序文件夹方法不同,我不支持Kali上的Nikto问题,除非从GitHub下载并手动安装。在Kali上解决任何问题的第一步应该是按照描述重新安装。此外,Kali版本的Nikto通常落后于GitHub版本。
nikto.conf
配置文件
像任何非平凡的程序一样,需要了解如何与当前环境进行工作的一些内容。对于大多数情况,使用默认配置文件即可。有时需要进行调整,或者需要进行一些更改。
Nikto将在三个位置寻找配置文件,如果找到,将按照严格的顺序应用它们,如下所示(请注意,在使用从Github安装的Kali时,已知存在问题)。稍后找到的配置文件将覆盖较早配置文件中设置的任何变量。这些位置是:
/etc/nikto.conf(这可能会根据平台进行更改)
$ HOME / nikto.conf
nikto.conf
格式
配置文件采用标准的Unix配置文件格式:空行被忽略,任何以#开头的行都被忽略,变量通过VariableName = Value行设置。
变量
有关所有配置变量,请参阅下面配置文件。
译者注:
“非琐碎(trivial)性程序”是指相对复杂的计算机程序,通常需要考虑多种因素的交互关系来正确地运行。相比之下,琐碎程序旨在解决相对简单的任务,而且通常不需要复杂的参数设置或配置。
例如,一个计算器程序可以被视为琐碎的程序,因为它只需要执行一些简单的数学计算,不需要对环境设置或其他参数进行调整。反之,一个像 Nikto 这样的 Web 漏洞扫描工具,需要考虑与目标 Web 应用程序的交互,以及不同网络配置和协议的变化,因此可以被认为是“非-trivial”程序。
通常,"非凡的程序" 运行时需要依赖各种参数和配置,以便在特定的系统环境中正常运行。这些配置可以通过配置文件进行设置,以便在程序启动时自动加载并应用设置。
配置文件
报告是由位于templates目录下的模板文件生成的。变量被定义为#variable-name,并在报告生成时被替换。
对于HTML,文件htm_start.tmpl和htm_end.tmpl包括在报告的开头和结尾(分别)。htm_summary.tmpl也出现在报告的开头。htm_host_head为每台主机出现一次,htm_host_item.tmpl和htm_host_im.tmpl为每台主机上发现的每个项目和每个 "信息消息 "出现一次(分别)。XML的方案是用类似的文件名。
所有有效的变量都在这些模板中使用。
版权声明不能从htm_end.tmpl中删除,而不把它们放在另一个模板中。删除这些声明是违反Nikto许可证的。
扫描数据库字段值
虽然一些检查可以在其他插件中找到,但是db_tests包含了大部分的web测试。以下是这些字段的描述:
| 田 | 描述 |
|---|---|
| testID | Nikto测试ID |
| OSVDB-ID | osvdb.org的相应漏洞条目编号(旧) |
| Server Type | 通用服务器匹配类型 |
| URI | 检索的URI |
| HTTP方法 | 用于URI的HTTP方法 |
| 匹配1 | 为成功测试所匹配的字符串或代码 |
| 匹配1(或) | 为成功测试而交替匹配的字符串或代码 |
| 匹配1(和) | 也为成功测试所匹配的字符串或代码 |
| 失败1 | 测试失败时匹配的字符串或代码 |
| 失败2 | 测试失败时匹配的字符串或代码(可选) |
| 摘要 | 报告成功测试的摘要消息 |
| HTTP数据 | POST测试期间要发送的HTTP数据 |
| Headers | 测试期间要发送的附加标头 |
用户定义的测试
用户可以为任何数据库创建他们自己的私人测试。通过在databases目录下放置一个语法正确的数据库文件,文件名前加一个 "u",数据将与内置检查一起被加载。
例如,创建文件databases/udb_tests,它将在加载databases/db_tests的同时被加载。当使用-dbcheck时,这些文件也将被检查语法。
对于需要 "私有 "OSVDB ID的测试,使用OSVDB ID 0(零)。这应该用于所有在OSVDB中不存在(或不应该存在)的漏洞,因为ID 0仅用于测试。
对于 "测试ID",要求你使用400000到499999之间的唯一数字,以允许Nikto数据库的增长而不干扰你自己的测试(注意:500000以上的数字保留给其他测试)。
在可能的情况下,请通过发送测试更新到sullo@cirt.net,帮助Nikto继续取得成功。
扫描数据库语法
扫描数据库是一个CSV分隔的文件,其中包含了大部分的测试。字段用引号括起来,用逗号分开。字段的顺序是:
测试ID,OSVDB-ID,调整类型,URI,HTTP方法,匹配1,匹配1或,匹配1和,失败1,失败2,总结,HTTP数据,头文件
下面是一个测试的例子:
"120","3092","2","/manual/","GET","200","","","","","Web server manual","",""
插件开发
插件
插件允许其他代码位hook进Nikto的处理,并执行无法通过标准插件实现的额外检查。(译者注:这里的hook是一种不修改程序下修改运行方式)
插件是在当前环境下用标准perl编写的。它们应该放在Nikto配置文件中定义的PLUGINDIR中,文件名必须以.plugin结尾。
关于插件和执行的顺序,需要掌握的一个重要概念是插件权重:每个阶段将按照权重定义的顺序执行所有定义的插件。一个插件的权重被定义为1到100之间的数字,其中1是高优先级,100是低优先级。重量相同的插件将以未定义的顺序执行。
初始化阶段
如前所述,所有的插件必须能够在初始化阶段执行,否则将被忽略。
必须存在一个名为filename_init的perl子。该子没有传递任何参数,应该返回一个哈希值,该哈希值应该包含以下条目:
name (强制性)
插件的短名称。这个名字用于识别该插件
在粗略记录期间用于识别该插件,并且在未来的版本中,将用于
选择插件的执行。这个名字应该是一个词,而且最好是、
小写。
full_name (强制性)
插件的全名。这个名字用于识别插件
用来识别插件,也可以在报告模块中用于
识别针对网络服务器运行的测试。
作者(强制性的)
插件作者的名字或手柄。这可能被用于
在报告过程中,可以用来识别针对网络服务器运行的测试的版权所有者
的版权所有者。
描述(强制性)
一个简短的句子来描述该插件的目的。这可能是
在报告过程中使用,或由前端来描述插件的目的。
插件的目的。
版权 (强制性)
该插件的版权字符串(或没有版权)。这可能被用于
在报告中使用,以确保适当的版权被分配给
报告。
钩子(可选)
这应该是一个哈希值,包含关于
的哈希值,包含插件可以响应的钩子的信息。
钩子元素的每个键应该是所需钩子的名称,并有一个详细的哈希值。
钩子的名字,并有一个详细的信息的哈希值。哈希值的组成
的成分应该是:
方法(强制)
这应该是一个为钩子调用的函数的引用。
cond (可选)
这是一个表达式,在插件被执行之前被评估。
如果为真,则执行该插件,如果为假,则跳过该插件。
被跳过。这可以用来最小化插件的执行。
weight (可选)
这是在侦察阶段用于安排插件运行的权重
在侦查阶段用于安排插件的运行。如果没有定义,它
将默认为50。
options (可选)
这是一个哈希值,包含关于任何参数的帮助信息
可以传递给该插件的帮助信息。这些信息将被显示,如果
使用`-list-plugins`参数,这些信息将被显示。
options元素的每个键应该是参数的名称、
的值是一个字符串,提供对该参数的简要描述。
参数。
report_head (可选)
这应该是一个在任何测试开始前执行的函数的引用
开始之前执行的函数的引用。如果没有定义,那么该插件将不会被调用以产生报告头。
产生一个报告头。
report_host_start (可选)
这应该是对一个函数的引用,该函数在每个主机的侦察阶段之前执行。
在每个主机的侦察阶段之前执行的函数。如果没有定义这个函数,那么这个
插件将不会被调用以产生一个主机头。
report_host_end (可选)
这应该是对每个主机的扫描阶段后执行的函数的一个引用
阶段后执行的函数。如果这个函数没有被定义,那么这个插件将
不会被调用以产生主机页脚。
report_item (可选)
这应该是对每个发现的漏洞后执行的函数的引用
漏洞后执行的函数的引用。如果没有定义这个函数,那么这个插件将不会被调用以产生一个项目记录。
调用以产生一个项目记录。
report_close (可选)
这应该是对一个函数的引用,该函数在所有主机的测试结束后执行。
所有主机的测试结束后执行的函数的引用。如果它没有被定义,那么
插件将不会被调用以关闭报告。
report_format (可选)
这应该描述该插件处理的文件格式。这
在内部与`-output`开关的内容相匹配,以减少对插件的过度调用。
减少对插件的过度调用。
report_weight (可选)
这是在报告阶段用于安排插件运行的权重。
报告阶段用于安排插件的运行。如果没有定义,它将默认为
为50。
初始化函数示例
sub nikto_auth_init { my $id = { name => 'auth', full_name => 'Guess authentication', author => 'Sullo/Deity', description => 'Attempt to guess authentication realms', hooks => { start => { method => \&nikto_auth_load, weight => 1, }, postfetch => { method => \&nikto_auth, weight => 19, cond => '$result->{whisker}->{code} eq 401', }, prefetch => { method => \&nikto_auth_pre, weight => 19, }, }, copyright => "2010 CIRT Inc" }; return $id; }
开始钩子在目标和枚举以及扫描的开始之间被调用。它只会被调用一次,无论Nikto针对多少个目标运行。它将只针对以后执行的插件运行。
这使得它成为设置任何所需变量、分配变量或加载数据库的理想场所,以便在以后的钩子中使用该插件。
start方法没有传递任何参数,也不应该返回任何东西。
void start_method(void);
侦查阶段
侦查阶段的目的是用来获取有关网络服务器的信息,以便以后由该插件或其他插件使用。我们不鼓励在这个阶段报告漏洞。
侦查阶段的例子是对一个网站进行蜘蛛搜索,检查已知的应用程序等。
侦察阶段是在每次扫描开始时对每个目标执行的。
每个侦查方法都希望得到一个标记哈希值。它应该什么都不返回。
void recon_method(mark, parameters);
hashref mark
hashref parameters
扫描阶段是该插件的主要工作,在侦察阶段结束后,立即对每个目标进行扫描。
每次扫描都要检查它所知道的漏洞,并在发现漏洞时进行报告。
void scan_method(mark, parameters);
hashref mark
hashref parameters
预取钩子是在向目标发出任何请求之前执行的。它被设计为允许插件在请求前改变 libwhisker 哈希值。
在正常执行中,预取钩子不应该报告漏洞。
prefetch_method(mark, parameters, request, result);
hashref mark
hashref parameters
hashref request
hashref result
后取钩是在向目标发出任何请求后执行的。它的目的是让插件检查响应中的问题,比如有漏洞的头文件或内容。
在正常执行中,postfetch钩子应该报告它发现的任何漏洞。
postfetch_method(mark, parameters, request, result);
hashref mark
hashref parameters
hashref request
hashref result
报告阶段
这可能是最复杂的阶段,因为它有几个钩子,可能用于扫描寿命中的每个部分。
这些钩子是
报告头
这个钩子在目标获取之后和侦察阶段之前立即调用。它的目的是允许报告插件打开报告,并确保任何标题都被适当地写入。
handle report_head(filename);
string filename
文件名参数有点名不副实;它将是传递给-output开关的字符串的副本,可能表示,例如,一个数据库名称。
handle是一个句柄,将被传递给这个插件的其他报告函数,所以应该是内部一致的。
报告主机启动
这个钩子在每个目标的侦查阶段之前立即被调用。它被设计成允许报告插件写入任何主机规格的信息。
void report_host_start(rhandle, mark);
handle rhandle
hashref mark
rhandle参数是插件的报告头函数的输出。
mark参数是目标信息的哈希值(如下所述)。
报告主机结束
这个钩子在每个目标的扫描阶段结束后立即被调用。它被设计成允许报告插件关闭任何主机规格信息。
void report_host_end(rhandle, mark);
handle rhandle
hashref mark
rhandle参数是插件的报告头函数的输出。
mark参数是目标信息的哈希值(如下所述)。
报告项目
这个钩子对在目标上发现的每个漏洞都会被调用一次 这应该报告漏洞的细节。
void report_item(rhandle, mark, vulnerability);
handle rhandle
hashref mark
hashref vulnerbility
rhandle参数是插件的Report Head函数的输出。
mark参数是目标信息的哈希值(如下所述)。
vulnerability参数是漏洞信息的哈希值(如下所述)。
报告关闭
这个钩子在所有目标都被扫描后立即被调用。它的目的是允许报告插件优雅地关闭报告。
void report_close(rhandle);
handle rhandle
rhandle参数是插件的报告头函数的输出。
数据结构
下面的数据结构用于各种插件方法之间的通信。除非另有说明,它们都是带有详细成员的标准perl散列引用。
标记
标记散列包含关于目标的所有信息。它包含以下成员。它应该是只读的。
标记结构的成员
| 钥匙 | 描述 |
|---|---|
| 识别 | 主机标识符,通常等同于在命令行上传递的内容。 |
| 主机名 | 目标的主机名。 |
| 互联网协议(Internet Protocol的缩写) | 目标的IP地址。 |
| 港口 | 目标的TCP端口。 |
| 显示名称 | 目标的主机名或IP地址,具体取决于是否发现了主机名。 |
| 安全套接层 | 指示目标是否在SSL上运行的标志。如果设置为0,那么插件不应该使用SSL。任何其他值都表示应该使用SSL。 |
| vhost | 用于目标的虚拟主机名。 |
| 根 | 用于目标的根URI。 |
| 旗帜 | 目标web服务器的横幅。 |
因素
参数散列包含所有通过钩子直接传递给插件的参数。
散列有一个参数名的键和一个传递的参数值。值的实现和健全性检查由插件完成。
如果没有设置参数,它将不会出现在散列中。如果它被设置为一个未定义的值,它将被设置为哈希中的数字1。
一些参数,如verbose和debug将由Nikto自动处理,尽管参数仍将包含在散列中。
弱点
漏洞散列包含关于漏洞的所有信息。它包含以下成员。它应该是只读的,并且只能使用add_vulnerability方法。
漏洞结构的成员*
| 钥匙 | 描述 |
|---|---|
| 标记 | 散列指是标记数据结构。 |
| 消息 | 漏洞的消息。 |
| nikto_id | 漏洞的测试ID (tid ),这应该是标识漏洞的唯一编号。 |
| osvdb | OSVDB引用开源漏洞数据库中的漏洞。如果OSVDB引用不相关或不存在,则该值可能为0。 |
| 方法 | 用于查找漏洞的HTTP方法。 |
| 上呼吸道感染 | URI为结果。 |
| 结果 | 任何HTTP数据,不包括标头。 |
标准方法
中定义了几种标准方法nikto_core.plugin可以用于所有插件。强烈建议尽可能使用这些方法,而不是编写新的方法。
对于某些方法,如add_vulnerability写入全局变量,这些必须成为这些全局变量的唯一接口。
array change_variables(line);
string line
展开line参数中的任何变量。扩展是在全局数组中定义的变量@VARIABLES,可从中读取db_variables,或者通过侦察插件方法添加。
int is_404(uri, content, HTTPcode);
string uri
string content
string HTTPcode
猜测结果是真实网页还是错误网页。由于几个web服务器配置不良,并且在找不到页面时不返回HTTP 404代码,Nikto试图寻找常见的错误页面。如果页面看起来像错误,则返回1。
string get_ext(uri);
string uri
尝试计算出uri的扩展名。将返回扩展名或特殊情况:目录、点文件、无。
string date_disp();
以人类可读的格式返回当前时间(YYYY-mm-dd hh:mm:ss)
string rm_active(content)
string content
试图删除活动内容(如日期、广告等。)从一页。返回内容的过滤版本。
string get_banner(mark);
hashref mark
拉出web服务器横幅。在将标记传递给插件之前,会自动对所有目标执行此操作。
string HTTPcode
对照已知的“已找到”响应检查HTTPresponse。TRUE表示请求可能成功。
string HTTPCode, string content nfetch(mark, uri, method, content, headers, flags, testid);
hashref mark
string uri
string method
string content
hashref headers
hashref flags
string testid
用传递的参数通过libwhisker发出一个简单的请求。nfetch是钩子感知的,将使所有请求通过预取和后取钩子传递。
这flags散列是可以修改请求行为的标志的选择。当前标志定义如下:
| 钥匙 | 描述 |
|---|---|
| 诺克莱 | 告诉nfetch不要对结构执行健全性检查。通常会检查请求以确保包含有效的主机标头,并且内容长度标头匹配任何内容的大小,设置此标志会阻止检查 |
| 无预取 | 告诉nfetch不要运行预取挂钩。 |
| nopostfetch | 告诉nfetch不要运行postfetch挂钩。 |
| 没有错误 | 告诉nfetch不要报告请求的错误响应。 |
hashref setup_hash(requesthash, mark;
hashref requesthash
hashref mark
用普通的Nikto变量设置一个libwhisker散列。如果使用了对libwhisker的任何自定义调用,就应该使用这个函数。
string char_escape(line);
string line
转义行中的任何字符。
array parse_csv(text);
string text
将一行CSV文本分成一个项目数组。
arrayref init_db(dbname);
string dbname
初始化位于中的数据库PLUGINDIR并返回一个arrayref。arrayref是一个hashrefs数组,每个hash成员由数据库文件中的第一行配置,例如:
"nikto_id","md5hash","description"
这将产生一个带有参数的hashrefs数组:
array[0]->{nikto_id}
array[0]->{md5hash}
array[0]->{description}
void add_vulnerability(mark, message, nikto_id, osvdb, method, uri, data);
hashref mark
string message
string nikto_id
string osvdb
string method
string uri
string data
为标记添加漏洞,将其显示到标准输出,并将其发送到任何报告插件。
void nprint(message, display);
string message
string display
印刷品message达到标准。Display指定消息的过滤器,目前可以是“v”表示详细,而“d”表示调试输出。
全局变量
Nikto中存在以下全局变量,其中大多数是为内部使用而定义的,不建议插件使用它们。有几个已经被弃用,插件不应该使用它们。
%模板(读/写)
Hash to store the HTML and XML report templates.
%CONTENTSEARCH(阅读)
Hash to contain all the entries in db_content_search - a list of
strings and related info to alert on from any request (regardless of
test result).
%CLI(阅读)
Hash of passed CLI parameters
%变量(读)(写)
Hash of contents of the entries in db_variables. Plugins should only
write to this hash in the reconnaisance phase.
测试百分比(读)(写)
Hash of the db_tests database. This is only intended to be used by
the tests plugin, though it could be used by a reconnaisance plugin
to add tests on the fly.
%NIKTO(阅读)
Hash which contains internal Nikto data, such as help for the
command line parameters.
%配置文件(阅读)
Hash containing the data read from the configuration files.
%请求(读)(写)(已弃用);%结果(读)(写)(已弃用)
Global libwhisker hash. This should not be used; nfetch or a local
hash should be used.
%计数器(读)(写)
Hash containing various global counters (e.g. number of requests)
% db _扩展(已读)(已弃用)
Hash containing a list of common extensions
%FoF(读)(写)
Hash containing data for each extension and what the server produces
if a request for a non-existent file is requested.
%更新(读)(写)
Hash containing any updates that need to be sent back to cirt.net
$DIV(阅读)
Divider mark for the items sent to standard out.
@DBFILE(阅读)
Placeholder used to hold the contents of the file db_tests.
$PROXYCHECKED(已读)(已弃用)
Flag to see whether connection through the proxy has been checked.
@结果(阅读)
Array of reported vulnerabilities, should only be written to through add_vulnerability().
@插件(阅读)
Array of hashrefs for each plugin. Used internally to run plugins.
@马克(阅读)
Array of marks to indicate each target.
@报告(阅读)
Ordered array that reporting plugins should be run in. Used for
efficency on calling reporting plugins.
testid
每个测试,无论是来自数据库还是代码,都必须有一个惟一的标识符。编写测试的编号方案如下:
| 范围 | 使用 |
|---|---|
| 000000 | 数据库测试 |
| 400000 | 用户定义的测试(udb*文件) |
| 500000 | 数据库图标 |
| 600000 | 数据库_过期 |
| 700000 | 数据库领域 |
| 750000 | 数据库内容搜索 |
| 800000 | 数据库服务器消息 |
| 900000 | 代码中定义的测试 |
应该为代码(插件)中定义的每个新测试填充%TESTS散列中尽可能多的数据。这些字段包括测试的URI、成功时打印的消息、HTTP方法和OSVDB ID。如果%TESTS中没有“消息”值,输出将不会保存在报告中。并非所有的测试都应该有uri、方法或OSVDB ID。以下是设置这些字段的示例:
$TESTS{999999}{uri}="/~root";
$TESTS{999999}{message}="Enumeration of users is possible by requesting ~username";
$TESTS{999999}{method}="GET";
$TESTS{999999}{osvdb}=637;
Nikto不直接支持SOCKS代理,但是使用诸如代理链可以允许Nikto通过代理运行。此外,设置HTTP代理(例如burp)指向一个SOCKS监听器也有效。
其他相关项目
- w3af can run the Nikto database
- FaradaySec
- Seccubus
- Integration with Nessus
- Nikto Batch Scanner
- Perl Nikto-Parser Module
- MacNikto
一些历史
Nikto 1.00测试版于2001年12月27日发布,(几天后发布了1.01 bug修复版!).
在两年的时间里,Nikto的代码变成了最受欢迎的免费web漏洞扫描器。2007年11月发布的2.0版本代表了几年来的改进。自2007年以来,主版本没有改变,但Github的开发仍在继续。
2008年,戴维·洛奇正式加入开发团队,担任Nikto的领导,而克里斯·苏洛则负责另一项任务。2009年,苏洛重新加入了这个项目。
原始的changelog可以在旧CHANGES.txt文件.
“尼克托”这个名字取自电影《地球停转之日》,当然也是后来布鲁斯·坎贝尔在最优秀的《黑暗军团》中的滥用这个词出现在很多地方,包括《星球大战》,披头士的一张秘密专辑,等等——更多细节请看blather.net.
发音
多年来,作者听到了“Nikto”这个词的许多发音虽然我们倾向于忽略大多数尝试,并暗中为那些做对的人鼓掌,但也有少数错误得值得一提,比如“Nikito”(真的)。如果你一定要知道,“官方”的发音应该是“Nick-Toe”。
CHANGES





浙公网安备 33010602011771号