安全播报

防御吧作为15年知名老牌域名服务商,CNNIC和CANN双认证域名注册商,已经
持续为500多万个域名提供服务,包括智能DNS/自由转移/隐私保护等服务!
Nmap抓包分析与绕过Windows防火墙扫内网存活主机
2022-10-22 20:49:18 【

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

    本文包含以下内容:

  1.     
  2.         

                1. Nmap抓包分析         

        
    
  •         

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

        

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

    防火墙

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

    1.禁止ICMP回显

    

    2.隐藏模式

    具体见Stealth Mode in Windows Firewall with Advanced Security,大意为:不会使用ICMP不可达响应UDP查询,不使用RST响应TCP查询。默认开启。

    http://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端口(开启)

    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     
    
    
    
        image     
    
    
    
        image     

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

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

    
    
    
        image     
    
    
    
        image     
    
    
    
        image     

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

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

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

    
    
    
        image     
    
    
    
        image     

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

    
    
    
        image     

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

    
    
    
        image     

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

    
    
    
        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再进行测试:

    
    
    
        image     

    再看下抓包

    
    
    
        image     
    
    
    
        image     

    发现这里没发RST包

    
    
    
        image     

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

    
    
    
        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

    
    
    
        image     
    
    
    
        image     
    
    
    
        image     

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

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

    
    
    
        image     
    
    
    
        image     

    -PU(UDP)

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

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

    
  1.         
  2.             

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

            
        
  •             

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

            
        
  •             

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

            
        
  •             

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

            
    

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

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

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

    
    
    
        image     
    
    
    
        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

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

    
    
    
        image     
    
    
    
        image     

    -PR(ARP)

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

    nmap -sn -PR 172.16.1.128 -vvv -n

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

    
    
    
        image     
    
    
    
        image     

    -PE/PP/PM(ICMP)

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

    第一个就是常说的Ping。

    
    
    
        image     

    第二个是时间戳请求

    
    
    
        image     

    第三个是地址掩码请求

    
    
    
        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

    
    
    
        image     
    
    
    
        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

    
    
    
        image     

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

    
    
    
        image     

    -sT(TCP connect)

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

    端口开启

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

    端口关闭

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

    
    
    
        image     

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

    
    
    
        image     

    绕防火墙测试

    拓扑图

    

    测试

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

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

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

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

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

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

    
    
    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(http)端口,平常拿来横向移动。

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

    其中有一行代码:

    test-wsman -computername "172.16.1.128"

    很快就有回显:

    

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

    

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

    

】【打印关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇服务器安全完善事项 下一篇高端电企这样避开安全“拦路虎”..

立足首都,辐射全球,防御吧专注云防御及云计算服务15年!

联系我们

服务热线:010-56157787 ,010-56159998
企业QQ:4000043998
技术支持:010-56159998
E-Mail:800@fangyuba.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解决防御与加速) 版权所有 增值许可:京B2-20140042号
售前咨询
公司总机:4000043998 01056155355
24小时电话:010-56159998
投诉电话:18910191973
值班售后/技术支持
售后服务/财务
备案专员
紧急电话:18610088800