第三章 网络主机扫描

本章是进入渗透测试工作流程的第一步。无论你是高级还是新手,本章都将帮助你成功地进行网络扫描。在开始扫描网络之前,我们将介绍您需要了解的基础知识。之后,我们将深入研究如何扫描网络目标。本章涵盖以下内容:

一、网络基础

二、识别活主机

三、扫描服务、

四、枚举

五、操作系统指纹

六、nmap脚本引擎

七、扫描子域


网络基础

在开始扫描和识别主机之前,首先了解组网的基础知识。例如,为什么我们使用10.0.0.1/16?或者什么是TCP握手?让我们开始!学习以下的内容

网络协议

下面是成功扫描网络需要了解的两个主要网络协议。

传输控制协议(TCP)是网络基础设施中使用的主要协议。每个应用服务器(HTTP、FTP、SMTP等)都使用此协议来正确连接客户端与服务器。

TCP称为使用三向握手的概念来建立网络连接。首先,要启动 TCP 会话,客户端向服务器发送 SYN 数据包(同步)。服务器接收 SYN 并使用同步/确认(SYN/ACK)回复客户端数据包。最后,客户端通过向服务器发送数据包ACK数据包来完成会话。例如,图3.1显示了Bob先生上网并使用浏览器(客户端)通过访问www进行Google(Web服务器)搜索的场景。

了解 TCP 握手等概念非常重要。像 Nmap 这样的网络扫描仪使用它来识别活动主机、开放端口(您将在接下来的部分中了解更多相关信息)。像 Wireshark 这样的网络嗅探器是了解计算机网络如何工作的好工具。为什么?因为网络感知探器会监听通过中断的所有中断和传出流量。要启动 Wireshark,只需在终端窗口中输入其名称 ($wireshark)。 ,您选择网络接口;它要么是需要连接,要么是WiFi WLAN。在本例中,我们使用etho,然后单击屏幕左上角的“开始”按钮

UDP

用户数据报协议 (UDP) 是一种无连接的网络连接。

与 TCP 连接正好,UDP 客户端和服务器不能保证数据包传输,

因此 UDP 中不存在三向握手。使用 UDP 的应用程序示例包括音频和视频流 - 您正在寻找此类连接的性能。在前面,显示了最流行的应用程序及其相应的协议(TCP 或 UDP)。

其他网络协议

TCP和UPD是最流行的网络协议,但也存在其他类型的协议。在本节中,我们将介绍其余的内容。

ICMP

ICMP (Internet Control Message Protocol)协议用于测试连通性。Ping工具使用该协议来测试主机网络是否启动并运行(默认情况下traceroute也使用它)。下面以ping 10.0.20.1为例,检查Wireshark的ICMP连接情况。

ARP

ARP (Address Resolution Protocol)是一种将IPv4地址映射到MAC地址的机制。这个概念对于内部网络的工作是必不可少的。路由器通过IP地址(第3层)在互联网上相互连接,但是一旦数据包进入你的网络,那么ARP表将使用MAC地址(第2层)。你可以使用命令ARP -a来获取ARP表内的项目列表(保存在本地主机上):

arp -a

这些层指的是前面显示的OSI层。开放系统互连(OSI)将网络连接分成不同的层。

计算机网络的7层模型IP地址

互联网协议(IP)是网络的主要支柱之一,它使计算机能够相互通信。IP地址分为IPv4和IPv6两种版本。

IPv4

IPv4是32位的,但总是以十进制格式表示,如192.168.0.1,等于11000000.10101000.00000000.00000001。把它写成十进制比写成二进制更简单,对吧?IP地址分为公网IP地址和私网IP地址。公网IP地址用于internet,私网IP地址用于intranet。您的公共IP地址可能是由您的互联网服务提供商(ISP)自动提供给您的,除非您购买了静态公共IP地址。以下是私有IPv4地址范围:

子网和CIDR

子网的作用是将网络划分为更小的范围(网段)。子网将标识IP范围内的主机数量。例如,192.168.0.1可以有一个子网掩码255.255.255.0,这意味着我们可以请使用此IP范围内的254台主机。无类域间路由(CIDR)是为了简化子网掩码而创建的。如果我们以前面的示例为例,我们可以编写子网/24 (CIDR等效)而不是长子网。表3.2列出了可供参考的子网和子网掩码。

 IPv6

到目前为止,我们仍然大量使用IPv4来运行网络基础设施。自从世界上有一些尝试从IPv4到IPv6的变化,IPv4地址总有一天会用完。您至少需要了解IPv6在实践中是如何工作的。IPv6的格式是128位十六进制字符。下面是一个价值一万亿字的IPv6的例子:

oooofff0:0000:eeee: 000000000000000:fe77:03a我们将使用这个示例来了解IPv6格式是如何工作的。为了首先遵循IPv6的细节,我们需要删除前导零。

前:fff0:0000:eeee: 000000000000000:fe77:03a

后:fff0:0:eeee:0:0:0:fe77:3aa2。

压缩零序列(在我们的示例中,有三个零序列)并将它们替换为....

前: fff0:0:eeee:0:0:0:fe77:3a

后: fff0:0:eeee::fe77:3a

请注意,在IPv6中,一个0序列只能压缩一次。

端口号

端口号和IP地址就像兄弟姐妹一样。没有端口号,网络数据包将永远无法到达目的地。端口号就像一个公民地址。街道名称(IP地址)不足以获得某一属性;您将需要一个公民号码(端口号)有一个完整的地址。假设您正在使用浏览器访问www.google.com。您的数据包将需要web服务器主机的IP地址和端口号,

HTTPS的默认端口号是443。在同一台服务器上(具有相同的IP地址),谷歌可以托管其他服务,

例如FTP;然后数据包将使用端口21到达它。

网络扫描

现在您已经了解了网络的基本知识,是时候开始行动了。在接下来的部分中,您将了解如何识别网络中的目标主机。

识别活主机

有多种方法可以确定主机是否已启动并在网络上运行。

Ping

您可以使用 Ping 快速检查网络连接。那么,Ping 的底层是如何工作的呢?当您执行 ping 命令时,您的 Kali 主机将向目标发送 ICMP echo 请求,然后目标将使用 ICMP echo 回复数据包进行响应。因此,你可以说目标还活着。 ping 命令对于系统管理员很有用,但我们是精英,对吧? 稍后,您将了解为什么必须使用 Nmap 来扫描活动主机。最后,您需要注意,某些系统管理员会在防火墙级别关闭ICMP回显,以阻止黑客检查某些服务器的连接性。

ARP

地址解析协议是一个奇妙的实用程序,它将IP地址映射到本地网络中的物理MAC地址。现在,我们可以利用ARP表的内容,在Kali上使用ARP -scan命令列出同一网络上的所有主机:

arp-scan [ip地址]

Nmap

现在是时候向您展示我用来识别活动主机的最喜欢的工具:Nmap。您将需要使用以下命令选项来完成这项工作:

nmap -sn [ip地址]

为了帮助你记住它,把选项-s想象成Sam, N是Nanny。这些选项的真正含义如下:

n代表No。

s代表扫描。

这就是为什么此选项的名称为“无端口扫描”。有些人称之为Ping扫描,但不要把它和我们在本章前面讨论的ICMP Ping工具混在一起。话虽如此,让我们看看为什么这个选择是神奇的。为了识别活动的主机,Nmap将尝试执行以下操作:

1. 将发送 ICMP echo 请求,如果 ICMP 被阻止,Nmap 也不会放弃。

2.另外,它还会发送 ICMP 时钟请求。

3. 将向端口 80 发送 ACK 数据包,终端端口 443.

4 发送SYN 限制数据包。

最后,它会发送一个 ARP 请求。太强大了,对吧?重要的是要明白,你需要成为 Kali 机器上的 root 用户(或 sudo 组的成员),否则你的选项将受到,并且您将无法执行所有这些功能。让我们让 Sam 和 Nanny 付诸行动

端口扫描和服务枚举

在网络扫描期间,您需要执行的任务之一是查找每台主机上的开放端口。为什么?假设您想了解局域网 (LAN) 上的所有 Web 服务器;端口扫描可以让您轻松获取此信息。看看 Nmap 如何像老板一样处理这个任务。

TCP端口SYN扫描

在Nmap中有很多选项可以执行端口扫描,但是对于TCP,我总是使用SYN扫描。事实上,Nmap默认会执行这种类型的端口扫描:

为了记住它,你可以将选项-ss与Sam和Samantha联系起来。当您想要执行端口扫描时,请始终考虑Sam和Samantha。

如果你的名字是Sam,那你就太幸运了,但ss选项代表SYN扫描,有些人称之为隐身扫描;我编了SAM-Samantha的术语,这样你们就能轻松记住了。让我向您解释一下SYN扫描在Nmap中的工作原理。当提供ss选项时,扫描器将向服务器发送SYN请求,如果在响应中收到SYN/ ACK,则它将显示端口是打开的。如果扫描器没有接收到SYN/ACK,则关闭或过滤它。需要说明的是,过滤意味着有防火墙在保护它:

UDP

现在,UDP端口扫描呢?要在Nmap中使用UDP端口扫描,你必须添加sU选项:

nmap -sU [IP地址]

重要的是要注意,UDP由于其无连接的性质而很慢。我们总是可以使用T5计时选项来调整它,使它更快。防火墙可以很容易地阻止internet地址上的T5。T2选项是您扫描互联网IP地址时的朋友,因此您可以绕过雷达(防火墙等):

nmap -sU -T5 [IP地址]

因此,为了让UDP扫描器识别端口是打开还是关闭,它将发送一个UDP数据包并等待来自目的地的响应。如果Nmap是否得到响应,则可能端口是打开的。另一方面,如果扫描器接收到ICMP错误,则端口被关闭或过滤:

使用Nmap扫描的基础

让我们讨论Nmap中的一些基础知识。如果你在没有任何选项的情况下运行Nmap,默认情况下该工具将使用三个重要的功能:

它会将速度设置为T3。

它将扫描顶端的TCP 1000端口。

假设您是Kali机器的root用户,它将默认设置SYN TCP扫描。

那么,所有这一切都发生在前端,这意味着您不需要指定 T3 速度,因为它默认就在那里。它与端口号(不需要添加 --top-ports 1000)或 TCP SYN 扫描(不需要添加 -ss 选项)相同。在前面的示例中,我们为 SYN 扫描指定了 ss 选项,但这里不需要这样做,因为 Nmap 会默认设置它,对吗? 对于调整部分,请务必记住明智地选择速度。例如,不要在生产IP地址上使用像T5这样的快速速度;相反,请坚持使用默认值(T3)。另外,请确保选择适合您需要的端口数量,可以是前100个端口,也可以是默认选项 1,000 个。让我们看一个实际的例子;假设您使用 TCP 扫描来扫描前 100 个端口:

#更快的扫描TCP

nmap --top-ports 100 -T5 [IP地址]

服务枚举

现在来看看如何使用最好的扫描程序:Nmap来执行服务版本扫描。在Nmap中执行版本扫描的选项是-sv。一般来说,记忆Nmap中命令选项的好方法是为每个字母应用一个含义。例如,

s代表扫描,

v代表版本。容易,对吧?这就是为什么它被称为版本扫描。请注意,版本扫描将比普通端口扫描花费更长的时间,因为它将尝试识别服务类型。在下面的示例中,我们将扫描之前使用的同一台主机,但这次我们将添加-sv选项(检查版本列):

nmap -p- -T5 -sV 192.168.247.130

这里有一个很好的提示,使版本扫描更快。因为我们之前已经扫描了开放的端口,所以我们不需要使用-p-再次扫描所有端口。相反,我们只能指定之前在端口扫描中确定的端口号(将速度时间与之前的版本扫描进行比较;有一半的时间是这样!)

nmap -p 22,53,80,443 -T5 -sV 192.168.247.130

最后,您可以更改版本扫描侵略性。换句话说,您希望Nmap对每个服务的版本进行多深的扫描?强度越高,扫描目标主机所需的时间就越长。

您可以使用nmap -h命令列出nmap中的所有选项,以防您忘记其中任何一个。你需要多年的练习才能把它们都背熟。

在下面的示例中,我们将使用——version-light选项使其更快。请注意,我们能够在不牺牲版本列信息的情况下使它比以前快一秒(也许一秒对一台主机来说不是什么大问题,但对于一个网络范围来说,它将产生很大的差异):

操作系统指纹识别

想象一下下面的场景:你的经理或客户来找你说:“我们想知道我们的网络中是否有人在使用Windows XP。”你笑着说:“当然,我知道如何像专业人士那样做。”在本节中,您将学习如何使用Nmap识别LAN上主机的操作系统。为了完成这项工作,您需要添加-o选项来检测目标主机的操作系统。Nmap将尝试通过检查从主机接收的数据包来识别目标操作系统。接下来,Nmap将尝试将指纹与保存的列表进行匹配。请注意,在下面的示例中,我们添加了版本扫描来帮助识别操作系统:

nmap -sV -O -T4 192.168.247.130

Nmap脚本引擎

Nmap脚本引擎(NSE)包含一组附加功能(如暴力破解、DNS枚举、HTTP枚举等),使Nmap像老板一样工作。Nmap团队将所有这些功能分为不同的组,如下所示:

要获得所有这些NSE脚本的列表,只需列出目录/usr/share/nmap/scripts的内容:

ls /usr/share/nmap/scripts/

一个常见的例子是HTTP枚举,为此存在一个NSE脚本。为了完成这项工作,我们需要首先指定目标端口号,并且,我们将添加版本扫描(这是可选的,但我建议这样做)以获得更有趣的信息:

nmap -p [端口号] -sV –script [NSE 脚本名] [IP 地址]
map -p 80 --script http-enum 192.168.247.130

NSE分类扫描

当使用类别扫描时,不需要指定端口号,因为一个类别将针对多个端口号(所有TCP开放端口)。渗透测试中最常用的脚本是默认脚本scan -sc。在我们继续示例之前,您需要知道它为什么受欢迎。默认脚本扫描的误报次数较少(误报意味着错误的漏洞),并且与其他类别相比,对目标系统的侵入性较小(有些类别可能会像DOS类别一样使目标主机崩溃):

nmap -sV -sC 192.168.247.130  

此外,您可以使用-A开关来执行默认的脚本扫描,但要注意,该选项将使用以下内容:

$nmap -A [IP地址]
nmap -sV -p 135,445 --script smb-vuln* 192.168.247.130

NSE数值

一些NSE脚本将要求您输入一些额外的参数。蛮力攻击就是一个很好的例子。假设您想在目标主机上强制使用SSH服务,那么您需要添加;——script-args选项用于标识用户名/密码的文件:

nmap -p 22 -sV -script ssh-brute -script-args userdb=users.txt,passab=passwords.txt

 DNS枚举

为什么这一节是在网络扫描章节?DNS枚举可以让我们确定要扫描的目标主机的性质。此外,DNS枚举将使用公共搜索引擎搜索我们在开始参与时不知道的隐藏域名。例如,router.ethicalhackingblog.com的目标可能是路由器主机(ethicalhackingblog)。Com是我的域名;这里我只是举个例子)。

DNS暴力破解

有许多工具可以使用暴力方法搜索 DNS 域名。首先,我们尝试通过开发自己的 Bash 脚本来了解 DNS 暴力破解的工作原理。首先,让我们保存可能存在的潜在子域的列表:、

在实践,我使用以下子域字典文件从列表GitHub:

https://github.com/danielmiessler/SecLists/tree/master/发现/DNS

现在我们已经定义了子域的字典文件,是时候开发Bash脚本了:

#! /bin/bash

#域名的暴力破解

#提示用户输入域名


read -p "Enter the domain name that you want to brute-force: " DOMAIN_ NAME
function check_domain(){

#执行host命令并提取活动子域

results=$(host $SUB_DOMAIN | grep 'has address')
#if not empty results
if [[ -n $results ]]
then
 printf "Found $SUB_DOMAIN\n"
fi
}

#r读取字典文件
for sub in $(cat sub-d.txt) 
do
SUB_DOMAIN=$sub.$DOMAIN_NAME 
check_domain
done

DNS区域传输

将DNS主服务器记录复制到另一个DNS从服务器称为DNS传输。我们可以利用这个过程,通过请求主DNS(称为NS服务器,例如ns1.ethicalhackingblog.com)给我们目标域名的列表来获得所有子域的列表。这个查询很少工作,但如果它是成功的,那么你会得到一个礼物包含所有的子域名和他们的相关IP地址。

首先,让我们获取一个随机域名的ns服务器列表:

host -t ns [域名] | cut -d " " -f 4
host -l google.com ns1.google.com

现在您已经了解了Bash脚本的工作原理,您可以创建自己的脚本,提取ns服务器列表,然后循环到每个服务器,然后您可以使用前面指定的区域传输技术请求DNS记录列表。现在您了解了Bash脚本的用法和功能。

DNS子域工具

有很多工具可以扫描子域名。重要的是了解它们的作用,所以你需要确保你选择的一个能做到以下几点:

1. 基于高质量的字典文件快速暴力破解子域。

2.检查DNS传输。

3.在谷歌等互联网搜索引擎上自动查找子域名。

Fierce

悍是搜索子域的好工具。悍将执行多个DNS。测试,包括区域转移和暴力破解。它很快,并包含一个很好的字典文件:

fierce -dns [域名]

不要只依靠一种工具来完成工作;每种工具都有其优点和缺点。在搜索子域时也要考虑其他好的DNS工具:

可以在github上下载相对应的脚本,例如python

总结

您刚刚学习了渗透测试的第一步。理想情况下,你喜欢这一章并学到了一些新东西。在接下来的章节中,我们将利用网络扫描中的信息来利用目标主机。伙计们,好戏才刚刚开始!

posted @ 2023-10-18 19:40  YJlio  阅读(81)  评论(0编辑  收藏  举报  来源