渗透测试知识点(3)

简介

在执行侦察步骤(请参阅渗透测试(2))过后,我们建立了一个IP地址列表,该目标列表既是我们目标计算机的IP地址,也是我们被授权对其进行攻击的IP地址,在侦察中,我们建立了搜集到的信息与受攻击IP地址之间的映射关系,在扫描中,我们将建立IP地址与开放端口和服务的映射关系。

大多数网络的职责就是至少允许某些信息穿越网络边界与外界进行沟通,完全孤立的网络,既没有与互联网连接,也没有提供像电子邮件或Web这样的服务。每一种服务,不管是直接或间接与外界连接,都会给攻击者提供潜在的立足点,我们将扫描过程分为以下四步:

  1. ping数据包验证系统是否正在运行。
  2. Nmap扫描系统端口
  3. Nmap脚本引擎(NSE)进一步查询目标
  4. Nessus扫描系统漏洞
    有些扫描工具将这几个阶段合并成一个单一的过程
  • 1目的:判断目标系统是否已经开启以及是否可以与我们的计算机进行通信。无论这一步产生怎样的结果,我们都应进行下面的操作,
  • 2目的:识别在特定主机上开启了哪些端口以及运行了哪些服务(Nmap可将1.2合并为一步)
  • 3目的:利用NSE进一步查询,验证早期的发现
  • 4目的:定位和识别运行在目标计算机上的服务和软件有哪些已知漏洞

端口

端口提供了软件、服务、网络与硬件(包括电脑在内)进行通信的途径和场所,端口为计算机与计算机之间、计算机与软件之间、计算机与设备之间交换信息提供了一个数据连接。在计算机与网络互连之前,计算机之间通过物理介质进行通信,例如软盘,当计算机互连成网络后,它们之间就通过端口进行通信。使用多端口允许多个通信同时进行,无需等待。(把计算机想象成一所房子,人进入房子的方式有很多种,每一个进入房子(计算机)的通道就类似于计算机端口。所有通道就像计算机的端口一样,允许流量进出计算机。)

很多常用的网络服务都运行在标准的端口号上,它提示攻击者目标系统开启了哪些功能。比如:

  • port:80 HTTP
  • port:443 HTTPS

每一个端口都是进入目标系统的潜在通道,对于对外提供网络服务的服务器,我们必须利用的端口开放。(如HTTP端口80,FTP端口21等)

跳板攻击(Pivoting)

侵入一台机器,然后使用该机器作为跳板攻击另一台机器

扫描外部设备

不管我们是想进入到一个目标网络内还是想控制某些机密的内部机器,一般都要从扫描外部设备开始。先扫描外部设备是因为我们在侦察阶段所获得的信息大部分都是属于外部设备的,除此之外,我们不可能总有机会直接进入目标网络内,因此,我们通常使用跳板攻击,通过逐步控制一系列中间设备,并以它们为跳板,达到控制最终目标的目的。

外部设备

外部设备包括计算机、服务器、路由器和防火墙以及其他设备,它们被部署在保护网络的边缘,这些设备是内部被保护资源和外部网络(如Internet)互相通信的中介。

Ping和Ping扫描

ping是一种特定类型的网络数据包,称为ICMP数据包。ping用于给计算机或网络设备上的某些特殊接口发送特定类型的网络流量,这种特定类型的网络流量叫做ICMP回显数据包(ICMP Echo Request packets)。如收到ping包的设备(及其所附网卡)是开启的且不限制响应,那么它就会回应一个回显响应的数据包(Echo Reply packets)给发送方。ping包除了告诉我们某台主机是活动的并正在接收流量外,还提供数据包往返总时间、报告流量丢失情况、衡量一个网络连接的可靠性等。

要在Linux上运行Ping命令,需要在终端发出如下命令:

ping target_ip

比如,我们如果相对百度执行Ping命令,则在终端输入以下命令:

ping www.baidu.com

得到的结果如下图所示:

  • 上图框中的一行告诉我们ICMP回显请求数据包成功到达了目标主机,并且该主机给我们的计算机发回了响应数据包。
  • 64 bytes表明响应数据包的大小
  • from 39.156.66.18(39.156.66.18)指定了我们的www.baidu.com 的主机名及IP地址。
  • icmp_seq=指定数据包的顺序
  • ttl=是生存时间值,用来确定数据包自动终止前可以经历的最大跳数
  • Time告诉我们的数据包到目标往返一趟的时间

ping扫描

ping扫描就是自动发送一系列的ping包给指定范围内的IP地址,而不需要手动地逐个输入目标地址。

执行Ping扫描最简单的方法是使用FPing工具,FPing已经内嵌于Kali中,以终端方式运行。可以在终端输入以下命令:

fping -a -g 39.156.66.14 39.156.66.18
  • -a 表示在输出中只显示活动主机
  • -g 用于指定我们想要扫描的IP地址范围

注:不是每个主机都会响应ping命令,有些主机上的防火墙或其他设施会抑制ping包

端口扫描

  • 现在我们已经有了一个目标列表,我们可以针对其中的每一个探寻到的IP地址执行端口扫描。端口扫描的目的是为了识别在我们的目标系统上哪些端口是开启的,以及判断哪些服务是开启的。服务就是在计算机上执行的某个特定工作或任务,比如电子邮件服务、FTP服务、打印服务,或Web网页访问服务。端口扫描就如图敲一所房子的门和窗,看哪个会有回应。例如,如果我们发现80端口是开启的,我们可以尝试连接这个端口。这样就能不断地收集到监听在该端口的Web服务的相关信息。
  • 端口是基于TCP或UDP协议的,这取决于端口上运行的服务以及在端口上所运行的通信类型。
  • 当我们执行端口扫描时,我们的工具会创建数据包并将其发送给目标的每一个指定端口。这么做的目的是为了验证目标端口将给出什么样的响应,不同类型的端口扫描会显示不同的结果。

命令行

大多数新手都会认为黑客入侵是一种图形化的任务,但事实上,你的主要目标是获得一个有管理员权限的shell或进入目标电脑的后门。这个shell是一个字符形式的终端,它允许攻击者通过使用命令行来控制目标主机。

三次握手

当某个网络上的两台计算机使用TCP进行通信时,它需要完成三次握手。这个过程与电话交谈类似。当你想通过电话和某人交谈时,你要先进行拨号,拨通后,对方在不知道你是谁的情况下说”喂?你好。”,这时你就可以说“嗨,我是张三。”对方知晓你的身份后,双方都有了足够的信息并可以开始正常交谈了。

计算机的工作方式大致相同。当两台计算机想要对话时,第一台计算机通过发送一个SYN数据包给特定的端口号来连接第二台计算机,如果第二台计算机正在进行监听,它会发送一个SYN/ACK响应数据包作为响应。当第一台计算机收到SYN/ACK之后,由它再向第二台计算机回应一个ACK包,这时,两台计算机就可以正常运行了。在上述打电话的例子中,拨号相当于发送了SYN数据包,对方回应”喂?你好。”相当于返回一个SYN/ACK响应,最后你说“嗨,我是张三”则相当于返回了一个ACK响应数据包。

使用Nmap进行主动扫描

Nmap的基本用法

对单个主机的扫描

在终端输入如下命令:

namp 192.168.190.134

上述指令对IP地址为192.168.190.134的主机进行扫描,结果如图所示:

  • 第一行给出Nmap的版本为7.80,扫描开始时间
  • 第二行给出一个标题
  • 第三行的up给出目标主机的状态,up意味着这台主机处于开机并连上互联网的状态
  • 第四行表示在进行检查的1000个端口中(默认),有997个是关闭的
  • 接下来的字段,PORT指端口,STATE指状态,SERVICE指的是运行的服务。(此字段第一行表示目标计算机上的135号端口处于开放状态,这个端口提供msrpc服务)
  • 紧接着的一行给出目标主机的MAC地址
  • 最后一行表示经过对1台主机扫描,发现1台状态为up的主机,耗时1.4s

对上述指令加一个参数-sn,其意义是扫描目标主机是否在线

nmap -sn 192.168.190.134

对多个不连续的主机进行扫描

命令语法:

nmap IP1 IP2 IP3

对多个连续主机进行扫描

命令语法:

nmap 192.168.190.134-255

对整个子网进行扫描

命令语法:

nmap IP地址/掩码位数
nmap 192.168.190.134/24

使用Nmap进行主机发现

使用Nmap进行ARP连接扫描

这种方式仅能用于与Nmap所在主机在同一子网的目标主机。当满足这个条件后,使用ARP扫描不仅速度快,而且结果最为精准,这是因为没有任何安全措施会阻止正常的ARP请求。
命令语法如下:

nmap -PR 192.168.190.134

使用Nmap进行TCP连接扫描

TCP连接扫描被认为是端口扫描中最基础最稳定的,因为Nmap试图在其命令指定的每个端口上完成三次握手。这种扫描完成后,又以友好的方式断开连接,因此很少有机会对目标系统进行洪泛攻击并导致崩溃。

如果没有给出特定的端口扫描范围,Nmap将会扫描1000个最常用的端口。使用Nmap时,可以使用-p-参数指定扫描所有端口,建议使用-Pn参数,启用该参数将会导致Nmap禁用主机发现功能并假设每一个系统都是活动的,强行对其进行扫描。这对于发现在常规扫描中可能会漏掉的系统和端口非常有用

为了运行TCP连接,我们在终端下执行以下命令:

nmap -sT -p- -Pn 192.168.190.130
  • -sT Nmap运行了一个TCP连接扫描,s告诉Nmap要运行哪种类型的扫描,-T用来执行一个TCP连接扫描
  • -p- 告诉Nmap要扫描所有端口,而不是只扫描默认的1000个常用端口
  • -Pn 跳过主机发现阶段,对所有地址进行扫描。

通常,我们需要对整个子网或某一IP地址段进行扫描,在这种情况下,我们只需要将最后一个IP地址的最后一个字节添加到Nmap命令后面,就可以扫描一段连续范围内的IP地址:

nmap -sT -p- -Pn 192.168.190.1-130

这条命令的执行会造成Nmap对IP地址为192.168.190.1到192.168.190.130范围内的所有主机进行端口扫描。

使用Nmap进行SYN扫描

  • SYN扫描是Nmap扫描的默认扫描方式。SYN扫描比TCP连接扫描更快而且仍然相当安全,几乎不会造成拒绝服务攻击(DOS)或是目标系统瘫痪。SYN扫描并没有完成三次握手,只是完成了前两步,所以它的速度非常快。
  • 在SYN扫描中,执行扫描的主机发送SYN数据包给目标,目标回复SYN/ACK(假定端口已经启用且没有进行数据包过滤),到目前为止,都与TCP连接扫描一样,但是接下来,执行扫描的计算机并没有向目标发送ACK数据包,而是发送了一个RST(重置)数据包给目标计算机。重置数据包告诉目标计算机放弃前面接收的所有包,并关闭两台计算机之间的连接。
  • 如果把三次握手看成一次打电话的过程,SYN扫描就像是一方呼叫另一方,接收方拿起电话说:“喂?”,这时发送方一声不吭的挂掉了电话。

要运行SYN扫描,在终端输入以下命令:

nmap -sS -p- -Pn 192.168.190.130

使用Nma进行UDP扫描

TCP连接扫描和SYN扫描都是基于TCP进行通信的。如果我们想要找寻基于UDP的服务,我们需要操控Nmap创建UDP数据包进行扫描,要进行UDP扫描,在终端输入以下命令即可:

nmap -sU 192.168.190.130

此命令没有-p- -Pn是因为UDP扫描非常慢,即使在默认的1000个端口执行一个基本的UDP扫描,也要花费很多时间。

使用UDP进行通信不需要接收方做出响应,所以Nmap很难区分UDP端口是开启了还是扫描数据包被过滤了,所以,当Nmap执行
一个UDP扫描却没有收到任何响应信息时,它就会反馈给用户该端口“open|filtered(启用或过滤)”的信息,但在实际扫描中,几乎所有的端口都会被标记为”open|filtered”。

版本扫描

为了使目标返回对我们更加有用的信息,我们在UDP扫描中添加“-sV”参数,通过此参数用于版本扫描,但此处可用于缩小UDP扫描的范围。

启用了版本扫描后,Nmap会发送额外的探测信息给每个扫描到的“open|filtered”端口。这个额外的探测信息试图发送额外的特制数据包来识别服务,这些特制数据包往往会成功触发目标进行响应。通常情况下,会将扫描报告中的结果从“open|filtered”改为”open”。使用版本扫描的命令如下:

nmap -sUV 129.168.190.130

TCP和UDP

  • TCP是“面向连接的协议”,因为它需要通信双方保持同步,它确保发送方发出的数据包被接受方正确且按序接收。,TCP的工作机制类似于打电话。
  • UDP是“无连接”的,因为它只需要发送方将数据包发送给接收者,并没有提供任何确认数据包是否到达目的地的机制。UDP的工作机制类似于往信箱里投一封信。大多数情况下,发送方只是在信封上写个地址。贴个邮票,并把信投进信箱,最后,配送员取走信件并开始配送,在这个过程中,发送方并不会收到回执或确认信息,一旦邮递员取走信件,发送方不能保证信件能够到达最终目的地。

使用Nmap进行端口发现

Nmap对目标的端口进行扫描时,对端口状态的判断有以下5种:

  • open 应用程序在该端口接收TCP或UDP报文
  • closed 端口关闭
  • filtered 由于包过滤阻止探测报文到达端口,nmap无法确定端口是否开放。(过滤可能来自专业的防火墙设备,路由规则或主机上的软件防火墙)
  • unfiltered 此状态意味端口可被访问,但无法确定其是否开放。(只有映射防火墙规则集的ACK才会把端口分类到这个状态)
  • open | filtered 无法确定端口被过滤还是开放,开放的端口不响应就属于其中一种情况。

扫描全部端口

命令语法:

nmap -p "*" 192.168.190.134

扫描指定端口

命令语法:

nmap -p 80 192.168.190.134

使用Nmap扫描目标主机的操作系统

命令语法:

nmap -O 192.168.190.134

使用Nmap扫描目标服务

通过添加-sV来进行服务和版本的识别。命令语法如下:

nmap -sV 192.168.190.134

使用Nmap执行Xmas扫描

RFC文档

在计算机世界中,RFC要么是一个注释文档,要么是关于现有某项技术或标准的技术规格。RFC为我们提供了大量的特定系统内部运作的细节。攻击者会在其中查找文档所描述的系统的漏洞。Xmas Tree(圣诞树)扫描和Null(空)扫描正是利用了这样的漏洞进行攻击的。

Xmas Tree扫描

之所以叫Xmas Tree扫描,其原因是数据包的FIN、PSH和URG标记置为“on(打开)”。我们把数据包那么多标记被打开的现象描绘为“就像点亮了一棵圣诞树”。Xmas Tree数据包不常用的原因是数据包中的SYN和ACK标记一般不会被打开。

在TCP的RFC中是这样描述的,如果一个关闭的端口收到的数据包没有置位(打开)SYN、ACK或RST标记,该端口就会发送RST包作为响应。如果开启的端口收到这样的数据包,那么该端口就会忽略该数据包。假定计算机的操作系统完全遵循TCP RFC文档,那么不用完成连接的过程,甚至仅在发起连接的情况下,Nmap就可以断定一个端口的状态。

要在终端使用Xmas Tree扫描,要在终端输入以下指令:

nmap -sX -p- -Pn 129.168.190.130

注:Xmas Tree扫描只针对Unix和Linux系统,对Windows系统不管用。

Null扫描

Null扫描与Xmas Tree扫描的原理类似,进行Null扫描的命令如下:

nmap -sN -p- -Pn 192.168.190.130

Nmap脚本引擎

NSE将Nmap的功能扩展到传统端口扫描之外。
为了调用NSE,我们使用”- -script”参数,后面加上参数或脚本名,以及目标IP地址:

nmap --script banner 192.168.190.130
  • banner脚本是一个Nmap扩展,创建到TCP端口的一个连接,并将目标系统发送的任何输出打印到本地终端。这在识别隐藏端口上未识别服务极其有用。

类似地,我们可以使用- -script category_name格式调用整组或整个类别的脚本,如:

nmap --script vuln 192.168.190.130
  • vuln将运行在目标系统上搜索已知问题的脚本,这一类别通常只在发现漏洞时提供输出。

端口扫描总结

一旦完成端口扫描,就得到了目标计算机上开放端口以及运行的服务的列表。在检查Nmap输出的时候,对端口扫描中发现的所有远程访问服务,我们应尝试登录。

将Nmap的扫描结果保存为XML文件

命令语法:

nmap -oXReport.xml 192.168.190.134

漏洞扫描

当我们拥有目标计算机的IP地址列表,并且已知这些计算机上开放的端口和已启用的服务之后,就可以开始漏洞扫描。漏洞扫描可以让我们直接跳到第三步:获取系统控制权。

使用Openvas进行漏洞扫描

在kali中安装Openvas

  1. 更新系统软件包索引:

    apt-get update
  2. dist-upgrade命令对系统进行更新,与upgrade不同的是,dist-upgrade可以根据依赖关系的变化来添加包和删除包

    apt-get dist-upgrade
  3. 在kali上安装openvas

    apt-get install openvas
  4. 初始化openvas

    openvas-setup
  5. 向openvas中添加用户名和密码

    openvasmd --user=admin --new-password=admin
  6. 在浏览器中访问https://127.0.0.1:9392打开openvas的一个Web化的控制界面。

注:如果已经安装openvas,在终端使用openvas-start命令后访问上述网址即可打开openvas

使用openvas

  1. 选择scan下tasks
  2. 选择星型图案下的new tasks
  3. 选择下图中的标志对靶机进行设置
  4. 在弹出的窗口中对靶机的IP地址以及名字进行设置,点击create完成设置
  5. 在New Task窗口中点击create完成此次漏洞扫描的设置
  6. 点击菜单的scan选项,选择tasks,出现如下图所示界面,红框中的windowsXP即为刚才所创建的扫描,单击右侧绿色按钮开始进行扫描。
  7. 扫描过程中status一栏中会变成黄色的request,当扫描完成后,会变成上图中第一栏的蓝色的Done。

查看openvas的扫描报告

  1. 完成后点击Last一栏的日期,出现如下界面:
  • Vulnerability显示的是漏洞名称(单击漏洞名称可以显示该漏洞的详细信息)
  • security显示的是漏洞的威胁级别
  • Host显示的是存在该漏洞的主机
  • Location表示漏洞的端口
  • 该页面的漏洞级别是根据威胁级别从高到低排列的
  1. 可以单击菜单栏的scan选择Results,获得图形化的扫描报告。

  2. 导出扫描报告:点击菜单栏scan,选择tasks,点击last中的日期,会出现下图界面,单击框中的选项选择导出格式,然后点击后面的绿色按钮进行保存路径选择。(默认保存在Downloads目录中)


   转载规则


《渗透测试知识点(3)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录