网络扫描
目标
了解网络扫描的原理和应用,使用 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 系统。
-
打开 metasploit 主界面,输入
show exploits
查看所有漏洞的列表- 按照字母顺序,列表从左到右分别是漏洞名称、披露日期、可利用性、描述,其中漏洞的命名格式是 "平台 / 类型 / 具体应用简称"。由于我的 Kali 版本并不是最新的,所以披露日期可能比较偏早(与此同时,msf 的最新版本已经是 5.0 了)。
-
本次实验中,选择
mysql_start_up
漏洞进行复现。mysql_start_up 启动项提权
在数据库中添加一个表格,将
vbs
或bat
代码写入表中,内有net user
创建后门用户指令,然后运行以下语句导出脚本,并添加到系统启动项 [^1]。select \ from a into outfile "%startup%\\a.vbs";
-
msf 下
mysql_start_up
提权只需要知道一组数据库用户名和密码,但有一定的成功几率,需要多试几次,对英文版系统支持较好。- 命令行下输入
use <漏洞全名>
,进入漏洞利用模式。show targets
的结果代表了 Windows 上的 MySQL 可能会被利用。
- 命令行下输入
-
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。观察参数,发现 “可视化” 的部分在于text
和title
,我们决定给它加一点特效(笑)。<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 | Nmap scan report for 192.168.235.138 |
基本上都是对的。
我用 ping scan 扫描了 192.168.1.0/24
整个网段,可以看到密集的 ICMP 请求,是在做 ping 操作。
短时间内同时向多个 IP 地址发送了 type13 的 ICMP timestamp request 请求,这是一种 Non-Echo 的 ICMP 扫描。
针对每一个地址,它经历了以下过程
- 扫描机向目标主机发送了 ICMP Echo Request (type 8) 数据包,等待回复的 ICMP Echo Reply 包 (type 0),这是 ICMP Echo 的扫描技术。
- Echo Request 是同时向多个主机做出的并行扫描动作,因此,也用到了 ICMP Sweep 扫描。
- 但是,扫描结果并不太准确,192.168.235.138 虽然是在线主机,但是可能是上一次扫描遗留下来的结果。我只扫描了 192.168.1.0 的地址段。
-
先进行端口的探测,使用 SYN 扫描。 与可联通的端口建立握手连接,预备后续探测。
-
通过 HTTP 协议访问根目录,Server 响应暴露目标机的服务类型。
-
通过 OPTIONS 请求,探求目标机的支持服务类型,紧接着目标机向其 DNS 服务器发动了一次向 www.360se.net 的解析请求。
-
在整个扫描期间,可以发现目标机不停地在向
133.130.101.150
这个 IP 发送带有 SYN、ECN、CWR 标志的 TCP 包。 -
故意请求一个可能并不存在的地址,或构造不合法的请求方式,从返回错误中也可以暴露服务器所开设的服务信息。就算是 404 Not Found,返回头中也可能携带服务信息。
-
使用一个已存在的网页进行验证,扫描结束。
-
另外,观察每次发送带有
PSH|FIN
标记的请求时,目标机回复的应答包中,确认序列号为攻击者序列数 + 1,可以从这里提取出目标机操作系统为 Windows,这是 ACK 扫描 —— 一种检测目标主机操作系统的方法。 -
以下是扫描结果
- 首先上扫描结果。可以看到扫描结果基本正确,操作系统也比较准确。
- 它比 Intense 扫描多扫出了一个 3306 端口,它是怎么发现的呢?
在 SYN 扫描时,它就发现了 3306 号端口(3306 号端口给它发送了 SYN+ACK),再一连接,Server 就会回复 Server Greeting,从而发现了 3306 号端口的存在,版本号也随 Server Greeting 的发出而同时泄露。
- 预先的扫描是和(3)中一样的 SYN 方法。Maimon 还会进行重试。
- 但在端口扫描前,maimon 会先发送 FIN+ACK 请求关闭连接,这样做的目的可能是重置状态,减少干扰。
- 扫描期间,还可以看到目标机的 TLS 通信过程。含义推测是要进行 443 号端口相关的验证,需要用到这些协议。
这里应该是在进行操作系统指纹的探查,依据是带有 PSH 标志的 ACK 包,不过负责这里验证的 IP 不再是探测机的 IP!
做完这些检测后,被扫描机发送RST+ACK关闭连接,接下来做服务检测。验证方法与(3)类似,不再赘述。 <img src="/2019/11/09/experiments/security/web/webscan/56.png" class="">
漏洞扫描及利用
- 首先利用已知的一组用户名密码登录 MySQL 服务器。
- 向表中插入二进制数据,在传之前还做了一些事情。
- 查询服务器的操作系统。
- 查询操作系统临时表目录。
select xxx info dumpfile
是最关键的一步。漏洞利用关键点。由于相关防护不到位,服务器接受了这个请求,把二进制数据导出了文件,并添加到了启动项文件夹中。做完这个操作后,攻击机就发送 FIN+ACK 与服务器断开了链接。
收获
通过使用扫描软件对于某主机进行扫描,再进行抓包分析,直观的看到了主机扫描数据交互的过程,理解了网络扫描的基本原理和不同扫描方法的特点。使用 metasploit 尝试了漏洞的利用,体验了漏洞的表现和侵入性。
补充
-
做完 “漏洞扫描” 实验的 metasploit 部分后,我才发现 metasploit 是漏洞利用软件而非漏洞扫描软件。重新上网查找相关资料,发现存在扫描漏洞的 nmap 脚本 nmap-vulners,决定使用这个脚本重新完成本部分实验和分析。
-
使用
-script
选项指定nse
脚本位置。扫描几乎如同普通扫描,也扫出了三个开放端口。 -
但是没有看到漏洞相关的信息输出。我换用 kali linux 重新进行扫描,得到了以下结果
-
以上结果表明系统确实存在了很多 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 来说没影响,如果检测了目标操作系统的话,这个漏洞的重要性可能就会下降了。
-
对扫描过程抓包,发现前半部分与扫描端口、服务时基本一致,假如端口开放,目标机会发回 SYN+ACK 包,此时自己再发出 RST 包
-
中间服务探测的过程与 intense 扫描基本一致,后期 vulners 检测工具与它自己的服务器进行了交互,可能是为了将特征与自己的数据库比对。