freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Nmap抓包分析与绕过Windows防火墙
2022-10-13 15:21:14
所属地 湖南省

前言

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

本文包含以下内容:

  1. Nmap抓包分析

  2. 内网下绕过Windows防火墙扫描存活主机

这里主要是针对Nmap进行讨论,实战中当然哪个快用哪个。不过万变不离其宗,哪怕稍微了解下其原理都受益无穷。

防火墙

这里的防火墙值得是Windows server自带的防火墙,主要绕过其两个防御规则:

1.禁止ICMP回显

image-20221011140259263.png

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抓包分析

拓扑图

image-20221011184244502.png

关闭防火墙便于查看数据包

主机发现(Ping)

-PS(TCP SYN)

TCP SYN Ping:发送单个TCP SYN包到指定端口检测主机是否存活,默认80端口。该扫描就是经典的半开放扫描。

请求局域网主机135端口(开启)

nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping
#-n 禁用dns解析

注意nmap扫局域网存活主机都会预先进行arp扫描,在这里禁用了端口扫描,意味着nmap只会进行存活扫描,当nmap进行arp扫描后发现主机存活就不会进行后续操作,wireshark也就抓不到包,所以使用--disable-arp-ping禁用arp扫描。

image-20221010170432-wjoz7le.png

image-20221010171352-08vy8ig.png

image-20221010201315-qjbkh98.png

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注“freebuf”获取!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

请求局域网主机666端口(关闭)

nmap -sn -PS666 172.16.1.128 -vvv -n --disable-arp-ping

image-20221010191559-lk4qj79.png

image-20221010191548-is85l8r.png

image-20221010201228-iiggo07.png

请求远程主机135端口(开启):

还是这里会发现,和扫局域网比起来多了很多包,为什么和扫局域网情况不一样?

还是fofa随便找个开启135端口的IP:

image-20221010211128-7hgz3hs.png

image-20221010211148-elaogvh.png

这里会发现,和扫局域网比起来多了很多包。

image-20221010211738-18wsn9z.png

请求远程主机6666端口(关闭):

image-20221010211954-01fbcb8.png

奇怪的是,明明远程主机返回了RST/ACK包,但nmap没有接收到。

image-20221010211931-6y2jfte.png

为什么会有这样的差别?翻了翻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再进行测试:

image-20221010220008-noefwtx.png

再看下抓包

image-20221010220058-27fg43m.png

image-20221010234108-r0d2w0n.png

发现这里没发RST包

image-20221010234122-v7cc7mg.png

关掉防火墙再试,还一下发俩RST……

image-20221010234619-kqzdun1.png

接下来将vmware网络模式换为桥接,发现正常了。说明是NAT网络的问题。

-PA(TCP ACK)

TCP ACK Ping:发送单个TCP ACK包到指定端口检测主机是否存活,默认80端口

请求局域网主机135端口(开启)

一般ACK包是双方建立起连接发送的,但实际上不存在连接,无论端口是否开启,远程主机都会用RST包来回应,以此来判断主机存活。当然很多防御策略都会丢弃无效包防止被检测。

nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping

image-20221010201749-2x7ta2e.png

image-20221010201804-bdsuzs5.png

image-20221010201548-trru4er.png

请求局域网主机666端口(关闭)

nmap -sn -PA666 172.16.1.128 -vvv -n --disable-arp-ping

image-20221010201855-gf1pl5n.png

image-20221010201846-wopvybu.png

-PU(UDP)

UDP Ping:发送UDP包到指定端口检测主机是否存活,默认40125端口。特定端口会发送特定的UDP包以便于获取更好的响应。

按照最新官方文档解释,该包发送大概有以下几种情况:

  1. 端口关闭->返回ICMP端口不可达包->判断主机存活。

  2. 返回其他ICMP错误,如主机/网络不可达或TTL超标等->判断停机。

  3. 端口开启且该服务不响应—>nmap未接收到返回包->判断停机。

  4. 端口关闭且协议不匹配->返回ICMP端口不可达包->判断主机存活。

这就是为什么默认要用40125这么冷门的端口,避免有服务使用该端口。

nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping

返回ICMP端口不可达,仍旧判断出主机存活。

image-20221010210024-xxhoern.png

image-20221010205948-ybtcrif.png

局域网没什么问题,扫外网的话同样有前文说的Vmware Nat网络问题,注意一下就好。

-PY(SCTP INIT)

SCTP INIT Ping:发送包含最小INIT块的SCTP包到指定端口检测主机是否存活,默认80端口。SCTP可看做TCP协议的改版。

nmap -sn -PY135 172.16.1.128 -vvv -n --disable-arp-ping

返回协议不可达,以此判断出主机存活。

image-20221010203147-l6u94dp.png

image-20221010203116-dnn4ap2.png

-PR(ARP)

ARP Ping:ARP扫描,Nmap扫内网最常用的方式。

nmap -sn -PR 172.16.1.128 -vvv -n

接收到arp返回包,判断主机存活。

image-20221010204732-3gbevtk.png

image-20221010204653-6tahbor.png

-PE/PP/PM(ICMP)

ICMP Ping:三种ICMP标准请求,如果防火墙关掉ICMP回显则收不到reply。

第一个就是常说的Ping。

image-20221011002639-srwv0yv.png

第二个是时间戳请求

image-20221011002609-fwmiv57.png

第三个是地址掩码请求

image-20221011002729-69s1a50.png

ICMP标准还有个信息请求,但目前未被广泛支持,所以Nmap没有做相关功能。

-PO(IP Protocol)

IP Protocol Ping:默认发送ICMP(协议1)、IGMP(协议2)和IP-in-IP(协议4),更改协议需要改nmap.h文件中的DEFAULT_PROTO_PROBE_PORT_SPEC。目前意义不大。

nmap -sn -PO -vv 172.16.1.128 -n --disable-arp-ping

image-20221011001846-t639b5l.png

image-20221011001909-hj8woco.png

端口扫描(Scan)

其实端口扫描(Scan)很多参数和主机发现(Ping)的前期抓包情况是一样的。Ping相当于点到为止,根据回显发现主机存活即可,而Scan还需要进一步分析,判断端口是否开启、判断什么服务等。

由于大部分Scan参数与Ping参数请求包一致,而部分Scan参数在本文中并未体现,所以暂且贴出三个参数抓包情况。

-sS(TCP SYN)

TCP SYN scan:经典的半开放扫描。

nmap -Pn -sS -p 135 -vvv 172.16.1.128 -n

image-20221011003408-md8z99v.png

可见发送的请求包和-PS是一样的,至于Nmap如何判断如何分析,这里就不关心了。

image-20221011003358-16vkgpl.png

-sT(TCP connect)

TCP connect scan:TCP连接扫描,三次握手确认目标后直接发送RST结束当前连接,跳过四次挥手阶段。

端口开启

nmap -Pn -sT -p 135 172.16.1.128 -vvv -n --disable-arp-ping
# -Pn 不进行主机存活探测

image-20221010202201-yocp3ht.png

image-20221010202222-otm2qg8.png

image-20221011143337-r1gq2gi.png

端口关闭

image-20221010202328-u2bfu22.png

image-20221010202315-f5phxzm.png

image-20221010205213-h48p307.png

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

-sU(UDP)

UDP scans:发送UDP包进行扫描

nmap -Pn -sU -p 135 172.16.1.128 -vvv -n --disable-arp-ping

这里显示open|filtered,为什么呢?

因为UDP包请求到开放的端口,经常没有回显。而且这里使用-Pn跳过了主机存活探测,默认主机存活,又因为收不到回显,所以nmap无法判断该端口是开启还是被防御规则过滤。

image-20221011150443-6lcfqrx.png

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

image-20221011150502-xwqs4qh.png

绕防火墙测试

拓扑图

image-20221011141250378.png

测试

nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping

未收到[SYN, ACK]返回包,判断主机离线。

image-20221011151748991.png

image-20221011151716644.png

nmap -sn -PA135 172.16.1.128 -vvv -n --disable-arp-ping

未收到[RST, ACK]返回包,判断主机离线。

image-20221011152459432.png

image-20221011152450019.png

nmap -sn -PU135 172.16.1.128 -vvv -n --disable-arp-ping

image-20221011152752776.png

image-20221011152740281.png

nmap -sn -PY135 172.16.1.128 -vvv -n --disable-arp-ping

image-20221011152845662.png

image-20221011152823315.png

nmap -sn -PR 172.16.1.128 -vvv -n

成功收到ARP回显,判断主机存活:

image-20221011152959126.png

image-20221011153027260.png

这样一圈测试下来,发现只有ARP扫描可以。原因也很简单,ARP扫描不会走靶机防火墙,而是以广播的形式进行扫描;而其他参数不是被禁ICMP回显规则拦截就是被隐身模式过滤。

后面又尝试了常用的nbt扫描、smb扫描、以及Nmap其他参数,仍然绕不过防火墙。

WINRM

难道就止步于此了吗?突然想到,之前用Ladon插件扫的时候,没见什么防火墙拦截。

于是拿Ladon测试了下,选多协议探测存活主机,一扫,果真有:

image-20221011181931266.png

WIMRM,很熟悉,这也能拿来扫内网?

简单概述下:WIMRM是windows自带的服务,开启服务后防火墙默认放心5985(HTTP)/5986(HTTPS)端口,平常拿来横向移动。

由于没搜到Ladon源码怎么实现该扫描,谷歌找了找WINRM的文章:WinRM Penetration Testing

其中有一行代码:

test-wsman -computername "172.16.1.128"

很快就有回显:

image-20221011181234370.png

随便输了个其他IP,报错:

image-20221011181222487.png

显然,使用该服务也可以绕过Windows防火墙进行存活主机扫描。

结语

总结一下:

  1. arp扫描

    可以使用工具,但到了扫内网的情况,都是拿shell了,所以直接cmd命令:arp/a即可。

  2. WINRM

    test-wsman -computername "172.16.1.128"

至于如何绕防火墙进行端口扫描,留到以后再说吧。

# nmap # 防火墙绕过 # 抓包
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录