网络扫描

目标

了解网络扫描的原理和应用,使用 xscan、nmap 或 nessus 其中的任意一种常见的扫描软件对某主机进行端口、服务、漏洞扫描,分析数据包交互过程。

本篇文章为实验记录,仅供交流学习使用,切勿违法应用,所有文中提到的工具不提供下载。

原理

扫描

网络扫描是确认网络运行的主机的工作程序,或是为了对主机进行攻击,或是为了网络安全评估。网络扫描程序,如 Ping 扫射和端口扫描,返回关于哪个 IP 地址映射有主机连接到因特网上的并是工作的,这些主机提供什么样的服务的信息。另一种扫描方法是反向映射,返回关于哪个 IP 地址上没有映射出活动的主机的信息,这使攻击者能假设出可行的地址。网络漏洞扫描器是网络入侵者收集信息的重要手段,主要用于扫描目标主机识别其工作状态(开 / 关机)、识别目标主机端口的状态(监听 / 关闭)、识别目标主机系统及服务程序的类型和版本、根据已知漏洞信息,分析系统脆弱点、生成扫描结果报告。

主机扫描

主机扫描的目的是确定在目标网络上的主机是否可达。这是信息收集的初级阶段,其效果直接影响到后续的扫描。常见扫描手段有 ICMP Echo 扫描、ICMP Sweep 扫描、Broadcast ICMP 扫描、Non-Echo ICMP 扫描等。防火墙和网络过滤设备常常导致传统的探测手段变得无效。为了突破这种限制,必须采用一些非常规的手段,利用 ICMP 协议提供网络间传送错误信息的手段,往往可以更有效的达到目的。

端口扫描

确定目标主机可达后,使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。有开放扫描、隐蔽扫描、半开放扫描三种方式。

操作系统识别

根据各个 OS 在 TCP/IP 协议栈实现上的不同特点,采用黑盒测试方法,通过研究其对各种探测的响应形成识别指纹,进而识别目标主机运行的操作系统。根据采集指纹信息的方式,又可以分为主动扫描和被动扫描两种方式。

漏洞扫描

在端口扫描后得知目标主机开启的端口以及端口上的网络服务,将这些相关信息与网络漏洞扫描系统提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在。通过模拟黑客的攻击手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等。若模拟攻击成功,则表明目标主机系统存在安全漏洞。

步骤和关键技术

主机、服务和端口扫描

本次使用的扫描工具为 nmap6.49

对目标机所在地址及地址段进行了 Regular scan、Ping scan、Intense scan 三种扫描。

另外尝试了 Maimon 扫描(下图)。扫描结果见 “数据与分析” 部分。

本部分 3.1 实验中,探测机 IP 为 192.168.235.136,运行 Windows XP 系统。被探测机 IP 为 192.168.235.138,运行 Windows Server 2012 系统。

漏洞扫描

本部分实验使用了 Kali Linux 自带的 metasploit 工具,它是一个开源的安全漏洞检测工具,可以帮助安全和 IT 专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。

本部分使用的扫描机 IP 为 192.168.235.132,运行 Kali Linux;被扫描机 IP 为 192.168.235.136,运行 Windows XP 系统。

  1. 打开 metasploit 主界面,输入 show exploits 查看所有漏洞的列表

    • 按照字母顺序,列表从左到右分别是漏洞名称、披露日期、可利用性、描述,其中漏洞的命名格式是 "平台 / 类型 / 具体应用简称"。由于我的 Kali 版本并不是最新的,所以披露日期可能比较偏早(与此同时,msf 的最新版本已经是 5.0 了)。
  2. 本次实验中,选择 mysql_start_up 漏洞进行复现。

    mysql_start_up 启动项提权

    在数据库中添加一个表格,将 vbsbat 代码写入表中,内有 net user 创建后门用户指令,然后运行以下语句

    select \ from a into outfile "%startup%\\a.vbs";
    导出脚本,并添加到系统启动项 [^1]。
  3. msf 下 mysql_start_up 提权只需要知道一组数据库用户名和密码,但有一定的成功几率,需要多试几次,对英文版系统支持较好。

    • 命令行下输入 use <漏洞全名>,进入漏洞利用模式。show targets 的结果代表了 Windows 上的 MySQL 可能会被利用。
  4. show payloads 可以查看所有载荷列表,载荷(payloads)是一串代码中主要的操作部分,在漏洞利用中充当主要的位置。

    <img src="/2019/11/09/experiments/security/web/webscan/11.png" class="">
    set payload "payload_name"可以设定使用的payload,show options可以查看该payload利用到的所有参数,我们所要做的是将所有required部分填上我们需要的值。
    <div class="group-picture"><div class="group-picture-row"><div class="group-picture-column"><img src="/2019/11/09/experiments/security/web/webscan/12.png" class=""></div><div class="group-picture-column"><img src="/2019/11/09/experiments/security/web/webscan/13.png" class=""></div></div></div>
    设置完成后,使用`exploit`命令开始利用漏洞。
    
    <div class="note success no-icon"><p>从输出上来看,目标机上已经被传送了一个后门文件<code>wKpyl.exe</code>,它需要我们手动清除。<br>
    



    目标机的相应位置上确实被置入了一个这样的后门程序。

    • 由于漏洞披露已经有了一段时间,当我拖到宿主机准备分析时,杀毒软件报毒(这说明漏洞库已经收录了漏洞相关信息),其类型为后门病毒。这个可执行文件的部分属性如下。
      • 由于这是开机启动型后门,所以需要重新启动 server 才会奏效。
    <details class="note info"><summary><p>总结</p>
    

    顾名思义,就是弹个框,告诉用户 “你被攻击了”。算是一个能 “看得见” 的有效漏洞利用。

    和(1)类似,首先 set payload,然后 show options。观察参数,发现 “可视化” 的部分在于 texttitle,我们决定给它加一点特效(笑)。
    <img src="/2019/11/09/experiments/security/web/webscan/20.png" class="" title="exploit!">
    输入<code>exploit</code>开始利用。观察输出,发现它也是向目标输出了一个<code>exe</code>可执行文件,放入了启动项中。
    <img src="/2019/11/09/experiments/security/web/webscan/21.png" class="">
    
    重启Win Server后,系统弹出了这个MessageBox,证明上述漏洞被有效利用且能成功执行payload程序。 <img src="/2019/11/09/experiments/security/web/webscan/22.png" class="">
    

数据和分析

下面以 Wireshark 抓包的角度来分析本次实验的数据交互情况。

目标主机情况如下

基本信息扫描

从下图可以看到,这是一个典型的 TCP SYN 扫描,是半开放扫描。


扫描机不断向目标机不同端口发送 SYN 包,请求一次连接,而在目标机回复 SYN+ACK 时,自己发送一个 RST 包停止连接。SYN+ACK 的回复代表目标机的端口正处于监听状态,可以代表端口的开启情况。

目标机的 80 端口和 8080 端口处于监听状态,是开启的。

Regular Scan 的输出:

1
2
3
4
5
6
7
Nmap scan report for 192.168.235.138
Host is up (0.0022s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
8080/tcp open http-proxy
MAC Address: 00:0C:29:18:BE:BF (VMware)

基本上都是对的。

我用 ping scan 扫描了 192.168.1.0/24 整个网段,可以看到密集的 ICMP 请求,是在做 ping 操作。

短时间内同时向多个 IP 地址发送了 type13 的 ICMP timestamp request 请求,这是一种 Non-Echo 的 ICMP 扫描。

针对每一个地址,它经历了以下过程

  1. 扫描机向目标主机发送了 ICMP Echo Request (type 8) 数据包,等待回复的 ICMP Echo Reply 包 (type 0),这是 ICMP Echo 的扫描技术。
  2. Echo Request 是同时向多个主机做出的并行扫描动作,因此,也用到了 ICMP Sweep 扫描。
  3. 但是,扫描结果并不太准确,192.168.235.138 虽然是在线主机,但是可能是上一次扫描遗留下来的结果。我只扫描了 192.168.1.0 的地址段。
  1. 先进行端口的探测,使用 SYN 扫描。 与可联通的端口建立握手连接,预备后续探测。

  2. 通过 HTTP 协议访问根目录,Server 响应暴露目标机的服务类型。

  3. 通过 OPTIONS 请求,探求目标机的支持服务类型,紧接着目标机向其 DNS 服务器发动了一次向 www.360se.net 的解析请求。

  4. 在整个扫描期间,可以发现目标机不停地在向 133.130.101.150 这个 IP 发送带有 SYN、ECN、CWR 标志的 TCP 包。

  5. 故意请求一个可能并不存在的地址,或构造不合法的请求方式,从返回错误中也可以暴露服务器所开设的服务信息。就算是 404 Not Found,返回头中也可能携带服务信息。

  6. 使用一个已存在的网页进行验证,扫描结束。

  7. 另外,观察每次发送带有 PSH|FIN 标记的请求时,目标机回复的应答包中,确认序列号为攻击者序列数 + 1,可以从这里提取出目标机操作系统为 Windows,这是 ACK 扫描 —— 一种检测目标主机操作系统的方法。

  8. 以下是扫描结果

  1. 首先上扫描结果。可以看到扫描结果基本正确,操作系统也比较准确。
  2. 它比 Intense 扫描多扫出了一个 3306 端口,它是怎么发现的呢?

    在 SYN 扫描时,它就发现了 3306 号端口(3306 号端口给它发送了 SYN+ACK),再一连接,Server 就会回复 Server Greeting,从而发现了 3306 号端口的存在,版本号也随 Server Greeting 的发出而同时泄露。

  1. 预先的扫描是和(3)中一样的 SYN 方法。Maimon 还会进行重试。
  2. 但在端口扫描前,maimon 会先发送 FIN+ACK 请求关闭连接,这样做的目的可能是重置状态,减少干扰。
  3. 扫描期间,还可以看到目标机的 TLS 通信过程。含义推测是要进行 443 号端口相关的验证,需要用到这些协议。

    这里应该是在进行操作系统指纹的探查,依据是带有 PSH 标志的 ACK 包,不过负责这里验证的 IP 不再是探测机的 IP!

做完这些检测后,被扫描机发送RST+ACK关闭连接,接下来做服务检测。验证方法与(3)类似,不再赘述。 <img src="/2019/11/09/experiments/security/web/webscan/56.png" class="">

漏洞扫描及利用

  1. 首先利用已知的一组用户名密码登录 MySQL 服务器。
  2. 向表中插入二进制数据,在传之前还做了一些事情。
  3. 查询服务器的操作系统。
  4. 查询操作系统临时表目录。
  5. select xxx info dumpfile 是最关键的一步。漏洞利用关键点。由于相关防护不到位,服务器接受了这个请求,把二进制数据导出了文件,并添加到了启动项文件夹中。做完这个操作后,攻击机就发送 FIN+ACK 与服务器断开了链接。

    弹框时的数据交互情况类似。

收获

通过使用扫描软件对于某主机进行扫描,再进行抓包分析,直观的看到了主机扫描数据交互的过程,理解了网络扫描的基本原理和不同扫描方法的特点。使用 metasploit 尝试了漏洞的利用,体验了漏洞的表现和侵入性。

补充

  1. 做完 “漏洞扫描” 实验的 metasploit 部分后,我才发现 metasploit 是漏洞利用软件而非漏洞扫描软件。重新上网查找相关资料,发现存在扫描漏洞的 nmap 脚本 nmap-vulners,决定使用这个脚本重新完成本部分实验和分析。

  2. 使用 -script 选项指定 nse 脚本位置。扫描几乎如同普通扫描,也扫出了三个开放端口。

  3. 但是没有看到漏洞相关的信息输出。我换用 kali linux 重新进行扫描,得到了以下结果

  4. 以上结果表明系统确实存在了很多 cve 漏洞,甚至还有 2019 年的新漏洞,随便打开一个网页看看:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0211 (nmap 给的页面链接过不了验证码)

    CVE-2019-0211 是一种特权升级漏洞,在 Apache HTTP Server 2.4 版本 2.4.17 至 2.4.38 中,使用 MPM 事件,工作者或 prefork,在权限较低的子进程或线程(包括进程内脚本解释器执行的脚本)中执行的代码可以执行任意代码通过操纵记分板,父进程(通常是 root)的权限。非 Unix 系统不受影响。

    按说这个漏洞对于 Win Server 来说没影响,如果检测了目标操作系统的话,这个漏洞的重要性可能就会下降了。

  5. 对扫描过程抓包,发现前半部分与扫描端口、服务时基本一致,假如端口开放,目标机会发回 SYN+ACK 包,此时自己再发出 RST 包

  6. 中间服务探测的过程与 intense 扫描基本一致,后期 vulners 检测工具与它自己的服务器进行了交互,可能是为了将特征与自己的数据库比对。