Nmap抓包分析与绕过Windows防火墙

打印 上一主题 下一主题

主题 473|帖子 473|积分 1419

前言

在打靶场的过程中使用Nmap时发现点小问题,借此机会详细分析下情况,于是有了这篇文章。
本文包含以下内容:

  • Nmap抓包分析
  • 内网下绕过Windows防火墙扫描存活主机
这里主要是针对Nmap进行讨论,实战中当然哪个快用哪个。不过万变不离其宗,哪怕稍微了解下其原理都受益无穷。
防火墙

这里的防火墙值得是Windows server自带的防火墙,主要绕过其两个防御规则:
1.禁止ICMP回显

2.隐藏模式
具体见Stealth Mode in Windows Firewall with Advanced Security,大意为:不会使用ICMP不可达响应UDP查询,不使用RST响应TCP查询。默认开启。
https://shamsher-khan-404.medium.com/understanding-nmap-scan-with-wireshark-5144d68059f7
-sn:禁用端口扫描
-P* 用于选择不同的PING方法,用于存活扫描
Nmap抓包分析

拓扑图


关闭防火墙便于查看数据包
主机发现(Ping)

-PS(TCP SYN)

TCP SYN Ping:发送单个TCP SYN包到指定端口检测主机是否存活,默认80端口。该扫描就是经典的半开放扫描。
请求局域网主机135端口(开启)
  1. nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping<br>#-n 禁用dns解析
复制代码
注意nmap扫局域网存活主机都会预先进行arp扫描,在这里禁用了端口扫描,意味着nmap只会进行存活扫描,当nmap进行arp扫描后发现主机存活就不会进行后续操作,wireshark也就抓不到包,所以使用--disable-arp-ping禁用arp扫描。

[img=720,73.10507674144037]https://www.hetianlab.com/headImg.action?news=b1096ca7-3b61-4bac-a94b-521e5b5d714b.png[/img]

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
请求局域网主机666端口(关闭)
  1. nmap -sn -PS666 172.16.1.128 -vvv -n --disable-arp-ping
复制代码

[img=720,58.530066815144764]https://www.hetianlab.com/headImg.action?news=ea99faed-85b8-41c1-987f-5e706a69237a.png[/img]

请求远程主机135端口(开启):
还是这里会发现,和扫局域网比起来多了很多包,为什么和扫局域网情况不一样?
还是fofa随便找个开启135端口的IP:
[img=720,32.60377358490566]https://www.hetianlab.com/headImg.action?news=fb95f7c8-a69c-4ca5-8627-bedefb28f557.png[/img]

这里会发现,和扫局域网比起来多了很多包。
[img=720,153.71779141104295]https://www.hetianlab.com/headImg.action?news=b3dd1495-e18c-4a80-934e-c2d216cc8610.png[/img]
请求远程主机6666端口(关闭):
[img=720,215.7045143638851]https://www.hetianlab.com/headImg.action?news=331e59d2-f8b7-418d-8367-6813c02be879.png[/img]
奇怪的是,明明远程主机返回了RST/ACK包,但nmap没有接收到。
[img=720,191.83673469387756]https://www.hetianlab.com/headImg.action?news=8e4bd89f-c9d6-4def-b8e8-ea783dc8aa42.png[/img]
为什么会有这样的差别?翻了翻nmap官方文档,其中有这样一句话:
The RST packet is sent by the kernel of the machine running Nmap in response to the unexpected SYN/ACK, not by Nmap itself
RST报文是运行Nmap的机器的内核为响应意外的SYN/ACK而发送的,而不是Nmap本身。
突然想到,我的kali是放在vmware,以nat形式接入网络,这样偶尔会出现点小问题。
于是我在windows上装了个nmap再进行测试:

再看下抓包
[img=720,78.13186813186813]https://www.hetianlab.com/headImg.action?news=dd32a9bf-7719-4040-ae49-40cea97ed232.png[/img]

发现这里没发RST包
[img=720,65.9206510681587]https://www.hetianlab.com/headImg.action?news=3f614155-f8f6-40cc-b23a-d9db13fe4b86.png[/img]
关掉防火墙再试,还一下发俩RST……
[img=720,102.08281053952321]https://www.hetianlab.com/headImg.action?news=adb28c37-5100-4d5a-8faa-aa792c549b60.png[/img]
接下来将vmware网络模式换为桥接,发现正常了。说明是NAT网络的问题。
-PA(TCP ACK)

TCP ACK Ping:发送单个TCP ACK包到指定端口检测主机是否存活,默认80端口
请求局域网主机135端口(开启)
一般ACK包是双方建立起连接发送的,但实际上不存在连接,无论端口是否开启,远程主机都会用RST包来回应,以此来判断主机存活。当然很多防御策略都会丢弃无效包防止被检测。
  1. nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码

[img=720,62.17036172695449]https://www.hetianlab.com/headImg.action?news=29b39d6e-94ed-44ca-aeb5-a5b2a02d6ff5.png[/img]

请求局域网主机666端口(关闭)
  1. nmap -sn -PA666 172.16.1.128 -vvv -n --disable-arp-ping
复制代码

[img=720,64.39024390243902]https://www.hetianlab.com/headImg.action?news=ac27df58-cb5d-4761-a663-19c2d2201545.png[/img]
-PU(UDP)

UDP Ping:发送UDP包到指定端口检测主机是否存活,默认40125端口。特定端口会发送特定的UDP包以便于获取更好的响应。
按照最新官方文档解释,该包发送大概有以下几种情况:

  • 端口关闭->返回ICMP端口不可达包->判断主机存活。
  • 返回其他ICMP错误,如主机/网络不可达或TTL超标等->判断停机。
  • 端口开启且该服务不响应—>nmap未接收到返回包->判断停机。
  • 端口关闭且协议不匹配->返回ICMP端口不可达包->判断主机存活。
这就是为什么默认要用40125这么冷门的端口,避免有服务使用该端口。
  1. nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
返回ICMP端口不可达,仍旧判断出主机存活。

[img=720,61.86157517899761]https://www.hetianlab.com/headImg.action?news=d0c05be9-6e4f-4e8c-b197-d93768f73d4d.png[/img]
局域网没什么问题,扫外网的话同样有前文说的Vmware Nat网络问题,注意一下就好。
-PY(SCTP INIT)

SCTP INIT Ping:发送包含最小INIT块的SCTP包到指定端口检测主机是否存活,默认80端口。SCTP可看做TCP协议的改版。
  1. nmap -sn -PY135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
返回协议不可达,以此判断出主机存活。

[img=720,64.77508650519032]https://www.hetianlab.com/headImg.action?news=d5b0e75e-ae90-4d58-be32-60bceae7c277.png[/img]
-PR(ARP)

ARP Ping:ARP扫描,Nmap扫内网最常用的方式。
  1. nmap -sn -PR 172.16.1.128 -vvv -n
复制代码
接收到arp返回包,判断主机存活。

[img=720,57.706535141800245]https://www.hetianlab.com/headImg.action?news=a7395fa2-9c0b-4ecd-904b-038e790596c7.png[/img]
-PE/PP/PM(ICMP)

ICMP Ping:三种ICMP标准请求,如果防火墙关掉ICMP回显则收不到reply。
第一个就是常说的Ping。
[img=720,50.24925224327019]https://www.hetianlab.com/headImg.action?news=ff99abd0-66db-4cdd-a4d6-5aa47faafd5c.png[/img]
第二个是时间戳请求
[img=720,54.385569334836525]https://www.hetianlab.com/headImg.action?news=4afeb2c2-c26e-40b6-ab01-24cf6e6c680b.png[/img]
第三个是地址掩码请求
[img=720,63.60135900339751]https://www.hetianlab.com/headImg.action?news=dc1e702b-bf32-40a7-bcd6-797bfe71080d.png[/img]
ICMP标准还有个信息请求,但目前未被广泛支持,所以Nmap没有做相关功能。
-PO(IP Protocol)

IP Protocol Ping:默认发送ICMP(协议1)、IGMP(协议2)和IP-in-IP(协议4),更改协议需要改nmap.h文件中的DEFAULT_PROTO_PROBE_PORT_SPEC。目前意义不大。
  1. nmap -sn -PO -vv 172.16.1.128 -n --disable-arp-ping
复制代码

[img=720,79.27927927927928]https://www.hetianlab.com/headImg.action?news=d72a62f4-632e-41e6-830f-b7b11e9ee67f.png[/img]
端口扫描(Scan)

其实端口扫描(Scan)很多参数和主机发现(Ping)的前期抓包情况是一样的。Ping相当于点到为止,根据回显发现主机存活即可,而Scan还需要进一步分析,判断端口是否开启、判断什么服务等。
由于大部分Scan参数与Ping参数请求包一致,而部分Scan参数在本文中并未体现,所以暂且贴出三个参数抓包情况。
-sS(TCP SYN)

TCP SYN scan:经典的半开放扫描。
  1. nmap -Pn -sS -p 135 -vvv 172.16.1.128 -n
复制代码

可见发送的请求包和-PS是一样的,至于Nmap如何判断如何分析,这里就不关心了。
[img=720,84.3010752688172]https://www.hetianlab.com/headImg.action?news=66911bc1-3e71-4693-a623-755c1699708f.png[/img]
-sT(TCP connect)

TCP connect scan:TCP连接扫描,三次握手确认目标后直接发送RST结束当前连接,跳过四次挥手阶段。
端口开启
  1. nmap -Pn -sT -p 135 172.16.1.128 -vvv -n --disable-arp-ping<br># -Pn 不进行主机存活探测
复制代码



端口关闭



可以发现,-sT和-PS两个扫描的抓包情况十分接近,只有收到SYN/ACK返回包后应答的不同,这也是-PS被称为半开放扫描的原理。
-sU(UDP)

UDP scans:发送UDP包进行扫描
  1. nmap -Pn -sU -p 135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
这里显示open|filtered,为什么呢?
因为UDP包请求到开放的端口,经常没有回显。而且这里使用-Pn跳过了主机存活探测,默认主机存活,又因为收不到回显,所以nmap无法判断该端口是开启还是被防御规则过滤。

抓包情况和-PU基本一致:

绕防火墙测试

拓扑图


测试
  1. nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
未收到[SYN, ACK]返回包,判断主机离线。
[img=720,209.25619834710744]https://www.hetianlab.com/headImg.action?news=a6007c00-eeda-4fb0-98a1-883d36940b29.png[/img]
[img=720,95.80645161290323]https://www.hetianlab.com/headImg.action?news=7aed7f94-0e28-410c-aeca-e2bc7284e019.png[/img]
  1. nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
未收到[RST, ACK]返回包,判断主机离线。
[img=720,210.53793103448277]https://www.hetianlab.com/headImg.action?news=bc0ac684-bd35-4c83-93e8-38fc6093492c.png[/img]
  1. nmap -sn -PU135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
[img=720,210.2479338842975]https://www.hetianlab.com/headImg.action?news=200ae064-11a6-4f87-945f-caaf30ba4764.png[/img]
  1. nmap -sn -PY135 172.16.1.128 -vvv -n --disable-arp-ping
复制代码
[img=720,217.4896551724138]https://www.hetianlab.com/headImg.action?news=f359fb3a-7e13-41d3-9af1-40bca7ebb60e.png[/img]
  1. nmap -sn -PR 172.16.1.128 -vvv -n
复制代码
成功收到ARP回显,判断主机存活:


这样一圈测试下来,发现只有ARP扫描可以。原因也很简单,ARP扫描不会走靶机防火墙,而是以广播的形式进行扫描;而其他参数不是被禁ICMP回显规则拦截就是被隐身模式过滤。
后面又尝试了常用的nbt扫描、smb扫描、以及Nmap其他参数,仍然绕不过防火墙。
WINRM

难道就止步于此了吗?突然想到,之前用Ladon插件扫的时候,没见什么防火墙拦截。
于是拿Ladon测试了下,选多协议探测存活主机,一扫,果真有:

WIMRM,很熟悉,这也能拿来扫内网?
简单概述下:WIMRM是windows自带的服务,开启服务后防火墙默认放心5985(HTTP)/5986(HTTPS)端口,平常拿来横向移动。
由于没搜到Ladon源码怎么实现该扫描,谷歌找了找WINRM的文章:WinRM Penetration Testing
其中有一行代码:
  1. test-wsman -computername "172.16.1.128"
复制代码
很快就有回显:

随便输了个其他IP,报错:
[img=720,62.83018867924528]https://www.hetianlab.com/headImg.action?news=d0c3aa74-c532-4983-8738-61a8e34a2dc9.png[/img]
显然,使用该服务也可以绕过Windows防火墙进行存活主机扫描。
结语

总结一下:

  • arp扫描
    可以使用工具,但到了扫内网的情况,都是拿shell了,所以直接cmd命令:arp/a即可。
  • WINRM
    1. test-wsman -computername "172.16.1.128"
    复制代码
至于如何绕防火墙进行端口扫描,留到以后再说吧。
 更多靶场实验练习、网安学习资料,请点击这里>>
 
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表