其他分享
首页 > 其他分享> > Nikto v2.1.0-手册

Nikto v2.1.0-手册

作者:互联网

Nikto v2.1.0-手册
目录

1.简介
总览
描述
高级错误检测逻辑
历史
2.安装
要求
安装
3.用法
基本测试
多端口测试
多主机测试
使用代理
更新中
与Nessus整合
4.命令行选项
所有选项
变异技术
显示
扫描调整
单请求模式
5.配置文件
位置
格式
变数
6.产出和报告
导出格式
HTML和XML定制
7.测试和代码编写
扫描数据库字段值
用户定义的测试
扫描数据库语法
外挂程式
初始化阶段
侦听阶段
扫描阶段
报告阶段
数据结构
标准方法
全局变量
测试标识符
代码版权
8.故障排除
袜子代理
调试
9.许可证
尼克托
独角兽
测验
10.学分
尼克托
谢谢
表清单

第1章简介

总览
Nikto是一个Web服务器评估工具。它旨在在任何类型的Web服务器上查找各种默认和不安全的文件,配置和程序。

描述
检查Web服务器以发现潜在的问题和安全漏洞,包括:

服务器和软件配置错误

默认文件和程序

不安全的文件和程序

过时的服务器和程序

Nikto基于LibWhisker(由RFP构建),并且可以在具有PERL环境的任何平台上运行。它支持SSL,代理,主机身份验证,IDS逃逸等。它可以从命令行自动更新,并支持将更新的版本数据可选地提交回维护人员。

“ Nikto”这个名字取自电影《地球停转的那一天》,当然后来布鲁斯·坎贝尔在《黑暗之军》中也滥用了它。有关Nikto流行文化的更多信息, 请访问http://www.blather.net/blather/2005/10/klaatu_barada_nikto_the_day_th.html

高级错误检测逻辑
大多数网络安全工具(包括Nikto 1.32和更低版本)都严重依赖HTTP响应来确定目标上是否存在页面或脚本。由于许多服务器未正确遵守RFC标准,并且对于未找到或禁止的请求返回200“ OK”响应,因此可能导致许多错误肯定的结果。此外,对各种文件扩展名的错误响应可能会有所不同-.html文件的“未找到”响应通常与.cgi不同。

一些测试工具(例如Nessus)也会查看响应的内容,以帮助消除这些误报。尽管通常有效,但此方法依赖于预定义的字符串来帮助消除误报。

从2.0版开始,Nikto不再假定不同文件类型的错误页面相同。在运行时(从测试数据库)生成唯一文件扩展名的列表,并对每个扩展名针对目标进行测试。对于每种文件类型,找到确定错误的“最佳方法”:标准RFC响应,内容匹配或MD4哈希(按优先级从高到低的顺序)。这使Nikto可以针对每种单独的文件类型使用最快,最准确的方法,从而有助于消除在1.32版及更低版本中某些服务器上看到的误报。

例如,如果服务器针对不存在的.txt文件以404“未找到”错误进行响应,则Nikto将在测试中匹配HTTP响应“ 404”。如果服务器以200“ OK”响应进行响应,它将尝试在内容上进行匹配,并假定找到了匹配项(例如,单词“无法找到”),它将使用此方法来确定missing。 txt文件。如果其他方法失败,Nikto将尝试从返回的页面内容中删除日期和时间字符串(可以不断更改),生成内容的MD5哈希值,然后将该哈希值与将来的.txt测试进行匹配。到目前为止,后者是最慢的匹配类型,但是在许多情况下,它将为特定文件类型提供有效的结果。

历史
Nikto 1.00 Beta于2001年12月27日发布(紧随其后的是1.01版本)。在过去的两年中,Nikto的代码演变为最受欢迎的免费网络漏洞扫描程序。2007年11月发布的2.0版代表了数年的改进。

在2008年,由于其他承诺,原始作者Sullo无法继续支持Nikto,该代码在GPL下发布,并传递给社区寻求支持。

第2章安装

要求
任何支持基本PERL安装的系统都应允许Nikto运行。已在以下方面进行了广泛的测试:

Windows(使用ActiveState Perl)

Mac OSX

各种Linux和Unix安装(包括RedHat,Solaris,Debian,Knoppix等)

没有标准的唯一需要的PERL模块是LibWhisker。Nikto附带并已配置为使用本地LW.pm文件(在plugins目录中),但是用户可能希望更改Nikto以使用系统上安装的版本。有关更多信息,请参见第2节。

为了支持SSL,必须安装Net :: SSLeay PERL模块(这又需要在Unix平台上使用OpenSSL)。Windows对SSL的支持取决于安装程序包,但有传言说ActiveState的Perl存在该支持。

如果需要,也可以使用nmap扫描仪。在某些情况下,使用nmap会降低Nikto的执行速度,因为它必须调用外部程序。要扫描一台或多台服务器上的许多端口,使用nmap比使用Nikto的内部PERL扫描更快。

PERL:http://www.cpan.org/

LibWhisker:http : //www.wiretrip.net/

ActiveState Perl:http://www.activestate.com/

OpenSSL:http://www.openssl.org/

nmap:http://insecure.org/

安装
这些说明不包括有关安装PERL,PERL模块,OpenSSL,LibWhisker或安装过程中可能需要的任何实用程序(例如gzip,tar等)的信息。请参阅发行商的文档,以获取有关如何安装和配置这些软件包的信息。

解压缩下载文件:

tar -xvfz nikto-current.tar.gz
假设安装了标准的OS / PERL,则Nikto现在应该可以使用了。有关更多的配置信息,请参阅第4章(选项)或第8章(故障排除)。

第三章用法

基本测试
最基本的Nikto扫描仅需将主机作为目标,因为如果未指定端口80,则假定使用端口80。主机可以是计算机的IP或主机名,并使用-h(-host)选项指定。这将扫描TCP端口80上的IP 192.168.0.1:

perl nikto.pl -h 192.168.0.1
要检查其他端口,请使用-p(-port)选项指定端口号。这将扫描TCP端口443上的IP 192.168.0.1:

perl nikto.pl -h 192.168.0.1 -p 443
主机,端口和协议也可以通过使用完整的URL语法指定,并将对其进行扫描:

perl nikto.pl -h https://192.168.0.1:443/
无需指定端口443可以是SSL,因为Nikto将首先测试常规HTTP,如果失败,则将测试HTTPS。如果确定它是SSL服务器,则指定-s(-ssl)将加快测试速度。

perl nikto.pl -h 192.168.0.1 -p 443 -ssl
[注意] 注意
-mutate1增加了测试次数,以便针对所有数据库inc来测试所有文件名 db_tests。这将产生超过2,000,000的额外测试,这将消耗大量的资源。

可以使用-mutate参数执行更复杂的测试 ,如下所述。这会产生额外的测试,其中一些可能会通过-mutate-options参数提供额外的参数。例如,-mutate如果Web服务器允许user〜URI ,则使用3(带或不带文件)会尝试强行使用用户名:

perl nikto.pl -h 192.168.0.1 -mutate 3 -mutate-options user-list.txt
多端口测试
Nikto可以在同一扫描会话中扫描多个端口。要在同一主机上测试多个端口,请在-p(-port)选项中指定端口列表。端口可以​​指定为范围(即80-90),也可以指定为逗号分隔的列表(即80、88、90)。这将扫描端口80、88和443上的主机。

perl nikto.pl -h 192.168.0.1 -p 80,88,443
多主机测试
Nikto支持通过主机名或IP的文本文件在同一会话中扫描多个主机。可以给文件名,而不是为-h(-host)选项提供主机名或IP。主机文件必须格式化为每行一个主机,端口号位于每行的末尾。端口可以​​通过冒号或逗号与主机端口和其他端口分开。如果未指定端口,则假定端口为80。

这是有效的主机文件的示例:

示例3.1 有效主机文件

192.168.0.1:80
http://192.168.0.1:8080/
192.168.0.3

[注意] 注意
对于Win32用户:由于cmd.exe与管道一起工作的方式的特殊性,上面的示例可能对您不起作用。在这种情况下,将必须使用一个临时文件来存储nmap的输出

主机文件也可以是“可提取”格式的nmap输出(即来自-oG的输出)。

可以使用“-”作为文件名通过stdout / stdin将文件传递给Nikto。例如:

nmap -p80 192.168.0.0/24 -oG-| nikto.pl -h-
使用代理
如果运行Nikto的计算机只能通过HTTP代理访问目标主机(或更新服务器),则仍可以执行测试。设置PROXY*变量(如第4节中所述),然后使用-u(-useproxy)命令执行Nikto。所有连接都将通过配置文件中指定的HTTP代理进行中继。

perl nikto.pl -h 192.168.0.1 -p 80 -u
更新中
如果您已从主机上安装了Nikto,并且具有Internet连接,则可以自动更新Nikto。要更新到最新的插件和数据库,只需使用-update命令运行Nikto。

[注意] 注意
-update选项不能缩写。

perl nikto.pl-更新
如果需要更新,您将看到下载文件的列表:

perl nikto.pl-更新
+检索’nikto_core.plugin’
+检索’CHANGES.txt’

也可以从http://www.cirt.net/手动下载更新。

与Nessus整合
Nessus(http://www.nessus.org/nessus/)可以配置为在找到Web服务器时自动启动Nikto。确保Nikto正常运行,然后将包含nikto.pl的目录放置在root的PATH环境变量中。当nessusd启动时,它应该看到nikto.pl程序并通过GUI启用用法。

第4章命令行选项

所有选项
以下是所有Nikto命令行选项和说明。通过使用-h(-help)选项运行Nikto,可以获得此文本的简短版本。

-Cgidirs
扫描这些CGI目录。特殊词“ none”或“ all”可分别用于扫描所有CGI目录或不扫描。可以指定CGI目录的文字值,例如“ / cgi-test /”(必须包含斜杠)。如果未指定此选项,将测试config.txt中列出的所有CGI目录。

-config
指定要使用的替代配置文件,而不是安装目录中的config.txt。

-dbcheck
检查扫描数据库中的语法错误。

-Display
控制Nikto显示的输出。有关这些选项的详细信息,请参见第5章。使用参考数字或字母指定类型,可以使用多个:

1-显示重定向

2-显示收到的Cookie

3-显示所有200 / OK响应

4-显示需要身份验证的URL

D-调试输出

V-详细输出

-evasion
指定要使用的LibWhisker IDS规避技术(有关这些的详细信息,请参阅LibWhisker文档)。使用参考号指定类型,可以使用多个:

1-随机URI编码(非UTF8)

2-目录自参考(/./)

3-过早的URL结束

4-在随机长字符串前添加

5-伪参数

6-TAB作为请求分隔符

7-更改网址的大小写

8-使用Windows目录分隔符(\)

-findonly
仅发现HTTP(S)端口,不执行安全扫描。这将尝试使用HTTP或HTTPS连接,并报告服务器标头。

-Format
以这种格式保存用-o(-output)选项指定的输出文件。如果未指定,则默认值将从-output选项中指定的文件扩展名中获取。有效格式为:

csv-逗号分隔的列表

htm-HTML报告

txt-文本报告

xml-XML报告

-host
要定位的主机。可以是主机的IP地址,主机名或文本文件。单破折号(-)可能用于标准输出。也可以解析nmap -oG样式输出

-Help
显示扩展的帮助信息。

-id
用于主机基本主机身份验证的ID和密码。格式为“ id:密码”。

-list-plugins
将列出Nikto可以针对目标运行的所有插件,然后不执行扫描即退出。可以使用-plugins选项为会话调整它们。

输出格式为:

插入 name

full name – description

作者:author版权(C) copyright

-mutate
指定突变技术。突变会导致Nikto组合测试或尝试猜测值。这些技术可能导致针对目标启动大量测试。使用参考号指定类型,可以使用多个:

1-使用所有根目录测试所有文件

2-猜密码文件名

3-通过Apache枚举用户名(/〜用户类型请求)

4-通过cgiwrap枚举用户名(/ cgi-bin / cgiwrap /〜用户类型请求)

5-尝试暴力破解子域名,假设主机名是父域

6-尝试从提供的字典文件中猜测目录名称

-mutate-options
提供有关突变的其他信息,例如字典文件

-nolookup
不要在IP地址上执行名称查找。

-nossl
不要使用SSL连接到服务器。

-no404
禁用404(找不到文件)检查。这将减少对Web服务器的请求总数,在通过慢速链接或嵌入式设备检查服务器时可能更可取。这通常会导致发现更多的误报。

-output
将输出写入指定的文件。所使用的格式将从文件扩展名中获取。可以使用-Format选项来覆盖它(例如,以不同的扩展名写入文本文件。现有文件将附加新信息。

-plugins
选择将在指定目标上运行的插件。应该提供一个用逗号分隔的列表,其中列出了插件的名称。可以使用-list-plugins查找名称。

有两个特殊条目:ALL(指定所有插件应运行)和NONE(指定不运行任何插件)。默认为ALL

-port
要定位的TCP端口。要在同一主机上测试多个端口,请在-p(-port)选项中指定端口列表。端口可以​​指定为范围(即80-90),也可以指定为逗号分隔的列表(即80、88、90)。如果未指定,则使用端口80。

-Pause
每次测试之间延迟的秒数。

-root
将指定的值放在每个请求的开头。这对于测试所有文件都位于某个目录下的应用程序或Web服务器很有用。

-ssl
仅在指定的端口上测试SSL。使用此选项将大大加快对HTTPS端口的请求,因为否则HTTP请求将必须首先超时。

-Single
对目标服务器执行单个请求。Nikto将提示您输入所有可以指定的选项,然后报告详细的输出。有关详细信息,请参见第5章。

-timeout
等待超时之前等待的秒数。默认超时为10秒。

-Tuning
调整选项将控制Nikto针对目标进行的测试。默认情况下,如果指定了任何选项,则仅执行那些测试。如果使用“ x”选项,它将颠倒逻辑并仅排除那些测试。使用参考数字或字母指定类型,可以使用多个:

0-文件上传

1-有趣的文件/在日志中可见

2-配置错误/默认文件

3-信息披露

4-注入(XSS / Script / HTML)

5-远程文件检索-内部Web根目录

6-拒绝服务

7-远程文件检索-服务器范围

8-命令执行/远程Shell

9-SQL注入

a-身份验证绕过

b-软件识别

c-远程源包含

x-反向调整选项(即,包括所有除指定的选项)

给定的字符串将从左到右进行解析,任何x字符都将应用于该字符右侧的所有字符。

-useproxy
使用配置文件中定义的HTTP代理。

-update
直接从cirt.net更新插件和数据库。

-Version
显示Nikto软件,插件和数据库版本。

-vhost
指定要发送到目标的主机头。

变异技术
突变会导致Nikto组合测试或尝试猜测值。这些技术可能导致针对目标启动大量测试。使用参考号指定类型,可以组合多个。

使用所有根目录测试所有文件。这将进行每个测试并将其拆分为文件和目录的列表。然后通过将每个文件与每个目录合并来创建扫描列表。

猜测密码文件名。获取常用密码文件名(例如“ passwd”,“ pass”,“ password”)和文件扩展名(“ txt”,“ pwd”,“ bak”等)的列表,并构建要检查的文件列表对于。

通过Apache枚举用户名(/〜用户类型请求)。利用Apache UserDir设置的错误配置,该配置允许发现有效的用户名。这将尝试强行猜测用户名。也可以通过在-mutate-options参数中提供文件名来提供已知用户的文件 。

通过cgiwrap枚举用户名(/ cgi-bin / cgiwrap /〜用户类型请求)。利用cgiwrap中的一个漏洞,该漏洞可以发现有效的用户名。这将尝试强行猜测用户名。也可以通过在-mutate-options 参数中提供文件名来提供已知用户的文件。

尝试暴力破解子域名。这将尝试强行知道域名,它将假定给定的主机(没有www)是父域。

尝试粗暴目录名称。这是唯一需要在-mutate-options参数中传递文件的mutate选项 。它将使用给定的文件来尝试猜测目录名称。常见目录列表可以在OWASP DirBuster项目中找到。

显示
默认情况下,仅显示有关目标和漏洞的一些基本信息。使用该-Display 参数可以产生更多有关调试问题的信息。

1-显示重定向。这将显示所有引起服务器“重定向”响应的请求。

2-显示收到的Cookie。这将显示由远程主机发送的所有cookie。

3-显示所有200 / OK响应。这将显示所有引起服务器“好的”(200)响应的响应。这对于调试很有用。

4-显示需要身份验证的URL。这将显示所有引发“需要授权”标题的响应。

D-调试输出。显示调试输出,其中显示详细输出和其他信息,例如变量内容。

V-详细输出。显示详细输出,通常显示程序执行期间Nikto的位置。

扫描调整
扫描调整可用于减少针对目标执行的测试次数。通过指定要包括或排除的测试类型,可以完成更快,更集中的测试。这在不需要某些文件类型的情况下很有用-例如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
有效的调整选项是:

0-文件上传。利用这些漏洞可以将文件上传到目标服务器。

1-有趣的文件/在日志中可见。Web服务器日志中发现了未知但可疑的文件或攻击(请注意:如果您有关于这些攻击的任何信息,请与我们联系)。

2-配置错误/默认文件。默认文件或以某种方式配置错误的文件。这可能是文档,也可能是应使用密码保护的资源。

3-信息披露。揭示有关目标的信息的资源。这可以是文件系统路径或帐户名。

4-注入(XSS / Script / HTML)。任何注入方式,包括跨站点脚本(XSS)或内容(HTML)。这不包括命令注入。

5-远程文件检索-内部Web根目录。资源允许远程用户从Web服务器的根目录中检索未经授权的文件。

6-拒绝服务。资源允许拒绝针对目标应用程序,Web服务器或主机的服务(注意:不会尝试进行有意的DoS攻击)。

7-远程文件检索-服务器范围。资源使远程用户可以从目标上的任何位置检索未经授权的文件。

8-命令执行/远程Shell。资源允许用户执行系统命令或生成远程Shell。

9-SQL注入。允许对数据库执行SQL的任何类型的攻击。

a-身份验证绕过。允许客户端访问不应被允许访问的资源。

b-软件标识。可以肯定地确定已安装的软件或程序。

c-远程源包含。该软件允许远程包含源代码。

x-反向调整选项。执行排除指定的调整类型,而不包括指定的调整类型。

单请求模式
单一请求模式旨在针对目标执行单个请求。这对于使用扫描期间使用的Nikto资源确认测试结果很有用。单个选项允许手动设置Nikto和LibWhisker使用的大多数变量,完成后将同时显示请求和操作结果。

大多数选项具有默认值或可以保留为空白。最常见和必需的值在“问题”部分的开头,以便于使用。真和假分别由数值等效项1和0指定。请注意,单人模式不是很友好。这是Nikto使用该-Single选项运行的示例 。

[dave @ yggdrasil nikto-2.03] $ ./nikto.pl -Single
---------------------------------- ---------- Nikto 2.1.0
------------------------------------ --------单一请求模式
主机名或IP:本地主机
端口(80):
URI(/):/test.html
SSL(0):
代理主机:
代理端口:
显示HTML响应(1):
HTTP版本(1.1):
HTTP方法(GET):
用户代理(Mozilla / 4.75(Nikto / 2.1.0):
连接(保持活动):
数据:
force_bodysnatch(0):
force_close(1):
http_space1():
http_space2():
include_host_in_uri(0):
invalid_protocol_return_value(1):
max_size(0):
协议(HTTP):
require_newline_after_headers(0 ):
重试(0):
ssl_save_info(0):
超时(10):
uri_password():
uri_postfix():
uri_prefix():
uri_user():
启用反IDS(0):
-------------------------- ------------------完成问题
主机名:localhost
主机IP:127.0.0.1
HTTP响应代码:404
-------------- ------------------------------连接详细信息
连接:Keep-Alive
主机:localhost
用户代理:Mozilla / 4.75(Nikto / 2.1.0
数据:
force_bodysnatch:0
force_close:1
force_open:0
主机:本地主机
http_space1:
http_space2:
ignore_duplicate_headers:1
include_host_in_uri:0
invalid_protocol_return_value:1
max_size:0
方法:GET
端口:80
协议:HTTP
require_newline_after_headers:0
重试:0
ssl:0
ssl_savepinfo:0
超时:
测试:10
追踪.html
uri_param_sep :?
uri_postfix:
uri_prefix:
版本:1.1
------------------------------------------- -响应标题
连接:close
内容长度:268
内容类型:text / html; charset = iso-
8859-1日期:2009年8月18日星期二10:13:57 GMT
服务器:Apache / 2
代码:404
http_data_sent:1
http_eol:

    http_space1:
    http_space2:
    消息:未找到
    协议:HTTP 
    uri:/test.html
    版本:1.1 

--------------------------------------------回复内容
< !DOCTYPE HTML PUBLIC“-// IETF // DTD HTML 2.0 // EN”>

404未找到

未找到

在此服务器上找不到请求的URL /test.html。


<地址>位于本地主机端口80的Apache / 2服务器

第5章配置文件

位置
像任何不平凡的程序一样,Nikto需要了解有关如何使用当前环境的一些知识。在大多数情况下,默认配置文件将起作用。有时,可能需要调整,或者某些情况可能需要更改。

Nikto将在三个位置查找配置文件,如果找到一个,将按照以下列出的严格顺序应用它。以后找到的配置文件将覆盖在以前的配置文件中设置的所有变量。这些位置是:

/etc/nikto.conf(可能会因平台而异)

$ HOME / nikto.conf

nikto.conf

格式
配置文件的格式类似于标准Unix配置文件:忽略空行,忽略任何以#开头的行,使用VariableName = Value行设置变量。

变数
可以在配置文件中设置以下变量:

CLIOPTS
应始终传递给命令行的默认选项。例如:

CLIOPTS = -output results.txt-格式化文本
默认设置

CLIOPTS =
NIKTODTD
用于XML输出的DTD位置的路径。如果该路径不是绝对路径,则它将相对于Nikto执行目录。

默认设置

NIKTODTD = docs / nikto.dtd
NMAP, NMAPOPTS
不推荐使用

nmap的位置和默认的nmap选项。Nikto曾经使用nmap来帮助检查任何目标上的有效HTTP端口。从Nikto 2.10起,不再在Nikto中使用nmap,并且此变量将不起作用。以后的版本中可能会删除此变量。

默认设置

NMAP = / usr / local / bin / nmap
NMPOPTS = -P0
SKIPPORTS
不推荐使用

该配置项最初定义了Nikto绝对不会扫描的端口。当前未使用和不推荐使用。

默认设置

跳过= 21111
SKIPIDS
[注意] 注意
注意,此过滤器仅适用于db_tests数据库中的测试

包含空格分隔的测试ID(tid)列表,Nikto不会在系统上运行它们,例如:

跳过= 000045 000345
默认设置

跳过=
DEFAULTHTTPVER
定义Nikto将使用的默认HTTP版本,除非被特定测试取代。通常将其保留为默认值就足够了,尽管某些Web服务器可能仅适用于更高版本的HTTP协议。

默认设置

DEFAULTHTTPVER = 1.0
UPDATES
如果过时的Nikto插件看到了一个未知的Web服务器,或者它的版本晚于中定义的版本 db_outdated,那么它将将该信息发送回cirt.net,以包含在将来的Nikto版本中。不发送服务器特定的信息(例如IP地址或主机名)。

可以将此项设置为以下值之一:

UPDATES=yes
显示每个提交并在发送之前寻求许可

UPDATES=no
不要将任何数据发送回cirt.net

UPDATES=auto
在没有提示的情况下将数据发送回cirt.net

默认设置

更新=是
MAX_WARN
没用过

产生警告,指出已检索许多MOVED响应。目前尚未使用。

默认设置

MAX_WARN = 20
PROMPTS
不推荐使用

如果设置为“ no”,则禁用Nikto提示。目前尚未使用,并且已被UPDATES项目弃用。

默认设置

提示=
CIRT
Nikto将用于更新数据库和插件,或将版本信息发送回的IP地址(如UPDATES项目中所述)。

默认设置

CIRT = 107.170.99.251
PROXYHOST,PROXYPORT,PROXYUSER,PROXYPASS
代理中继所有请求的地址,端口和用户名密码。注意,要使用代理,必须在配置文件中设置配置项,并将 -useproxy开关提供给命令行。

默认设置

PROXYHOST =
PROXYPORT =
PROXYUSER =
PROXYPASS =
STATIC-COOKIE
将提供的cookie添加到通过Nikto发出的所有请求中,通常很有用,因为网站需要身份验证cookie。例如:

STATIC-COOKIE =用户ID = 0
默认设置

STATIC-COOKIE =
CHECKMETHODS
Nikto将通过发送请求以通过某些HTTP方法获取/ URI来尝试将目标标识为Web服务器。某些Web服务器未实现所有HTTP方法,如果不支持所使用的方法,可能会导致Nikto无法正确识别Web服务器。

如果配置文件中缺少此设置,则Nikto将默认恢复为HEAD的Nikto 2.02默认值。

默认设置

CHECKMETHODS = HEAD GET
EXECDIR,PLUGINDIR,TEMPLATEDIR,DOCDIR
定义在哪里可以找到Nikto,其插件,XML / HTML模板和文档的位置。仅当重新包装Nikto以使用不同的文件系统标准时,才应通常更改此设置。Nikto将使用EXECDIR项目来猜测其他目录。

默认设置

EXECDIR =。
PLUGINDIR = EXECDIR /插件
TEMPLATEDIR = EXECDIR /模板
DOCDIR = EXECDIR / docs
第6章输出和报告

导出格式
Nikto保存的输出有四种样式:文本,CSV,XML或HTML。使用时-output,可以用指定输出格式-Format。如果未使用,则假定为文本格式-Format。Nikto XML格式的DTD可以在“ docs”目录(nikto.dtd)中找到。

HTML和XML定制
HTML报告是从templates目录中的模板文件生成的 。变量定义为 #variable-name,并在生成报告时被替换。文件htm_start.tmpl和 htm_end.tmpl分别包含在报告的开头和结尾。该htm_summary.tmpl 也出现在报告的开头。的 htm_host_head一次为每一个主机出现,并且 htm_host_item.tmpl与 htm_host_im.tmpl出现一次为每个项的主机和每个主机(分别)每个“信息性消息”中找到。

这些模板中使用了所有有效变量。本文档的将来版本将包括变量及其含义的列表。

如果未将版权声明htm_end.tmpl放入另一个模板中,则不得从中删除版权声明 。删除这些声明违反了Nikto许可。

第7章测试和代码编写

扫描数据库字段值
尽管可以在其他插件中找到一些检查,但是 scan_database.db其中包含了大量的Web测试信息。这是字段值的描述:

表7.1。扫描数据库字段

测试编号 Nikto测试ID
OSVDB ID osvdb.org的相应漏洞条目号
服务器类型 通用服务器匹配类型
URI 检索的URI
HTTP方法 用于URI的HTTP方法
比赛1 匹配成功的字符串或代码
比赛1(或) 字符串或代码可以匹配以成功测试
Match1(和) 字符串或代码也要匹配以成功进行测试
失败1 匹配测试失败的字符串或代码
失败2 匹配测试失败的字符串或代码(替代)
概要 报告成功测试的摘要消息
HTTP数据 POST测试期间要发送的HTTP数据
标头 测试期间要发送的其他标头

用户定义的测试
用户可以为任何数据库创建自己的私有测试。通过将语法正确的数据库文件放在 plugins目录中,文件名以“ u”开头,该数据将与内置检查一起加载。

例如,创建文件 plugins/udb_tests,它将在加载的同时plugins/db_tests加载。使用这些文件时,还将检查这些文件的语法-dbcheck。

对于需要“专用” OSVDB ID的测试,请使用OSVDB ID 0(零)。应将其用于OSVDB中不存在(或不应该存在)的所有漏洞,因为ID 0仅用于测试。鼓励您通过Moderators@osvdb.org将丢失的信息发送到OSVDB。

对于“测试ID”,建议您使用400000到499999之间的唯一数字,以便在不干扰自己的测试的情况下扩展Nikto数据库(注意:大于500000的数字保留用于其他测试)。

请将测试更新发送至,以帮助Nikto继续取得成功 。sullo@cirt.net

扫描数据库语法
扫描数据库是CSV分隔文件,其中包含大多数测试。字段用引号引起来,用逗号分隔。字段顺序为:

测试ID,OSVDB ID,调整类型,URI,HTTP方法,匹配1,匹配1或匹配1和,失败1,失败2,摘要,HTTP数据,标头

这是一个示例测试:

“ 120”,“ 3092”,“ 2”,“ / manual /”,“ GET”,“ 200”,“”,“”,“”,“”,“ Web服务器手册”,“”,“”
外挂程式
为了提供更多的灵活性,Nikto允许使用插件,以便轻松扩展现有功能和将来的验证。

插件在四个不同的阶段运行,分别是:

初始化(强制性)
在分配目标之前执行插件初始化。在此阶段,该插件应告知Nikto它的存在和功能。它可以选择设置以后需要的任何变量。

侦听(可选)
在侦听阶段,插件应查找在扫描阶段可能有用的有趣信息。尽管不建议这样做,但它可能会报告漏洞。

扫描(可选)
扫描阶段应该执行插件的工作-在这里,它应该查看Web服务器并返回任何潜在的漏洞。

报告(可选)
报告阶段用于将所有发现的漏洞导出为以后可以使用的格式,例如,以文件报告的形式写入或导入到数据库中。在此阶段,不应测试Web服务器或报告新的漏洞。

此阶段要比其他阶段稍微复杂一些,在执行Nikto的过程中可能会多次调用它,如稍后所述

插件在当前上下文中以标准perl编写。它们应放在PLUGINDIRNikto配置文件中定义的文件中,并且文件名必须以结尾 .plugin。

掌握插件及其执行顺序的一个重要概念是插件权重:每个阶段都将按照权重定义的顺序执行所有已定义的插件。插件的权重定义为1到100之间的数字,其中1是高优先级,而100是低优先级。权重相等的插件将以未定义的顺序执行。

初始化阶段
如上所述,所有插件都必须能够在初始化阶段执行,否则将被忽略。

一个perl子必须存在,称为 filename_init。子对象未传递任何参数,并且应返回对哈希的引用,该哈希应包含以下条目:

name (必填)
插件的简称。它用于在详细日志记录期间标识插件,在将来的版本中,它将用于选择插件执行。名称应该是一个单词,最好是小写。

full_name (必填)
插件的全名。它用于在详细日志记录期间标识插件,并且可以在报告模块中用于标识针对Web服务器运行的测试。

author (必填)
插件作者的名称或名称。在报告过程中可以使用它来标识针对Web服务器运行的测试的版权。

description (必填)
简短的句子描述插件的用途。可以在报告过程中或前端使用它来描述插件的用途。

copyright (必填)
插件的版权字符串(或缺少版权字符串)。在报告过程中可以使用它来确保为报告分配适当的版权。

recon_method (可选的)
这应该是在插件执行的侦听阶段使用的功能的参考。如果未定义,则插件将在侦听阶段不执行。

recon_cond (可选的)
这是一个在执行插件之前要评估的表达式;如果为true,则执行插件;如果为false,则跳过该插件。这可用于最小化插件执行。

recon_weight (可选的)
这是用于在侦听阶段安排插件运行时间的权重。如果未定义,则默认为50。

scan_method (可选的)
这应该是对插件执行的扫描阶段中使用的函数的引用。如果未定义,则插件将在扫描阶段不执行。

scan_cond (可选的)
这是一个在执行插件之前要评估的表达式;如果为true,则执行插件;如果为false,则跳过该插件。这可用于最小化插件执行。

scan_weight (可选的)
这是在扫描阶段安排插件运行的权重。如果未定义,则默认为50。

report_head (可选的)
这应该是对任何测试开始之前执行的功能的引用。如果未定义,则不会调用该插件以生成报告头。

report_host_start (可选的)
这应该是对每个主机的侦听阶段之前执行的功能的引用。如果未定义,则不会调用该插件以生成主机头。

report_host_end (可选的)
这应该是对每个主机的扫描阶段之后执行的功能的引用。如果未定义,则不会调用该插件以生成主机页脚。

report_item (可选的)
这应该是对每个发现的漏洞之后执行的功能的引用。如果未定义,则不会调用该插件以生成项目记录。

report_close (可选的)
这应该是对所有主机的测试完成后执行的功能的引用。如果未定义,则不会调用该插件来关闭报告。

report_format (可选的)
这应该描述插件处理的文件格式。这与-output开关的内容在内部匹配, 以减少对插件的过多调用。

report_weight (可选的)
这是用于在报告阶段安排插件运行的权重。如果未定义,则默认为50。

示例7.1 初始化函数示例

sub nikto_dictionary_attack_init
{
我的$ id =
{
name =>“ dictionary”,
full_name =>“ Dictionary Attack ”,
author =>“ Deity”,
description =>“尝试字典攻击常用的目录/文件”,
recon_method => \&nikto_dictionary_attack ,
recon_cond =>’$ CLI {mutate} =〜/ 6 /’,
recon_weight => 20,
版权=>“ 2009 Chris Sullo”
};

返回$ id;
}

侦听阶段
在每次扫描开始时对每个目标执行侦听阶段。

每个这样的侦听方法都希望使用 mark哈希引用。它不应返回任何内容。

void recon_method( 标记);
hashref mark;
侦听阶段旨在用于获取有关Web服务器的信息,以供该插件或其他插件以后使用。不建议在此阶段报告漏洞。

侦听阶段的示例用途是对站点进行爬网,检查已知应用程序等。

扫描阶段
扫描阶段是插件生命的关键,在侦听阶段之后立即针对每个目标运行该扫描。

每次扫描应检查其知道的漏洞,并在发现漏洞时进行报告。

void scan_method( 标记);
hashref mark;
报告阶段
这可能是最复杂的阶段,因为它有多个挂钩可用于扫描生命周期的每个部分。

挂钩是:

报告头
在目标获取之后和侦察阶段之前立即调用此挂钩。它旨在允许报告插件打开报告,并确保正确编写任何标题。

handle report_head( 文件名);
string filename;
该filename参数有点用词不当;它是传递给-output交换机的字符串的副本, 并且可能指示例如数据库名称。

的handle是,将被传递到其他报告功能为这个插件所以应该是内在一致的手柄。

报告主机启动
对于每个目标,在侦听阶段之前立即调用此挂钩。它旨在允许报告插件写入任何主机特定信息。

void report_host_start( rhandle,
标记);
handle rhandle;
hashref mark;
该rhandle参数是插件的Report Head函数的输出。

该mark参数是用于目标信息的hashref(如下所述)。

报告主机端
在每个目标的扫描阶段结束后立即调用此挂钩。它旨在允许报告插件关闭任何主机特定信息。

void report_host_end( rhandle,
标记);
handle rhandle;
hashref mark;
该rhandle参数是插件的Report Head函数的输出。

该mark参数是用于目标信息的hashref(如下所述)。

报告项目
对于在目标上找到的每个漏洞,将调用一次此挂钩。这应该报告有关该漏洞的详细信息。

void report_item( rhandle,
标志,
脆弱性);
handle rhandle;
hashref mark;
hashref vulnerbility;
该rhandle参数是插件的Report Head函数的输出。

该mark参数是用于目标信息的hashref(如下所述)。

该vulnerability参数是针对漏洞信息的哈希引用(如下所述)。

报告关闭
扫描完所有目标之后,将立即调用此挂钩。它旨在允许报告插件优雅地关闭报告。

void report_close( 横纹);
handle rhandle;
该rhandle参数是插件的Report Head函数的输出。

数据结构
以下数据结构用于在各种插件方法之间进行通信。除非另有说明,否则它们都是带有详细成员的标准perl哈希引用。

标记
标记哈希包含有关目标的所有信息。它包含以下成员。它应该是只读的。

表7.2。商标 结构的成员

ident 主机标识符,通常等同于在命令行上传递的标识符。
hostname 目标的主机名。
ip 目标的IP地址。
port 目标的TCP端口。
display_name 主机名或目标的IP地址,取决于是否已找到主机名。
ssl 指示目标是否通过SSL运行的标志。如果将其设置为0,则该插件不应使用SSL。任何其他值指示应使用SSL。
vhost 用于目标的虚拟主机名。
root 用于目标的根URI。
banner 目标的Web服务器的横幅。

脆弱性
漏洞哈希包含有关漏洞的所有信息。它包含以下成员。它应该是只读的,并且只能使用add_vulnerability方法编写 。

表7.3。漏洞 结构的成员

标记 哈希引用到标记数据结构。
信息 有关此漏洞的消息。
nikto_id 漏洞的测试ID(tid),这应该是一个唯一的编号,用于标识漏洞。
操作系统 OSVDB对开放源漏洞数据库中的漏洞的引用。如果OSVDB引用不相关或不存在,则该值为0。
方法 用于查找漏洞的HTTP方法。
乌里 结果的URI。
结果 任何HTTP数据,不包括标头。

标准方法
定义了几种标准方法 nikto_core.plugin,可用于所有插件。强烈建议在可能的情况下使用这些方法,而不要编写新的方法。

对于某些方法(例如add_vulnerability 写入全局变量的方法),这些方法必须是这些全局变量的唯一接口。

array change_variables( 线);
string line;
扩展line参数中的所有变量。扩展是在全局数组中定义的变量@VARIABLES,可以从db_variables,或通过侦听插件方法添加。

int is_404( uri,
内容,
HTTPcode) ;
string uri;
string content;
string HTTPcode;
猜测结果是真实网页还是错误页面。由于几个Web服务器配置错误,并且在找不到页面时不返回HTTP 404代码,因此Nikto会尝试查找常见的错误页面。如果页面看起来像错误,则返回1。

string get_ext( uri) ;
string uri;
尝试解决uri的扩展问题。将返回扩展名或特殊情况:DIRECTORY,DOTFILE,NONE。

string date_disp( );
;
以可读格式返回当前时间(YYYY-mm-dd hh:mm:ss)

string rm_active( 内容);
string content;
尝试从页面中删除活动内容(例如日期,广告等)。返回内容的过滤版本。

string get_banner( 标记);
hashref mark;
拉起Web服务器横幅。在将标记传递到插件之前,将对所有目标自动执行此操作。

boolean content_present( HTTPcode) ;
string HTTPcode;
根据已知的“找到的”响应检查HTTP响应。TRUE表示请求可能已成功。

string HTTPCode, string content fetch( uri,
方法,
内容,
头,
不洁);
string uri;
string method;
string content;
hashref headers;
boolean noclean;
不推荐使用

使用HTTP方法对URI执行简单的HTTP请求 method。content提供任何要在HTTP正文中传递的数据。headers 允许将任何自定义标头放置在请求中。 noclean是一个标志,指定在发送请求之前不应该清除该请求(例如,如果Host:标头为空)。

string HTTPCode, string content nfetch( uri,
方法,
内容,
头,
不洁);
string uri;
string method;
string content;
hashref headers;
boolean noclean;
使用本地而不是全局请求/结果结构的提取的更新版本。应该优先使用它来获取。

hashref setup_hash( requesthash,
标记);
hashref requesthash;
hashref mark;
使用普通的Nikto变量设置libwhisker哈希。如果使用了对libwhisker的任何自定义调用,则应使用此方法。

string char_escape( 线);
string line;
转义行中的所有字符。

array parse_csv( 文字);
string text;
将一行CSV文本分成一系列项目。

arrayref init_db( dbname) ;
string dbname;
初始化一个数据库,PLUGINDIR 并返回一个arrayref。arrayref是散列引用的数组,每个散列成员由数据库文件中的第一行配置,例如:

“ nikto_id”,“ md5hash”,“说明”
这将导致带有参数的hashref数组:

array [0]-> {nikto_id}
array [0]-> {md5hash}
array [0]-> {description}
void add_vulnerability( 标志,
讯息,
nikto_id,
OSVDB,
方法,
uri,
数据);
hashref mark;
string message;
string nikto_id;
string osvdb;
string method;
string uri;
string data;
为标记添加一个漏洞,将其显示为标准输出,并将其发送给任何报告插件。

void nprint( 讯息,
显示);
string message;
string display;
打印message到标准输出。 Display指定消息的过滤器,当前对于冗长的消息可以为“ v”,对于调试输出为“ d”。

全局变量
Nikto中存在以下全局变量,其中大多数是为内部使用而定义的,不建议插件使用它们。不推荐使用其中的几个,插件不应该使用它们。

%TEMPLATES (读/写)
散列以存储HTML和XML报告模板。

%ERRSTRINGS (读)
散列以包含db_404中的所有条目-可能表示404的字符串列表。

%CLI (读)
传递的CLI参数的哈希

%VARIABLES (读)(写)
db_variables中条目内容的哈希值。插件仅应在侦听阶段写入此哈希。

%TESTS (读)(写)
db_tests数据库的哈希。该功能仅供测试插件使用,尽管可以由侦听插件使用以动态添加测试。

$CONTENT (已读)(写)(已弃用)
全局变量,用于存储来自访存或nfetch的数据。应该使用局部变量代替

%NIKTO (读)
包含内部Nikto数据的哈希,例如命令行参数的帮助。

%REALMS (读)
来自db_realms的数据散列。

%NIKTOCONFIG (读)
散列,包含从配置文件读取的数据。

%request(已读)(写)(已弃用),%result(已读)(写)(已弃用)
全球libwhisker哈希。不应使用;应该使用nfetch或本地哈希。

%COUNTERS (读)(写)
包含各种全局计数器的哈希(例如请求数)

%db_extensions (已读)(已弃用)
包含常用扩展名列表的哈希

%FoF (读)(写)
包含每个扩展名的数据的哈希值,以及如果请求不存在的文件的请求,服务器将生成的数据。

%UPDATES (读)(写)
包含需要发送回cirt.net的任何更新的哈希

$DIV (读)
发送到标准输出的项目的分隔符标记。

@DBFILE (读)
占位符,用于保存的内容 db_tests。

@BUILDITEMS (已读)(写)(已弃用)
数组,用于保存信息以供以后执行测试。应避免使用,而应使用局部变量。

$PROXYCHECKED (读)
标记以查看是否已检查通过代理的连接。

$http_eol (已读)(已弃用)
包含http的行尾模式。

@RESULTS (读)
报告的漏洞数组,仅应通过写入 add_vulnerability.

@PLUGINS (读)
每个插件的哈希引用数组。在内部用于运行插件。

@MARKS (读)
指示每个目标的标记数组。

@REPORTS (读)
报告插件应在其中运行的有序数组。用于提高报告插件的调用效率。

%CACHE (读)(写)
包含URI缓存的内容只能通过读取/写入nfetch。成员:

表7.4。缓存 结构的成员

{uri} 缓存的URI
{uri}{method} 使用的HTTP方法
{uri}{res} URI的HTTP结果
{uri}{content} URI的数据
{uri}{mark} 将hashref标记为URI

测试标识符
每个测试,无论来自数据库之一还是代码中,都必须具有唯一的标识符。编写测试的编号方案如下:

表7.5。工业贸易署计划

000000 db_tests
400000 用户定义的测试(udb* 文件)
500000 db_favicon
600000 db_outdated
700000 db_realms
800000 db_server_msgs
900000 代码中定义的测试

对于%TESTS代码(插件)中定义的每个新测试,应在散列中填充尽可能多的数据。这些字段包括测试的URI,成功打印的消息,HTTP方法和OSVDB ID。如果没有’message’值,则 %TESTS输出将不会保存在HTML或XML报告中。并非所有测试都具有uri,方法或OSVDB ID。这是设置这些字段的示例:

$ TESTS {999999} {uri} =“ /〜root”;
$ TESTS {999999} {message} =“可以通过请求〜username来枚举用户”;
$ TESTS {999999} {method} =“ GET”;
$ TESTS {999999} {osvdb} = 637;
代码版权
发送给作者的任何新的或更新的代码,测试或信息均假定没有版权。通过向作者发送新的或更新的代码,测试或信息,您将放弃对材料的所有版权主张,并同意可以与Nikto拥有相同的版权主张该代码。

第8章故障排除

袜子代理
Nikto当前不支持SOCKS代理。

调试
调试Nikto请求的主要途径是将 -Displaywith与v(详细)或d(调试)配合使用。这将在屏幕上输出大量的额外信息,因此建议在使用它们时将输出重定向到文件。

第9章许可证

尼克托
Nikto已获得GNU通用公共许可证(GPL)的许可,并由Chris Sullo拥有版权

独角兽
LibWhisker是根据GNU通用公共许可(GPL)许可的,并由Rain Forrest Puppy拥有版权。

测验
该网络测试仅许可用于Nikto,未经Chris Sullo的书面许可不得重复使用

第10章学分
尼克托

Nikto由Chris Sullo和David Lodge编写和维护。LibWhisker由Rain Forrest Puppy撰写

谢谢
许多人提供了反馈,修复和建议。尽管未列出所有贡献者,但此列表试图记录这些人员。没有特别的顺序:

Nikto 2测试:Paul Woroshow,Mark G. Spencer,Michel Arboi,Jericho,rfp

耶利哥(attrition.org/OSVDB/OSF)。支持/想法/测试/更正/垃圾邮件,并帮助将OSVDB ID匹配到测试。

rfp(wiretrip.net)。LibWhisker并继续提供支持。

Erik Cabetas提供了许多更新和修复。

杰克·昆斯(Jake Kouns)(OSVDB / OSF)。

Jabra(spl0it.org),用于XML DTD,XML模板和支持代码。

斯蒂芬·瓦尔德斯 广泛的测试。我们都想你。

萨迪 广泛的测试。

芝诺(cgisecurity.com)。Nikto镜像。

P·埃罗宁(nixu.com)。提供了许多代码修复。

M Arboi。通过编写使Nikto在Nessus中运行的代码以及错误报告提供了强大的支持。

T塞拉特。维护Nikto的Debian版本。

J·德普里斯特 想法/修正。

P Woroshow。想法/修正。

fr0stman。测试。

H·海曼 测试。

Xiola(xiola.net)。网页设计等。

瑞安·杜斯特(Ryan Dewhurst)。域猜测代码。

本文档为©2009 Chris Sullo,未经允许不得重复使用。

标签:插件,HTTP,手册,测试,使用,服务器,v2.1,Nikto
来源: https://blog.csdn.net/weixin_45975957/article/details/110008575