您当前的位置: 首页 >  windows

合天网安实验室

暂无认证

  • 0浏览

    0关注

    748博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

合天网安实验室 发布时间:2022-10-13 17:30:29 ,浏览量:0

前言

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

本文包含以下内容:

  1. 1. Nmap抓包分析

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

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

防火墙

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

1.禁止ICMP回显

b74cbd2ad9df46f896b4c798f2ee5d71.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抓包分析 拓扑图 9235baa88a6b9d68b61151f8b9d60c96.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扫描。

52be00091bf8cd977234e642a70d88f6.png
image

8216759514b26b152db4c47af014a23f.png

image

7e2e25836524ffc798ddcc8676564039.png

image

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

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

26171b5e7b52472dadf834ac934d6389.png

image

6fa5598d0359fd02206aa26a6019d551.png

image

c15b1387112074d5cd80e86b9fa8f134.png

image

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

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

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

8f31d6231606dc1ae43f4e3226119946.png

image

bda7b83c3c3372608d5d80f2866782ee.png

image

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

7fe8f67f73634fd1dd6b24a89af7c17e.png

image

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

4f5100517eeb4979c22ec40c038ed3ba.png

image

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

49ab9a688eb73f0041bf800d8823d84b.png

image

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

82b6ce79137f825a3142e98a08026693.png

image

再看下抓包

e64562a2031632f0eba5e741adddf069.png

image

2ae38c01435c329fcb61cb249e092ab3.png

image

发现这里没发RST包

eb0e9668fea4ba91cac682f6b300d477.png

image

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

40200f1940c2141499e41e516684fc59.png

image

接下来将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

fd1f04d14a5eca0748b0a3c402e54733.png

image

5c9d9712aa930b948d7733409dcab4b1.png

image

b9e593db24a162546732d91028ee9d8f.png

image

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

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

a2d96ae1cde4e4df9c4a07b09db0411f.png

image

0153a931669b054f7e1527e28679dbb3.png

image

-PU(UDP)

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

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

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

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

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

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

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

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

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

5a3514de989df779a55c961b9f2bd950.png

image

01d66fcc669df7e3661e91487d907dab.png

image

局域网没什么问题,扫外网的话同样有前文说的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

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

bba9f2ed34ead77afd818ba0e48f1ecc.png

image

3baa305387cd9c770077c696fb8dde8d.png

image

-PR(ARP)

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

nmap -sn -PR 172.16.1.128 -vvv -n

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

42301ebc91b51539fef6e355fbec470c.png

image

384ae118f4ab3ec080af06b3656f9019.png

image

-PE/PP/PM(ICMP)

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

第一个就是常说的Ping。

a722cc8f21a752cbdb1cf938e17d20ac.png

image

第二个是时间戳请求

95546af8b4f02152f5fbd88b2767f87e.png

image

第三个是地址掩码请求

14e64d83efef9053a380cf011cc6b4af.png

image

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

021cfacf8bde465994f94030209a7b4d.png

image

379119dd49b95c116763f6e3d637b8cd.png

image 端口扫描(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

aac4ecfbeafd5dfe0fa0cda64c290441.png

image

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

3749e87455447a584521ee66f4a54e7f.png

image

-sT(TCP connect)

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

端口开启

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

51e8237bb47f98d74a924b075e1583f7.png

image

4d816a40e91280d17d1c58735803330c.png

image

d4d5ef3fbbbfa6894671793669de374c.png

image

端口关闭

4153ce2ecfb59e7c57464b44784a27a6.png

image

74272493449b308734db48d547a50004.png

image

5485734b77bcbaf236539fdf2750a79d.png

image

可以发现,-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无法判断该端口是开启还是被防御规则过滤。

4d6fd0721bbf79088c8c2f16ac5d16d8.png

image

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

0433c6e7d5209ae38e3c42ee1d5a0da2.png

image 绕防火墙测试 拓扑图

1428683499e548b95b4daeff70ac2d6e.png

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

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

ac18d859daa94a619a174cf9b00497df.pnga703ec69c0031ab13be86fa2da520a01.png

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

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

188b909ab2f77c4ac96c3fadb1bc467d.png446cf80e9405f7bb82c5644eed1da00d.png

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

2ebb7d334d095005da687aec00ab12f3.pngae40ea1a6f5dd822d1ff42682ca177bf.png

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

0673fdd88c4c32b59a59ff0c89b6a4bd.pngc8f25a13a91cf177afd48a676872afb3.png

nmap -sn -PR 172.16.1.128 -vvv -n

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

b2d78424f44bf701c705ac2405d7c7c2.pngec3301325d4d7de7296d08b3ccfc300c.png

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

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

WINRM

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

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

099cde476e665b9b718daa9dc0abd78a.png

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

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

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

其中有一行代码:

test-wsman -computername "172.16.1.128"

很快就有回显:

011a649a994a07b3b5ef5e158ea09eac.png

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

fc692b3a427e2469239f77e63ffbbade.png

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

结语

总结一下:

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

  2. 2. WINRMtest-wsman -computername "172.16.1.128"

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

原创稿件征集

有偿征集原创技术文章,欢迎私信投递!

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关。

关注
打赏
1665306545
查看更多评论
立即登录/注册

微信扫码登录

0.0491s