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

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

声明:

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

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

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

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

bash 复制代码
┌──(root💀b8ef6c2abc47)-[/home/nikto]
└─# vim domain.txt

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

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

bash 复制代码
┌──(root💀b8ef6c2abc47)-[/]
└─# 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 逃避技术

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

bash 复制代码
# 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 头部的目的是指示浏览器在渲染网页时是否允许将网页嵌套在 <frame><iframe> 中。这样可以防止其他网站将您的网页嵌套在它们的框架中,减少点击劫持的风险。在 nginx 服务器中添加(记得要先做好备份)的具体做法如下:

bash 复制代码
server {
    # ...其他配置项...

    # 添加 X-Frame-Options 头部
    # DENY:表示该页面不允许在任何 frame 中显示,包括在相同域名下。
		# SAMEORIGIN:表示该页面可以在相同域名下的 frame 中显示,但不允许在其他域名下显示。
    add_header X-Frame-Options SAMEORIGIN;
}

0x3 The site uses TLS and the Strict-Transport-Security HTTP header is not defined.

问题解析:

网站使用了 TLS(Transport Layer Security,传输层安全协议),但未定义 Strict-Transport-Security(STS)HTTP 头部。Strict-Transport-Security(STS)是一个安全策略,通过HTTP响应头部将网站要求浏览器仅通过HTTPS与服务器进行通信,从而强制使用安全的加密连接。这有助于防止中间人攻击和SSL剥离攻击,提高网站的安全性。

修复方式:

要设置 Strict-Transport-Security(STS)头部,您需要在服务器配置中添加相应的HTTP响应头。在 nginx 服务器中添加(记得要先做好备份)的具体做法如下:

bash 复制代码
server {
    # ...其他配置项...

    # 添加 Strict-Transport-Security 头部
    
    # max-age 参数指定了STS策略的持续时间,以秒为单位。
    # includeSubDomains 参数用于包括子域名在内,这意味着该STS策略也将应用于所有子域名。
    # preload 参数用于向浏览器提交您的网站以预加载HSTS列表。
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
}

0x4 The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.

问题解析:

网站未设置 X-Content-Type-Options 头部。这可能导致用户代理(浏览器)根据 MIME 类型以不同的方式呈现网站内容。X-Content-Type-Options 头部是一种安全措施,用于防止浏览器将响应内容根据其识别的 MIME 类型进行解释。这有助于防止一些特定的攻击,例如 MIME 类型混淆攻击,从而提高网站的安全性。

修复方式:

在 nginx 服务器中添加(记得要先做好备份)的具体做法如下:

bash 复制代码
server {
    # ...其他配置项...

    # 添加 X-Content-Type-Options 头部
    
    # 将 X-Content-Type-Options 头部设置为 "nosniff",这表示浏览器将不会执行对响应内容进行 MIME 类型猜测(即不会"嗅探" MIME 类型)。
    add_header X-Content-Type-Options "nosniff";
}

0x5 This might be interesting.

问题解析:

在网站中,这些路径通常是公开访问的,并且可能包含一些敏感信息,比如版本号、文件名,或者其他可能对攻击者有用的信息。譬如目录索引开启了导致攻击者浏览目录结构,从而了解到整个网站的文件结构。除此之外,由于/js 目录可以被公开访问,因此会存在注入危险的可执行脚本的可能性...

修复方式:

可以考虑使用安全的内容传递机制,例如 Content Security Policy (CSP),来减少潜在的安全风险。

0x6 Uncommon header 'access-control-allow-headers ' found, with contents: accept,authorization,Content-Type.

问题解析:

这个问题的确是存在,这是为了解决跨域问题而设置了 access-control-allow-headers 参数,而 access-control-allow-headers 参数中又将权限放大处理了。

修复方式:

明确需要的请求头部,避免过度开放。

0x7 Microsoft SharePoint Portal and Team Services vulnerable to NT or NTLM authentication bypass on Win2000 SP4 using IE 6.x.

问题解析:

发现服务器上运行的 Microsoft SharePoint Portal 和 Team Services 存在 NT 或 NTLM 认证绕过漏洞。NTLM(NT LAN Manager)是一种在 Windows 网络环境中使用的认证协议。认证绕过漏洞可能允许攻击者在特定情况下绕过认证机制,从而获得未经授权的访问权限。该漏洞可能影响运行 Windows 2000 SP4 操作系统,并使用 Internet Explorer 6.x 进行访问的 Microsoft SharePoint Portal 和 Team Services。

修复方式:

  1. 确保服务器上的操作系统和软件都是最新版本,并应用已知的安全更新和补丁;
  2. 由于该漏洞可能涉及 Internet Explorer 6.x,要使用更现代的浏览器(如 Chrome、Firefox 或 Edge);
  3. 禁用不安全的认证方式,如 NTLMv1 或 LM(LAN Manager)认证;

以上是一些我这边比较有代表性的问题,虽然里面有解决方案,但是各位还需按实际情况进行调整。

相关推荐
Red Red3 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
2401_857610034 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
Natural_yz5 小时前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805595 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装
一只小小汤圆5 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
虾球xz5 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer7775 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz6 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py6 小时前
【Linux】-学习笔记04
linux·笔记·学习
弗锐土豆6 小时前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部