zl程序教程

您现在的位置是:首页 >  其他

当前栏目

渗透测试 10 --- 扫描 web目录 (dirb、wfuzz、wpscan、nikto)

测试Web 10 目录 --- 渗透 扫描
2023-09-11 14:13:58 时间

github 更多工具:https://github.com/topics/dirb

github 上 fuzz 工具、字典:https://github.com/search?q=fuzz

当使用一个工具扫描完成后,如果没发现漏洞,可以使用其他 web 扫描工具再扫描下,因为每个工具可能侧重点不一样,扫描出来的漏洞就不一样。

关键字

子域名 收集、超级 ping
网站(web) 文件 目录 扫描
whois 信息
站长工具域名查询
ip 反查
邮箱反查

渗透利器-kali工具 (第二章-4) 信息收集之目录扫描


 

1、dirb 

dirb:Web Content Scanner。DIRB 是一个 Web内容扫描器。它查找现有(和/或隐藏)的 Web 对象。通过对 web 服务器发起基于字典的攻击并分析响应来工作的。可以参考:brain(x)

使用格式:dirb <url_base> <url_base> [<wordlist_file(s)>] [options]

选项:
       -a <agent_string>    指定 user-agent
       -b                   在给定的URL中,不进行压缩或合并 /../ 和 /./
       -c <cookie_string>   指定 cookie
       -E <certificate>     指定证书文件               
       -f                   NOT_FOUND(404)检测的微调。
       -H <header_string>   指定请求头
       -i                   不区分大小写进行搜索。
       -l                   找到后打印 "Location" 标题。
       -N <nf_code>         忽略指定的 HTTP code 的响应。               
       -o <output_file>     保存输出到硬盘文件
       -p <proxy[:port]>    指定代理               
       -P <proxy_username:proxy_password>  指定代理认证               
       -r                      不进行递归搜索
       -R                      交互式递归。(询问要扫描哪个目录)
       -S                      静默模式。不显示测试的单词。
       -t                      URL 不强制使用 / 结尾。
       -u <username:password>  指定用户名和密码
       -v                      显示不存在页面
       -w                      出现警告信息时不停止
       -x <extensions_file>    使用 指定的字典文件 扩大搜索。

                                         更好用的字典可以到网上去下载 svndigger
       -X <extensions>      使用指定的 扩展名 进行搜索
       -z <milisecs>          添加毫秒延迟,避免洪水攻击

基本使用

对目标进行基本扫描
        dirb http://192.168.186.131/
        dirb https://www.baidu.com  /usr/share/wordlists/dirb/big.txt
        dirb https://www.baidu.com/ -o output.txt /usr/share/wordlists/dirb/big.txt
        dirb https://www.baidu.com -X .php,.txt,.zip  /usr/share/wordlists/dirb/big.txt
        dirb https://www.fi11sm30.com/  -X .php,.txt,.zip
        dirb http://www.baidu.com/ -z 100  

-X参数 列举具有特定扩展名列表的目录,多个扩展名使用 逗号进行分割
dirb http://192.168.186.131/ -X .php    # .php 为要搜索的指定扩展名文件

-o 参数 将输出保存到磁盘文件
dirb http://192.168.186.131/ -o output.txt

-N参数 忽略不必要的状态码
dirb http://192.168.186.131/ -N 302  # 302为忽略的状态码

-z 参数 设置延迟,防止请求频繁,导致服务器反应不过来
dirb http://192.168.186.131/ -z 100    # 每次请求间隔100毫秒

不递归(-r)。dirb默认扫描是以递归方式扫描目录。它将扫描目录以及子目录。
但是在某些情况下,如果时间不足,我们会将Dirb设置为不递归扫描。
dirb http://192.168.186.131/ -r

显示不存在页面
404错误是HTTP状态代码,表示你尝试在其网站上访问的页面无法在其服务器上找到。
404 Not Found错误消息经常由各个网站定制。
在某些情况下,我们也需要找到404页。
默认情况下,dirb会跳过这些页面,而如果想要查找这些页面,就需要使用-v参数。
dirb http://192.168.186.131/ -v

不对网址(-t)强制使用结尾的 /
dirb 运行时,必须在 URL 的末尾添加一个正斜杠(/)以便 dirb 能接受我们给出的语句。
我们可以在命令中添加-t参数,即可不在URL的末尾添加一个正斜杠(/)。
dirb http://192.168.186.131 -t

HTTP授权进行扫描
HTTP身份验证/身份验证机制全部基于401状态代码和WWW身份验证响应标头的使用。
最广泛使用的 HTTP身份验证 机制是 Basic。
客户端将用户名和密码作为未加密的base64编码文本发送。
dirb http://192.168.186.131/login.php -u test_username:test_password 

-p 参数 设置代理
dirb http://192.168.186.131/ –p 192.168.1.108:3129

2、dirstalk

github 地址:https://github.com/stefanoj3/dirstalk

Dirstalk 是一个多线程应用程序,旨在暴力破解 Web 服务器上的路径。该工具包含类似于 dirbuster 和 dirb 提供的功能。

3、WebMap

github 地址:https://github.com/Anteste/WebMap

一个 Python 工具,可自动执行 Nmap、Nikto 和 Dirsearch,还用于在 Web 渗透测试期间自动生成报告

  • 使用 Nmap 执行网络扫描
  • 使用 Nikto 执行漏洞扫描
  • 使用 Dirsearch 执行目录破坏
  • 生成报告
  • 使用 WebMap 自动化 Web 渗透

Linux & Unix 安装:

$ git clone https://github.com/Anteste/WebMap.git
$ cd WebMap
$ ./install.sh
$ webmap

4、wfuzz ( Kali 自带 )

 From:最不详细的Wfuzz使用(一)o((>ω< ))o_小霸王linkmH的博客-CSDN博客_wfuzz

GitHub地址:https://github.com/xmendez/wfuzz/
官方文档:Wfuzz: The Web fuzzer — Wfuzz 2.1.4 documentation

关键字:fuzz_for_web

模糊测试 (fuzz testing, fuzzing)

模糊测试 (fuzz testing, fuzzing)是一种软件测试技术。其核心思想是:将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。

模糊测试最早由威斯康星大学的Barton Miller于1988年提出。他们的工作不仅使用随机无结构的测试数据,还系统的利用了一系列的工具去分析不同平台上的各种软件,并对测试发现的错误进行了系统的分析。此外,他们还公开了源代码,测试流程以及原始结果数据。

模糊测试工具主要分为两类,变异测试(mutation-based)以及生成测试(generation-based)。模糊测试可以被用作白盒,灰盒或黑盒测试。文件格式与网络协议是最常见的测试目标,但任何程序输入都可以作为测试对象。常见的输入有环境变量,鼠标和键盘事件以及API调用序列。甚至一些通常不被考虑成输入的对象也可以被测试,比如数据库中的数据或共享内存。

对于安全相关的测试,那些跨越可信边界的数据是最令人感兴趣的。比如,模糊测试那些处理任意用户上传的文件的代码比测试解析服务器配置文件的代码更重要。因为服务器配置文件往往只能被有一定权限的用户修改。

​九大模糊测试工具、AI 模糊测试工具:未知的未知:九大模糊测试工具 - 安全牛

CTF-All-In-One 《CTF 竞赛入门指南》:简介 · CTF All In One

持续 Fuzz:https://zhuanlan.zhihu.com/p/110188045

英文资料:

  • :https://github.com/secfigo/Awesome-Fuzzing
  • :https://www.fuzzingbook.org/

wfuzz --- web 扫描器

Wfuzz 是一款 Python开发的Web安全测试工具,它不仅仅是一个 web 扫描器:wfuzz能够通过发现并利用网站弱点/漏洞的方式帮助你使网站更加安全。wfuzz的漏洞扫描功能由插件支持。
wfuzz提供了简洁的编程语言接口来处理wfuzz或Burpsuite获取到的HTTP请求和响应。这使得你能够在一个良好的上下文环境中进行手工测试或半自动化的测试,而不需要依赖web形式的扫描器。

wfuzz -h  帮助

用法:wfuzz [options] -z payload,params <url>

        FUZZ, ..., FUZnZ 无论这些关键字放在哪里,wfuzz 都会将它们替换为指定有效负载的值。
        FUZZ{baseline_value} FUZZ 将被替换为baseline_value。
        这将是执行的第一个请求,可以用作过滤的基础。
选项:
        -h :       帮助
        --help :    高级帮助
        --version : 版本
        -e <type> :可用 encoders/payloads/iterators/printers/scripts 的列表

        -c : 输出颜色
        -v :详细信息。
        --interact : (beta) 如果选择,所有按键都会被捕获。这使您可以与程序进行交互。

        -p addr :使用 ip:port:type 格式的代理。重复使用各种代理的选项。
                                    如果省略,类型可以是 SOCKS4、SOCKS5 或 HTTP。
        -t N :        指定并发连接数(默认10)
        -s N :        指定请求之间的时间延迟(默认为 0)
        -R depth:     递归路径发现深度为最大递归级别(默认为0)
        -D depth :    最大链接深度级别(默认为 4)
        -L, --follow :跟随 HTTP 重定向

        -u url :    指定请求的 URL。
        -z payload :给每个关键字FUZZ指定有效负载,可使用的类型为:type,parameters,encoder。
                     可以使用编码器列表,例如 md5-sha1。编码器可以链接,即。 md5@sha1。
                     可以使用编码器类。 IE。
                     使用帮助作为有效负载来显示有效负载插件的详细信息(您可以使用 --slice 进行过滤)
        -w wordlist :指定一个字典文件(等价于 -z file,wordlist )。
        -V alltype :所有参数暴力破解(allvars 和 allpost)。不需要 FUZZ 关键字。
        -X 方法:    为请求指定一个 HTTP 方法,即 HEAD 或 FUZZ

        -b cookie :     指定 cookie
        -d postdata :  postdata (ex: "id=FUZZ&catalogue=1")
        -H header:     使用 header(例如:"Cookie:id=1312321&user=FUZZ")
        --basic/ntlm/digest auth : 格式为 "user:pass" 或 "FUZZ:FUZZ" 或 "domain\FUZ2Z:FUZZ"

        --hc/hl/hw/hh N[,N]+ :使用指定的 "代码/行/单词/字符" 隐藏响应(使用 BBB 从基线获取值)
        --sc/sl/sw/sh N[,N]+ :使用指定的 "代码/行/单词/字符" 显示响应(使用 BBB 从基线获取值)
        --ss/hs regex:        显示/隐藏 带有指定正则表达式 的 响应

wfuzz 本身自带字典,可以在 wfuzz 的安装目录下找到。

但相对 FuzzDB 和 SecLists 来说还是不够全面不够强大的,当然如果有自己的字典列表最好~

wfuzz 基本使用

目录遍历

就是对目录 ( 或者某个文件 ) 进行爆破,对已知的 url 进行目录 ( 或者某个文件 ) 猜解,达到获取到更多的可访问的目录(某个文件)信息,信息收集,扩大攻击面。

wfuzz -w wordlist URL/FUZZ.php     Wfuzz 爆破文件
wfuzz -w wordlist URL/FUZZ            Wfuzz 爆破目录

使用 -z 或 -w 参数可以同时指定多个 payloads,
这时相应的占位符应设置为 FUZZ, … , FUZnZ, 其中 n 代表了 payload 的序号。
--hc  可以过滤 http 状态码。
举例:wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/extensions_common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2ZFUZ3Z

遍历枚举参数值
假如地址:http://127.0.0.1/getuser.php?uid=123  可获取 uid 为 123 的个人信息
uid 参数可以遍历,已知 123 为三位数纯数字,需要从 000-999 进行遍历,
也可以使用 wfuzz 来完成。使用 payloads 模块类中的 range 模块进行生成。
命令:wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ

Post 数据爆破

场景:发现一个登录框,没有验证码,想爆破弱口令账户。
请求地址为:http://127.0.0.1/login.php
POST请求正文为:username=&password=
使用 wfuzz 测试:wfuzz -w userList -w pwdList -d "username=FUZZ&password=FUZ2Z" http://127.0.0.1/login.php

-d 参数传输 POST 请求正文。

Cookie 测试

-b 参数指定 Cookie,多个 Cookie 需要指定多次,也可以对 Cookie 进行测试,仍然使用FUZZ占位符即可。
携带 Cookie 命令:wfuzz -z range,000-999 -b session=session -b cookie=cookie http://127.0.0.1/getuser.php?uid=FUZZ
 

http 的 Headers 爆破

HTTP Headers 测试
假如一个刷票的漏洞,这个漏洞需要伪造XFF头(IP)可达到刷票的效果,
投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。
那么现在我想给userid为666的朋友刷票,可以使用wfuzz完成这类操作。
命令:wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666
-H 指定HTTP头,多个时,需要指定多次(同Cookie的-b参数)。

http 的 请求方法(Method)

测试一个网站 ( http://127.0.0.1/ ) 支持哪些 HTTP 请求方法。

命令:wfuzz -z list, "GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/

-z list 参数 可以自定义一个字典列表( 在命令中体现 ),以 - 分割。因为这里要测试HTTP请求方法,所以 字典列表为 GET-POST-HEAD-PUT 

-X 参数 指定HTTP请求方法类型,后面的值为 FUZZ 占位符。

使用代理

命令:wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ
-p 参数指定主机:端口:代理类型,多个代理可使用多个-p参数同时指定
wfuzz 每次请求都会选取不同的代理进行。
如果想使用ssr 则命令为:wfuzz -w wordlist -p 127.0.0.1:1087:SOCKS5 URL/FUZZ

认证

测试 HTTP Basic Auth 保护命令:
wfuzz -z list,"username-password" --basic FUZZ:FUZZ URL
wfuzz 可以通过 --basec --ntml --digest 来设置认证头,
使用方法都一样:--basec/ntml/digest username:password

递归测试

-R 参数可以指定一个 payload 被递归的深度(数字)。
例如:爆破目录时,我们想使用相同的 payload 对已发现的目录进行测试,命令如下:
wfuzz -z list,"admin-login.php-test-dorabox" -R 1 http://127.0.0.1/FUZZ
如上命令就是使用了自定义字典列表:
admin
login.php
test
dorabox    
递归深度为 1,也就是说当发现某一个目录存在的时候,在存在目录下再递归一次字典。

并发、请求间隔

wfuzz 提供了一些参数可以用来调节 HTTP 请求的线程
假如想测试一个网站的转账请求是否存在HTTP并发漏洞(条件竞争)
请求地址:http://127.0.0.1/dorabox/race_condition/pay.php
POST请求正文:money=1
命令:wfuzz -z range,0-20 -t 20 -d "money=1" http://127.0.0.1/dorabox/race_condition/pay.php?FUZZ
这里使用 range 模块生成 0-20,填充的 FUZZ 占位符的位置,
使用 -t 参数 设置 并发请求,该参数默认设置都是 10。
使用 -s 参数 设置 每次发送HTTP的时间间隔。

保存 测试结果

wfuzz 通过 printers 模块来将结果以不同格式保存到文档中,一共有如下几种格式:
raw       | `Raw` output format
json      | Results in `json` format
csv       | `CSV` printer ftw
magictree | Prints results in `magictree` format
html      | Prints results in `html` format

使用 -f 参数,指定值的格式为输出文件位置,输出格式。

将结果以 json 格式输出到文件的命令:wfuzz -f outfile,json -w wordlist URL/FUZZ

Wfuzz 高阶功法

From:WFUZZ使用教程:https://www.fuzzer.xyz/2019/03/29/WFUZZ使用教程/

BurpSuite 的 Intruder 模块中 Attack Type 有:

  • Sniper(狙击手)
  • Battering ram(撞击物)
  • Pitchfork(相交叉)
  • Cluster bomb(集束炸弹)

wfuzz 也可以完成这样的功能,将不同的字典的组合起来,那就是 Iterators 模块。
使用参数 -m 迭代器,wfuz z自带的迭代器有三个:zip、chain、product,如果不指定迭代器,默认为 product 迭代器。

zip 命令

示例:wfuzz -z range,0-9 -w dict.txt -m zip http://127.0.0.1/ip.php?FUZZ=FUZ2Z

该命令的意思:设置了两个字典。两个占位符,
一个是range模块生成的0、1、2、3、4、5、6、7、8、9 10个数字,
一个是外部字典dict.txt的9行字典,
使用zip迭代器组合这两个字典发送。

zip迭代器的功能:字典数相同、一一对应进行组合,如果字典数不一致则多余的抛弃掉不请求,
如上命令结果就是数字9被抛弃了因为没有字典和它组合。

chain 命令

示例:wfuzz -z range,0-9 -w dict.txt -m chain http://127.0.0.1/ip.php?FUZZ

该命令设置了两个字典,一个占位符 FUZZ,使用 chain 迭代器组合这两个字典发送。
chain迭代器的功能:通过返回结果就能看出来chain迭代器的功能了,这个迭代器是将所有字典全部整合(不做组合)放在一起然后传入占位符FUZZ中。

product 命令

示例:wfuzz -z range,0-2 -w dict.txt -m product http://127.0.0.1/ip.php?FUZZ=FUZ2Z

该命令的意思:设置了两个字典,两个占位符,一个是range模块生成的0、1、2 3个数字,一个是外部字典dict.txt的3行字典,使用product迭代器组合这两个字典发送。

product 迭代器的功能:通过返回结果,知道了请求总数为9,请求的payload交叉组合:

Encoders

wfuzz 中 encoders 模块可以实现编码解码、加密,它支持如下图中所列转换功能:

使用 Encoders

使用 Encoders 的 md5 加密。
wfuzz -z file --zP fn=wordlist,encoder=md5 URL/FUZZ

这里简写了第一条命令,一般都使用这条命令来调用Encoders
wfuzz -z file,wordlist,md5 URL/FUZZ

使用 多个 Encoder

多个转换,使用一个-号分隔的列表来指定
wfuzz -z file,dict.txt,md5-base64 http://127.0.0.1/ip.php\?FUZZ

多次转换,使用一个@号分隔的列表来按照从右往左顺序多次转换
( 这里让传入的字典先md5加密然后base64编码 )
wfuzz -z file,dict.txt,base64@md5 http://127.0.0.1/ip.php\?FUZZ

Scripts

wfuzz 是支持插件的,其本身也有很多插件,插件大部分都是实现扫描和解析功能,插件共有两大类和一类附加插件:

  • passive:分析已有的请求和响应(被动)
  • active:会向目标发送请求来探测(主动)
  • discovery:自动帮助wfuzz对目标站进行爬取,将发现的内容提供给wfuzz进行请求

Wfuzz 默认自带脚本如下:

使用 Scripts

--script-help 参数查看关于模块的信息。示例:wfuzz --script-help=robots

自定义插件

使用 wfuzz 可以自己编写 wfuzz 插件,需要放在 ~/.wfuzz/scripts/ 目录下,具体如何编写可以参考已有的插件:https://github.com/xmendez/wfuzz/tree/master/src/wfuzz/plugins/scripts

技巧

Recipes
Wfuzz 可以生成一个 recipes 用来保存命令,方便下次执行或者分享给别人。

生成一个 recipes:
wfuzz --script=robots -z list,"robots.txt" --dumo-recipe outrecipe URL/FUZZ

使用某个 recipes:
wfuzz --recip outrecipe
 

网络异常

Wfuzz 扫描的时候出现网络问题,如DNS解析失败,拒绝连接等时,wfuzz会抛出一个异常并停止执行,使用 -Z 参数即可忽略这些错误继续执行。
出现错误的 payload 会以返回码 XXX 来表示,Payload 中还有出现的错误信息。

超时

使用 wfuzz 扫描会遇到一些响应很慢的情况,wfuzz 可以设置超时时间。
参数 --conn-delay 来设置 wfuzz 等待服务器响应接连的秒数。

参数 --req-delay 来设置 wfuzz 等待响应完成的最大秒数。

结合 BurpSuite

从 Burp 的 LOG 文件中获取测试的URL地址:

示例命令:wfuzz -z burplog,"1.burp" FUZZ

还有能够读取burpsuite保存的state:wfuzz -z burpstate,a_burp_state.burp FUZZ

过滤器

这里篇幅太长,建议综合参考 https://github.com/xmendez/wfuzz/blob/18a83606e3011159b4b2e8c0064f95044c3c4af5/docs/user/advanced.rst

字典

在这里贴出来自己搜集的字典!需要的可以自行下载

链接:百度网盘-链接不存在    提取码:j66f

使用示例:

5、wordpress 类型web站点 的 识别

wordpress 官网:WordPress.com:快速、安全的受管 WordPress 托管服务

cmseek --- 网站 指纹识别

命令:cmseek -u https://www.coolshell.cn

wpscan --- 专门的 wordpress 类型网站识别

6、nikto --- Web应用漏洞扫描

​nikto2 官网:Nikto2 | CIRT.net
Nikto 完整文档:https://github.com/sullo/nikto/wiki
Web 漏洞扫描神器 Nikto 使用指南:Web漏洞扫描神器Nikto使用指南 - 知乎

Nikto 是一款开放源代码的、功能强大的 WEB 扫描评估软件,能对 web 服务器多种安全项目进行测试的扫描软件,去寻找已知有名的漏洞,能在230多种服务器上扫描出2600多种有潜在危险的文件、CGI 及其他问题,它可以扫描指定主机的 WEB 类型、主机名、特定目录、COOKIE、特定 CGI 漏洞、返回主机允许的 http 模式等等。

Nikto 使用 LibWhiske 库,但通常比 Whisker 更新的更为频繁。Nikto 是网管安全人员必备的 WEB 审计工具之一。

Nikto 是 perl 语言开发的,其特点扫描全面,速度快。

Nikto 是一个比较全面的网页扫描器。

nikto 参数

通过 nikto -H 、man nikto 查看更详细的帮助信息。

以下所有选项,凡是有带 + 号的代表后面需要跟一个值:

   选项:
       -ask+               询问是否更新
                               yes   每次都询问 (默认)
                               no    不询问,不发送
                               auto  不询问,只发送
       -Cgidirs+           扫描 指定CGI目录: "none", "all", 或者类似 "/cgi/ /cgi-a/"
       -config+            使用指定的配置文件
       -Display+           打开/关闭 显示输出:
                               1     显示重定向
                               2     显示接受 cookie
                               3     显示所有200/OK响应
                               4     显示要求认证的URL
                               D     调试输出
                               E     显示所有HTTP错误							   
                               P     打印处理进度到 STDOUT
                               S     格式化输出IP地址和主机名
                               V     详细输出
       -dbcheck           检查数据库和其他关键文件的语法错误
       -evasion+          编码技术: 对扫描包进行一些变形,绕过IDC检测。
                               1    随机 URI 编码 (non-UTF8)
                               2    使用相对路径 (/./)
                               3    过早的 URL 结尾
                               4    预先添加长随机字符串
                               5    使用伪造的虚假参数
                               6    使用 TAB 作为请求间隔
                               7    更改 URL 的大小写
                               8    使用 Windows 目录分隔符 (\)
                               A    使用 回车符 (0x0d) 作为请求分隔符
                               B    使用二进制值 0x0b 作为请求间隔
        -Format+           保存文件的格式 (-o):
                               csv   csc  格式
                               htm   HTML 格式
                               nbe   Nessus的NBE格式
                               sql   通用 SQL(请参阅架构文档)
                               txt   文本
                               xml   XML 格式
                          如果不指定文件格式,将从 -output 获取文件扩展名
       -Help              帮助
       -host+             目标 主机/ URL
       -404code           忽略 HTTP code 的响应 (always). Format is "302,301".
       -404string         忽略response中包含string的响应 (always). 字符串可以使用正则表达式。
       -id+               主机使用的身份验证,格式是 ID:密码 或 ID:密码:领域
       -key+              客户端证书密钥文件
       -list-plugins      列出所有可用的插件,不执行测试
       -maxtime+          每个主机的最大测试时间 (e.g., 1h, 60m, 3600s)
       -mutate+           猜额外的文件名。变化猜测技术:
                               1   测试所有的文件,所有的根目录
                               2   猜测密码文件名
                               3   通过Apache枚举用户名(/~user type requests)
                               4   通过cgiwrap枚举用户名(/cgi-bin/cgiwrap/~user type requests)
                               5   试暴力破解子域名,假设主机名称是父域名
                               6   尝试从提供的字典文件中猜测目录名称
       -mutate-options    Provide information for mutates
       -nointeractive     禁用交互特性
       -nolookup          禁止 DNS 查找
       -nossl             禁止 SSL
       -no404             禁用 Nikto 尝试猜测404页
       -Option            覆盖 nikto.conf 中的选项,可以多次发出
       -output+           将输出写入到文件('.' 表示自动生成文件名)
       -Pause+            测试之间的停顿(秒,整数或浮点数)
       -Plugins+          列出正在运行的插件(默认:ALL)
       -port+             指定端口(默认80)
       -RSAcert+          客户证书文件
       -root+             为所有请求添加根目录 /,格式为 /directory
       -Save              保存响应到目录中('.' 表示自动命名)
       -ssl               强制SSL端口模式
       -Tuning+           扫描选项: 控制 Nikto 使用不同的方式来扫描目标。
                               1 日志文件
                               2 错误配置/默认文件
                               3 信息披露。公开信息
                               4 注入(XSS/脚本/HTML)
                               5 Web Root 内的 远程文件检索
                               6 拒绝服务
                               7 服务器范围 内的 远程文件检索
                               8 命令执行/远程Shell
                               9 SQL注入
                               0 文件上传
                               a 身份验证绕过
                               b 软件标识
                               c 远程源包含
                               d 网络服务
                               e 管理控制台
                               x 反向选择(即 选择指定之外的所有选项)
       -timeout+          请求超时时间 (默认 10 秒)
       -Userdbs           仅加载用户数据库,不加载标准数据库
                               all   禁用标准 dbs,仅加载用户 dbs
                               tests 禁用 db_tests,加载 udb_tests
       -useragent         设置 useragent
       -until             Run until the specified time or duration
       -update            从 CIRT.net 更新 数据库和插件
       -url+              扫描的目标 host/URL (别名 -host)
       -useproxy          使用在 nikto.conf 定义的代理。或者使用参数 http://server:port
       -Version           打印插件和数据库版本
       -vhost+            Virtual host (for Host header)

Nikto 插件

Nikto 通过大量插件进行扫描,通过 nikto -list-plugins 来查看插件信息

通过 nikto -V 来查看工具版本和插件版本

nikto 基本使用

交互功能。在扫描期间,按下下面任意键,可开启或关闭相关功能,注意这些命令是区分大小写。

空格     报告当前扫描状态
v        显示详细信息
d        显示调试信息
e        显示http错误信息
p        显示扫描进度
r        显示重定向信息
c        显示cookie
a        显示身份认证过程
q        退出程序
N        扫描下一个目标
P        暂停扫描

使用

1. 最基本的 扫描。
    最基本的 nikto 扫描只需要指定目标的 host (通过 -h 参数指定),
    也可以指定要扫描的端口号 (通过 -p 来指定),默认是80
    nikto -h 192.168.0.1
    nikto -host/-h www.baidu.com -p 443 -ssl        // 针对 https 扫描

2. 多端口 扫描。
    # 扫描80,88,443三个端口
    nikto -h 192.168.0.1 -p 80,88,443
    # 扫描80~90共10个端口
    nikto -h 192.168.0.1 -p 80-90

3. 多 host 扫描
    -host 参数的值为一个文件,该文件存一系列的 host 或者 ip。
    文件格式要求是:每个host必须占一行,端口号放行末,
    端口号通过冒号或者逗号和host其他端口号区分开。
    nikto -host url.txt
    文件 url.txt 内容:
        192.168.0.1:80
        http://192.168.0.1:8080/
        192.168.0.3
4. 扫描 https
    nikto -host www.baidu.com -ssl -port 443
    ​nikto -h URL -useproxy http://127.0.0.1:1080
    nikto -host https://www.baidu.com -ssl -useproxy http://127.0.0.1:8080

5. 使用 LibWhisker 绕过 IDS 的检测
    nikto -host www.baidu.com -ssl -port 443 -evasion 1358

6. CGI扫描 -C 参数只能放在后面,应该可以指定相对目录。
    nikto –h 192.168.0.1 -c
    nikto –h 192.168.0.1 -c /phpbb
    数据库扫描 此参数也需要跟在后面
    nikto –h 192.168.0.1 -c -d
    猜测 apache 默认配制密码 前提需要目标服务器允许 guess
    nikto –h 192.168.0.1 -m
    报告输出指定地点
    nikto –h 192.168.0.1 -o result.txt

7. 扫描方式
    Tuning 选项控制 Nikto 使用不同的方式来扫描目标。
    -T 参数后的数字是隐藏的,可以灵活搭配使用
    nikto –h 192.168.0.1 -T 58
    nikto –h 192.168.0.1 -T 58x
    nikto –h 192.168.0.1 -T 默认不指定数字

8. 生成报告
    nikto -host xxxx -output result.html -F html

Nikto 的扫描结果还可以导出为 Metasploit在执行扫描时可以读取的格式,
这样就可以使用 msf 漏洞库快速配检索数据
nikto -host/-h http://www.example.com -Format msf+

完全点检测一个主机信息:nikto -h 192.168.0.1 -m -T -c -o 结果.txt

指定目录扫描

有时候只扫描网站下的某个子目录,可以使用 -c 参数 指定扫描的目录,
使用 -c all 可进行目录爆破,并扫描。
示例:nikto -h http://192.168.1.5 -c /dvwa

Nikto 在扫描过程中可以使用8种规则绕过IDS检测,参数是 - evasion,具体规则如下:

1,随机url编码
2,自选路径
3,提前结束url
4,优先考虑长随机字符串
5,参数欺骗
6,使用TAB作为命令分隔符
7,使用变化的url
8,使用windows路径分隔符

组件默认密码

nikto官网还发布了各大组件的默认密码,可以访问 https://cirt.net/passwords 进行查看。

Nikto 配合 Nmap 扫描

Nikto 支持配合 Nmap 进行扫描 ,运行命令:nmap -p80 x.x.x.x -oG - |nikto -host -

nmap 扫描开放 80 端口的 IP,并通过 oG 选项对扫描结果输出并整理,然后通过管道符 | 将上述扫描结果导入到 nikto 进行扫描。

示例:

在谷歌搜索 nikto reports 有了这样一份报告,就拿他来小试牛刀 
​http://www.ruben-alves.com/ficheiros/nikto-AT-localhost.html
提示:这是一份html格式的报告,生成命令为:nikto -h xxxx -o result.html -F htm
个人认为,html格式的报告比txt格式的报告好看,建议使用 html 报告格式

Nikto Scan Summary

Software DetailsNikto 2.00
CLI Options-host localhost -output nikto@localhost -F html
Hosts Tested1

首先,告诉了 nikto 的信息,使用的是 nikto 软件,版本号,命令行参数

localhost / 127.0.0.1

Target IP127.0.0.1
Target hostnamelocalhost
Target Port80
HTTP ServerApache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6
Start Time2007-11-14 0:09:00
End Time2007-11-14 0:09:00
Elapsed17 Seconds
Site Link (Name)http://localhost:80/
Site Link (IP)http://127.0.0.1:80/
Items Tested4342
Items Found8

上面的表格告诉我们的是目标服务器相关的信息,ip,域名,端口号,web服务器等等

InformationOSVDB-877: HTTP method ('Allow' Header): 'TRACE' is typically only used for debugging and should be disabled. This message does not mean it is vulnerable to XST.
OSVDB EntriesOSVDB-877
InformationPHP/5.2.3-1ubuntu6 appears to be outdated (current is at least 5.2.4)
OSVDB Entries
InformationApache/2.2.4 appears to be outdated (current is at least Apache/2.2.6). Apache 1.3.39 and 2.0.61 are also current.
OSVDB Entries
InformationPHP/5.2.3-1ubuntu6 appears to be outdated (current is at least 5.2.4)
OSVDB Entries

上述是针对服务器提出的几种建议。下面的表格厉害了,注意看description

URI/phpmyadmin/
( 这是相对于host的路径)
HTTP MethodGET
DescriptionphpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
(phpmyadmin是负责管理mysql数据库的页面,应该限制访问权限)
Test Linkshttp://localhost:80/phpmyadmin/
http://127.0.0.1:80/phpmyadmin/
OSVDB EntriesOSVDB-3092
URI/icons/
HTTP MethodGET
DescriptionDirectory indexing is enabled: /icons indexing
(目录遍历漏洞)
Test Linkshttp://localhost:80/icons/
http://127.0.0.1:80/icons/
OSVDB EntriesOSVDB-3268
URI/
HTTP MethodTRACE
DescriptionTRACE option appears to allow XSS or credential theft. See http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf for details
Test Linkshttp://localhost:80/
http://127.0.0.1:80/
OSVDB EntriesOSVDB-877
URI/index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
HTTP MethodGET
DescriptionPHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings.
(访问上面的url,我们发现其实是phpinfo页面啊,确实包含了很多敏感信息)
Test Linkshttp://localhost:80/index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
http://127.0.0.1:80/index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
OSVDB EntriesOSVDB-12184
URI/phpinfo.php
HTTP MethodGET
DescriptionContains PHP configuration information
Test Linkshttp://localhost:80/phpinfo.php
http://127.0.0.1:80/phpinfo.php
OSVDB EntriesOSVDB-3233
URI/server-status
HTTP MethodGET
DescriptionThis reveals Apache information. Comment out appropriate line in httpd.conf or restrict access to allowed hosts.
Test Linkshttp://localhost:80/server-status
http://127.0.0.1:80/server-status
OSVDB EntriesOSVDB-561
URI/readme
HTTP MethodGET
DescriptionThis might be interesting...
Test Linkshttp://localhost:80/readme
http://127.0.0.1:80/readme
OSVDB EntriesOSVDB-3092
URI/doc/
HTTP MethodGET
DescriptionThe /doc/ directory is browsable. This may be /usr/doc.
Test Linkshttp://localhost:80/doc/
http://127.0.0.1:80/doc/
OSVDB EntriesOSVDB-48

许多 Nikto 的警报会返回 OSVDB 序号。这是由开源缺陷数据库(http://osvdb.org/)所指定。可以在 OSVDB 上找出相关缺陷的深入说明。

同许多渗透测试工具一样,nikto提供给你的信息有局限性,如果nikto确定一个问题,很值得我们深究到底,因为全世界的每个黑客都可以轻易的找到相同的问题,另一方面,如果nikto什么也没找到,也不代表就不存在安全问题

随着你的安全测试变的成熟,从 nikto 的扫描中得到的收益将越来越少。

靶 机 演 练

登录到操作系统之后怎么办?

  • 查看敏感文件:ls -al、find / -name
  • sudo -l
  • 操作系统漏洞
  • history 命令