【Linux】Kali Linux 渗透安全学习笔记(3) - Nikto 简单应用

Nikto 是一款不可多得的漏洞扫描工具。它用 Perl 编写,使用 rfp 的 LibWhisker 来执行快速安全扫描或信息检查。它使用起来非常方便,帮助文档和社区资源都比较全面,对于像我这种初学者来说简直就是福音。本章我将延续上一章 OneForAll 的用例继续进行渗透测试。

声明:

  1. 本文测试的站点为自家站点仅做学习使用,不存在侵犯网络信息安全问题;
  2. 本文只介绍工具的使用并不鼓吹任何非法活动,请各位看官三思而后行一切后果自负;
  3. 本文测试中结果虽然是真实的,但涉及的敏感信息都将采用“化名”进行脱敏;

在上一章节中我们得知,在 yzhcs.io 域名下存在两个功能模块的子域名 app.yzhcs.io 和 def.yzhcs.io ,下面就使用 Nikto 对两个子域名进行扫描。

PS:由于 kali linux(以下简称“kali”)已经自带 Nikto 因此就不再叙述其安装过程了。

在正式扫描之前我先创建一个文档,将两个域名放到 domain.txt 文档里面,如下图:

┌──(rootb8ef6c2abc47)-[/home/nikto]
└─# vim domain.txt

┌──(rootb8ef6c2abc47)-[/home/nikto]
└─# cat domain.txt 
app.yzhcs.io
def.yzhcs.io

接下来就可以通过命令行进行 nikto 扫描,如下图:

┌──(rootb8ef6c2abc47)-[/]
└─# nikto --config /var/lib/nikto/nikto.conf.default -h /home/nikto/domain.txt -ssl -o /home/nikto/202308030747_nikto.csv -evasion 13458
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          132.19.52.123
+ Target Hostname:    app.yzhcs.io
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject:  /CN=app.yzhcs.io
                   Ciphers:  ECDHE-RSA-AES128-GCM-SHA256
                   Issuer:   /C=CN/O=TrustAsia Technologies, Inc./CN=TrustAsia RSA DV TLS CA G2
+ Using Encoding:     Random URI encoding (non-UTF8)
+ Using Encoding:     Premature URL ending
+ Using Encoding:     Prepend long random string
+ Using Encoding:     Fake parameter
+ Using Encoding:     Use Windows directory separator (\)
+ Start Time:         2023-08-03 00:10:40 (GMT0)
---------------------------------------------------------------------------
... 此处省略 1w 字
+ 8121 requests: 85 error(s) and 205 item(s) reported on remote host
+ End Time:           2023-08-03 00:51:34 (GMT0) (2454 seconds)

---------------------------------------------------------------------------
+ Target IP:          132.19.52.123
+ Target Hostname:    def.yzhcs.io
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject:  /CN=def.yzhcs.io
                   Ciphers:  ECDHE-RSA-AES128-GCM-SHA256
                   Issuer:   /C=CN/O=TrustAsia Technologies, Inc./CN=TrustAsia RSA DV TLS CA G2
+ Using Encoding:     Random URI encoding (non-UTF8)
+ Using Encoding:     Premature URL ending
+ Using Encoding:     Prepend long random string
+ Using Encoding:     Fake parameter
+ Using Encoding:     Use Windows directory separator (\)
+ Start Time:         2023-08-03 00:51:34 (GMT0)
---------------------------------------------------------------------------
... 此处省略 1w 字
+ 16401 requests: 128 error(s) and 200 item(s) reported on remote host
+ End Time:           2023-08-03 01:42:32 (GMT0) (3058 seconds)
---------------------------------------------------------------------------
+ 2 host(s) tested

本人使用的命令行非常简单,其中:

  • –config:自定义渗透配置文件,通过 config 参数应用到扫描当中
  • -h:域名地址(可以是域名本身,也可以是文档路径)
  • -ssl:指定只扫描 443 端口(建议加上默认情况下 nikto 会将 80 和 443 端口都扫描)
  • -o:输出地址
  • -evasion:是否启用 IDS/IPS 逃避技术

值得一提的是,我对于渗透配置文件做了一下修改,如下图:

# Number of failures before giving up
# Set to 0 to disable entirely
FAILURES=10000

默认情况下 FAILURES 参数只有 20,在大规模扫描时这 20 次失败一下子就用完了。因此这里将 FAILURES 参数改为了 10000,并且在命令行中使用 config 参数指向修改后的配置文件(由于本人使用 Docker 镜像的 kali 系统,因此只能通过 config 参数指定配置文件,不知道实机(或虚拟机)的情况下重启是否就不需要这个 config 参数了)。

从扫描结果我可以得到以下关键信息:

域名服务 请求数 错误数 发现条目 耗时(秒)
app.yzhcs.io 8121 85 205 2454
def.yzhcs.io 16401 128 200 3058

虽然错误数平均下来都有差不多 100 个,但是大部分都是重复的,这里归纳了一下主要是以下7个问题:

0x1 It may be possible to crash Nortel Contivity VxWorks by requesting ‘/cgi/cgiproc?$’ (not attempted!). Upgrade to version 2.60 or later.

问题解析:

Nortel Contivity VxWorks 存在一个可能导致崩溃的漏洞,攻击者可以通过请求 ‘/cgi/cgiproc?$’ 触发此漏洞。建议升级到版本 2.60 或更高版本修复此漏洞。

修复方式:

  1. 升级到最新版本;
  2. 禁用或限制访问 CGI 端点,如不需要使用 ‘/cgi/cgiproc?$’ 端点,可以考虑禁用或限制对该端点的访问;
  3. 实在没有办法就使用防火墙和访问控制列表(ACL)来限制对服务器和端点的访问,只允许受信任的 IP 地址或用户访问;

0x2 The anti-clickjacking X-Frame-Options header is not present.

问题解析:

网站缺少反点击劫持(clickjacking)的 X-Frame-Options 头部。攻击者会试图通过在一个页面上覆盖另一个透明的页面来欺骗用户点击,从而进行一些恶意操作。为了防止这种攻击,您可以在 HTTP 响应头中添加 X-Frame-Options 头部。

修复方式:

添加 X-Frame-Options 头部的目的是指示浏览器在渲染网页时是否允许将网页嵌套在