• 03、主动信息收集


    第四章 主动信息收集

    本篇文章所讲内容:

    4.1 主动信息收集的原理

    4.2 基于 ping 命令的探测

    4.3 基于 Nmap 的扫描方式

    4.4 实战 1-使用 scapy 定制数据包进行高级扫描

    4.5 实战 2-僵尸扫描

    4.1 主动信息收集的原理
    4.1.1 主动信息收集的特点

    1.直接与目标系统交互通信

    凡是我们使用工具,去探测目标的,都属于主动方式,主动比较危险,容易被封IP,被动比较安全一些,一般来讲,主动和被动需要结合在一起使用

    2.无法避免留下访问的痕迹,万一留下来了,你是需要负责任的

    3.使用受控的第三方电脑进行探测,使用代理或已经被控制的机器,做好被封杀的准备

    目标系统,根据系统的日志检控记录,如果想溯源找到你,也是可以找到你的,只是难易程度,不要保有侥幸的心理,我们在渗透测试过程,可以使用代理

    4.扫描发送不同的探测,根据返回结果判断目标状态

    我们可以通过wireshark抓包,看扫描器,发送了那些数据包,得到了那些响应,去分析它的原理

    4.1.2发现目标主机的过程

    目标主机,从渗透测试的角度来讲,它首先是存活的,如果它关机了,那我们就访问不到了,所以它是开机状态的,能访问到的,目标可达的

    1、识别存活主机,发现潜在的被攻击目标

    你拿到一个IP,你ping都ping不通,你拿任何的扫描器,都没有返回结果,我们就无法去渗透

    拿到主域名,我们要去做信息收集,收集它的子域名,就是二级、三级,多收集几层,这些收集完之后

    2、根据这些主域和子域,输出他们的IP地址列表,或者IP地址段,有些主域和子域,可能在旁站,就是同一个IP,也可能在一个C段,有的把主站和子站,放在一台服务器上,一个IP。或者c段来一个,在一个局域网内,一个网段内的服务器

    比如,我用fofa拿到服务器的IP地址,通过nmap、fofa或者其它工具,拿到它的旁站、C段。如果主站攻击不进去,我们可以从子站、旁站下手,一般主站防守都比较严密,子站可能稍微弱一些,如果在一个C段或者子站,拿到服务器的权限,横向移动,拿到主站的权限,内网渗透。网络安全涉及到内网

    3、拿到IP地址之后,使用二、三、四层进行探测发现,进一步信息收集

    4.2 基于 ping 命令的探测
    4.2.1 PING

    死亡之ping,能把一台服务器,ping死,相当于,发送大量数据包

    PING 命令是我们常用的判断主机之间网络是否畅通,同样也是能判断我们的目标主机是否存活

    ping不通,不一定代表不存活,也有可能禁ping

    Traceroute 命令可以对路由进行跟踪

    traceroute youku.com
    
    • 1

    在这里插入图片描述

    每经过一个网络设备,就会返回一个信息,有的显示**,就是不让你看,防火墙过滤了每一个人所处的网络位置不一样,它所经过的路由也是不一样的

    然而 PING 命令也延伸出了很多其他的命令,如 ARPING、FPING、HPING 等

    4.2.2 ARPING

    1、ARP 协议概述:ARP 协议是“Address Resolution Protocol”(地址解析协议)的缩写。计算机通过 ARP 协议将 IP 地址转换成 MAC 地址。

    2、ARP 协议工作原理
    在以太网中,数据传输的目标地址是 MAC 地址,一个主机要和另一个主机进行直接通信,必须要知道目标主机的 MAC 地址。
    计算机使用者通常只知道目标机器的 IP 信息,“地址解析”就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。
    简单地说,ARP 协议主要负责将局域网中的 32 位 IP 地址转换为对应的 48 位物理地址,即网卡的MAC 地址,保障通信顺利进行。

    arp 工作原理如下:

    在这里插入图片描述

    arp欺骗是为了中间人攻击

    3、使用 arping 命令查看局域网中的 IP 是否有冲突

    局域网中,有相同的IP地址,叫IP冲突

    arping 192.168.42.2 -c 1
    
    • 1

    在这里插入图片描述

    arping一次只能ping一个IP地址

    例 1:对 arping 命令的结果进行筛选,只取 ip 地址

    探测的时候,我们关注的是存活主机,就是IP地址

    arping -c 1 192.168.1.1 | grep "bytes from" | cut -d" " -f 5 | cut -d "(" -f 2 | cut -
    d ")" -f 1
    
    • 1
    • 2

    在linux里面,有一个筛选过滤,叫grep。管道符,把结果输送出去。

    arping 192.168.42.2 -c 1 | grep "bytes from"
    
    • 1

    在这里插入图片描述

    cut以空格符为判断,取第五个字符

    arping 192.168.42.2 -c 1 | grep "byte from" | cut -d " " -f 5
    
    • 1

    在这里插入图片描述

    以左括号为间隔

    arping 192.168.42.2 -c 1 | grep "byte from" | cut -d " " -f 5 | cut -d "(" -f 2
    
    • 1

    在这里插入图片描述

    arping 192.168.42.2 -c 1 | grep "byte from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
    
    • 1

    在这里插入图片描述

    我们发现 arping 只能对一个 ip 地址进行判断,这个时候我们就需要通过脚本来实现对网络的自动扫描,探测那些主机是存活的。

    vim arping1.sh
    
    • 1
    #!/bin/bash
    if [ "$#" -ne 1 ];then #判断用户是否输入了至少一个参数如果没有输入参数,输出提示信息并退出
     echo "Usage - ./arping.sh [interface]"
     echo "Excample - ./arping.sh eth0"
     echo "Example will perform an ARP scan of the local subnet to which eth0 is 
    assigned"
     exit
    fi
    
    
    interface=$1 #将用户输入的参数传递给 interface 变量
    prefix=$(ifconfig $interface | grep "inet " | cut -d 't' -f 2 | cut -d '.' -f 1-3) #获取本机 IP 地址网段 192.168.42
    #对整个网段进行 arping
    for addr in $(seq 1 254);do 
     arping -c 1 $prefix.$addr | grep "bytes from" | cut -d" " -f 5 | cut -d "(" -f 2 | cut -d")" 
    -f 1 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    粘贴完成后检查有没有粘贴错误的地方,按 esc 输入 :wq 保存退出
    给我们写好的脚本加上执行权限,我们 linux 中可执行程序需要拥有执行权限才可以直接执行

    chmod  +x arping1.sh
    
    • 1

    在这里插入图片描述

    每个人的网段不一样,它想探测内网,所有的存活主机,得先拿到内网的网段,拿到网段之后,得先知道这个网段里面,有多少台主机

    ifconfig eth0 | grep "inet " | cut -d 't' -f 2 | cut -d '.' -f 1-3 
    
    • 1

    在这里插入图片描述

    例 2:模拟 IP 地址冲突
    再开一台 虚拟机kali,把 IP 地址改成 192.168.42.2

    ifconfig eth0 192.168.42.2
    
    • 1

    执行我们的脚本,进行扫描

    ./arping1.sh eth0     #查看局域网中是否存在 arp 攻击
    
    • 1

    如果在内网当中,出现其它的IP地址,就说明有人进来了,出现两个一样的 IP 地址,就是有 ARP 攻击了,为了安全,可以把网给拔了

    4、使用 netdiscover 进行被动方式探测局域中存活的机器

    netdiscover 是一个主动/被动的 ARP 侦查工具。使用 netdiscover 工具可以在网络上扫描 IP 地址,检查在线主机或搜索为它们发送的 ARP 请求。
    主动模式:
    主动模式顾名思义就是主动的探测发现网络内主机,但是这种方式往往会引起网络管理员的注意

    netdiscover -i eth0 -r 192.168.42.0/24
    
    • 1

    参数:-i device: your network device
    -r range: scan a given range instead of auto scan. 192.168.42.0/24,/16,/8

    在这里插入图片描述

    很多工具,都可以探测局域网主机,是否存活,我们可以都去了解,都去尝试,看那个好用,就用那个

    被动模式:
    被动模式的方法更加隐蔽,但是速度会比较慢,网卡被设置为混杂模式来侦听网络内的 arp 数据包进行被动式探测,这种方式就需要网络内设备发送 arp 包才能被探测到。

    netdiscover -p
    
    • 1

    参数:-p passive mode: do not send anything, only sniff

    在这里插入图片描述

    4.3.3 HPING3

    hping3 是一个命令行下使用的 TCP/IP 数据包组装/分析工具,通常 web 服务会用来做压力测试使用,也可以进行 DOS 攻击的实验。同样 Hping 只能每次扫描一个目标。
    例:使用 HPING 进行压力测试

    hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source xxx.cn
    
    • 1

    -c 1000 = 发送的数据包的数量。
    -d 120 = 发送到目标机器的每个数据包的大小。单位是字节
    -S = 只发送 SYN 数据包。
    -w 64 = TCP 窗口大小。
    -p 80 = 目的地端口(80 是 WEB 端口)。你在这里可以使用任何端口。
    –flood = 尽可能快地发送数据包,不需要考虑显示入站回复。洪水攻击模式。
    –rand-source = 使用随机性的源头 IP 地址。这里伪造的 IP 地址,只是在局域网中伪造。通过路由器后,还会还原成真实的 IP 地址。

    一般DDOS攻击,源IP是伪造的,瞬间发送大量的连接攻击请求,大量的占用网络服务器的资源,每一个都会发送二次握手,但因为源IP是伪造的,收不到返回的确认包,如果网络带宽不大的情况下,瞬间网络资源耗尽,网站就打不开了

    Ctrl+c 停止后即可访问网站。

    大量的数据包,经过路由器,路由器抗不了,你以为你把网络,干瘫了,其实是把自己干废了

    4.3.4 使用 FPING 查看局域中运行了哪些机器

    Fping 就是 ping 命令的加强版他可以对一个 IP 段进行 ping 扫描,而 ping 命令本身是不可以对网段进行扫描的。

    fping -ag 192.168.42.0/24 > fping.txt
    
    • 1

    在这里插入图片描述

    -a 表示只显示存活主机
    -g 表示对地址段进行扫描如果不加可以对某个 IP 进行扫描

    >fping.txt 表示将扫描的结果重定向到 fping.txt ,原因是如果扫描一个网段的话输出结果是非常多的,我们输出重定向到文件中只会获得存活的主机信息。
    
    • 1
    cat fping.txt
    
    • 1

    在这里插入图片描述

    4.3 基于 Nmap 的扫描方式
    4.3.1 Nmap 的基本扫描方式

    Nmap,也就是 Network Mapper,最早是 Linux 下的网络扫描和嗅探工具包。nmap的核心功能是端口探测,除此之外,可以进行存活主机识别、操作系统识别,服务识别、漏洞识别、代码审计、设备发现等等

    例:扫描 192.168.42.0 这个网段

    nmap -sn 192.168.42.0/24
    
    • 1

    在这里插入图片描述

    -sn表示只进行ping扫,不进行端口探测

    外网也可以扫描,拿到一台外网服务器之后,可以扫描C段

    4.3.2 使用 nmap 进行半连接扫描

    nmap 扫描类型主要有 TCP 的全连接扫描(会在被扫描机器留下记录),半连接扫描(不会留下记录)

    在这里插入图片描述

    nmap -sS 192.168.42.138 -p 80,81,21,25,110,443
    
    • 1

    -sS 表示使用 SYN 进行半连接扫描

    在这里插入图片描述

    4.3.3 使用 nc 扫描端口
    nc 是 netcat 的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
    nc 的作用:

    1. 实现任意 TCP/UDP 端口的侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口

    2. 端口的扫描,nc 可以作为 client 发起 TCP 或 UDP 连接

    3. 机器之间传输文件

    4. 机器之间网络测速
      nc 参数:
      -nv 表示我们扫描的目标是个 IP 地址不做域名解析
      -w 表示超时时间
      -z 表示进行端口扫描

    nc -nv -w 1 -z 192.168.42.138 1-100
    
    • 1

    在这里插入图片描述

    4.4 实战 1-使用 scapy 定制数据包进行高级扫描
    4.4.1 scapy 概述

    Scapy 是一个可以让用户发送、侦听和解析并伪装网络报文的 Python 程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。

    4.4.2 scapy 定制 ARP 协议
    scapy
    
    • 1

    在这里插入图片描述

    如果提示 INFO 找不到某个模块可以使用 apt install python3-pyx
    安装时我们输入 exit() 退出 scapy

    exit()
    
    • 1

    在这里插入图片描述

    apt install python3-pyx
    
    • 1

    在这里插入图片描述

    scapy
    
    • 1

    我们使用 ARP().display()来查看 ARP 函数的用法

    ARP().display()
    
    • 1

    在这里插入图片描述

     hwtype= 0x1 硬件类型
     ptype= 0x800 协议类型
     hwlen= 6 硬件地址长度(MAC)
     plen= 4 协议地址长度(IP)
     op= who-has who-has 标识arp的数据类型,1表示请求包,2表示应答包
     hwsrc= 00:0c:29:6a:cf:1d 源 MAC 地址
     psrc= 192.168.1.53 源 IP 地址
     hwdst= 00:00:00:00:00:00
     pdst= 0.0.0.0 向谁发送查询请求
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    例:定义向 192.168.42.138发送 arp 请求的数据包
    sr1 函数作用:sr1 函数包含了发送数据包和接收数据包的功能。

    sr1(ARP(pdst="192.168.42.138"))
    
    • 1

    在这里插入图片描述

    exit()
    
    • 1

    注:发现源地址 psrc=192.168.42.138,说明已经收到网关的应答包。

    向不存在的IP地址,发送ARP包,会一直闪点,因为他没有收到应答包,地址不存在,无应答

    scapy
    sr1(ARP(pdst="192.168.42.133"))
    
    • 1
    • 2

    在这里插入图片描述

    如果IP地址存在,但还是无应答,可能不通或者在路由器里面,禁止arp包

    4.4.3 scapy 定制 PING 包

    Scapy 的功能是非常强大的,我们前面只是简单的介绍了他的 ARP 探测方式,下面我们简单讲一下
    IP/ICMP 的方式
    下面两条命令可以直接看到我们的数据包格式

    IP().display()
    ###[ IP ]### 
     version= 4 版本:4,即 IPv4
     ihl= None 首部长度
     tos= 0x0 服务
     len= None 总长度
     id= 1 标识
     flags= 
     frag= 0 标志
     ttl= 64 生存时间
     proto= hopopt 传输控制协议 IPv6 逐跳选项
     chksum= None 首部校验和
     src= 127.0.0.1 源地址
     dst= 127.0.0.1 目的地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    ICMP().display()
    ###[ ICMP ]### 
     type= echo-request 类型,标识 ICMP 报文的类型
     code= 0 代码
     chksum= None 校验和
     id= 0x0 标识
     seq= 0x0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    注: IP()生成 ping 包的源 IP 和目标 IP ,ICMP() 生 ping 包的类型。使用 IP()和 ICMP()两个函数,可以生成 ping 包,进行探测。

    思路:
    1、修改 IP 包头的 dst,也就是我们的目的地址
    2、拼接上 ICMP 的数据包类型
    3、使用 sr1()进行发送数据包并接收数据包

    sr1(IP(dst="192.168.42.138")/ICMP(),timeout=1)
    
    • 1

    在这里插入图片描述

    注:大家复制命令时,>>>提示符和命令之间不能有空格。

    sr1(IP(dst="192.168.42.136")/ICMP(),timeout=1)
    
    • 1

    在这里插入图片描述

    4.4.4 scapy 定制 TCP 协议 SYN 请求

    tcp 三次握手过程中 flags 的标记

    #查看 TCP()函数的用法

    在这里插入图片描述

    TCP().display()
    
    • 1
    ###[ TCP ]### 
     sport= ftp_data TCP 源端口
     dport= http TCP 目的端口
     seq= 0 32 位序号
     ack= 0 32 位确认序号
     dataofs= None 4 位首部长度 
     reserved= 0 保留 6 位
     flags= S 标志域,紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN
     window= 8192 窗口大小
     chksum= None 16 位校验和
     urgptr= 0 优先指针
     options= [] 选项
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    sr1(IP(dst="192.168.42.138")/TCP(flags="S",dport=80),timeout=1)
    
    • 1

    flags=”S”表示 SYN 数据包
    dport=80 表示目标端口 80

    在这里插入图片描述

    我们到一个 flags=SA 的数据包。SA 标志即 SYN+ACK。我们收到服务器 tcp 三次握手中的第二个包,能收到回应,表示端口开放。

    如果flag=RA,代表rst+ ack,断开了,端口不存在

    注:这种基于 tcp 的半链接扫描,更隐密,更不容易被发现。

    我们在端口扫描的时候,没有必要这样大废召章,做为了解就可以了

    4.5 实战 2-僵尸扫描

    在做渗透测试的时候,尽可能去隐藏自己是最好的,因为目标如果有防御,一不小心把你封了,你接下来的工作将怎么进行

    有一些逻辑漏洞,通过扫描器是扫描不出来的,关键在于你的思维,你能不能想到这一点,CTF特别锻炼你的思维,而且考验你的综合能力

    CTF不能一味的去刷题目,每做一道题,回过头来,复盘,把整个思路去写出来,WP,在这整个的过程中,有那些知识点是你的盲区,然后有重点的去补,整个都OK了,这就是你学到的,下次有点不太一样,但是你已经学到了

    做渗透最重要是什么? 思维! 学僵尸扫描实用性不大,但是僵尸扫描的这个种思维值得你学习。

    4.5.1 僵尸扫描概述

    僵尸主机:僵尸主机是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但是僵尸扫描中的僵尸主机指得是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统中 IP 数据包中 ID 是递增的。

    一台机器只要联网了,即使不打开任何应用程序,不做任何操作,他在后台运行的程序,肯定会向后台发送数据包,

    IPID:指的是通信过程中,IP 数据包中的 ID。

    僵尸扫描拥有极高的隐蔽特性,但是实施条件苛刻。

    1. 目标网络可伪造源地址进行访问
    2. 选择僵尸机,僵尸机需要在互联网上是一个闲置的操作系统,需要系统使用递增的 IPID,比如XP 系统。
      互动:
      nmap 和 ping 都会直接和目标机器接触。 如何可以不直接目标主机接触,还可以探测出目标主机是否开放端口?

    在这里插入图片描述

    多级跳,多个肉鸡和多个跳板机,一个个连上去,然后对目标进行探测

    前提是:你在公网或局域网上先拿到了肉机。 僵尸扫描可以不拿到肉机权限,只要对方的 IPID 是自增长上的就可以了。

    4.5.2 僵尸扫描原理

    1、端口开放状态扫描原理:
    TCP 三次握手发包过程中,SYN/ACK 是第二次包。

    在这里插入图片描述

    在这里插入图片描述

    第一步:参考图 1。

    (1)、攻击者向僵尸机发送 SYN/ACK 确认包。
    (2)、僵尸主机返回我们 RST 数据包关闭链接,RST 数据包中包含了 IPID 信息。假设 IPID=X
    注:三次握手的第一个包是 SYN,目标主机收到 SYN 才会应答 SYN/ACK,因为僵尸主机没有向我
    们发送 SYN 请求。所以僵尸主机返回我们 RST 数据包关闭链接。
    第一步中,黑客的收获是:知道了僵尸主机的 IPID。

    第二步:参考图 2。

    (1)、攻击者修改 IP 包头的 SRC 字段为僵尸主机的 IP,伪装成僵尸主机给目标主机发 SYN 请求。
    (2)、目标主机收到请求,如果端口是开放的就会返回给僵尸主机一个 SYN/ACK 的数据包。

    (3)、僵尸主机收到目标主机发来的 SYN/ACK 确认包,因为僵尸主机没有给你发 SYN 请求。所以僵尸主机给目标主机返回了一个 RST 数据包。这个数据包表示关闭连接。此僵尸主机对外发出一个数据包,所以僵尸主机的 IPID 值+1。此时 IPID 值为 X+1。
    第二步中,黑客的收获是:如果目标主机端口开放,让僵尸主机的 IPID+1

    第三步:参考图 3。

    (1)、攻击者再次向僵尸主机发送 SYN/ACK 确认包
    (2)、僵尸主机同样向攻击者返回了一个 RST 数据包,此僵尸主机对外又发出一个数据包,所以僵尸主机的 IPID 值再+1。此时 IPID 值为 X+2。
    第四步:计算 3 次通信过程中的 IPID 值。
    (1)、攻击者查看僵尸主机返回的数据包中 IPID 值为 X+2。

    (2)、攻击者对比在第一步中的 IPID 值 X,发现增加了 2。
    结论:肯定目标主机和僵尸主机通信了,能通信,就说明目标主机端口是开放的。

    如果在我们发送完第一个数据包的时候,僵尸机又向别的服务器发送数据包了,回过头来,这个IPID不是加1加2的问题,而是加n的问题,所以僵尸主机一定要够闲置

    2、端口关闭状态扫描原理:

    在这里插入图片描述

    第一步:参考图 1。

    (1)、攻击者向僵尸机发送 SYN/ACK 确认包。
    (2)、僵尸主机返回我们 RST 数据包关闭链接,数据包中包含了 IPID 信息。假设 IPID=X
    注:三次握手的第一个包是 SYN,目标主机收到 SYN 才会应答 SYN/ACK,因为僵尸主机没有向我
    们发送 SYN 请求。所以僵尸主机返回我们 RST 数据包关闭链接。
    第二步:参考图 2。

    (1)、攻击者修改 IP 包头的 SRC 字段为僵尸主机的 IP,伪装成僵尸主机给目标主机发 SYN 请求。
    (2)、目标主机收到请求,如果端口是关闭的。就会返回给僵尸主机一个 RST 的数据包。
    (3)、僵尸主机收到目标主机发来的 RST 包,关闭链接不对外发送数据包。此僵尸主机的 IPID 值
    还是 X。
    第三步:参考图 3。

    (1)、攻击者再次向僵尸主机发送 SYN/ACK 确认包
    (2)、僵尸主机同样向攻击者返回了一个 RST 数据包,此僵尸主机对外发出一个数据包,所以僵尸主机的 IPID 值+1。此时 IPID 值为 X+1。
    第四步:计算 3 次通信过程中的 IPID 值。
    (1)、攻击者查看僵尸主机返回的数据包中 IPID 值为 X+1。

    (2)、攻击者对比在第一步中的 IPID 值 X,发现增加了 1。
    结论:肯定目标主机和僵尸主机没有通信了。没能通信,就说明目标主机端口是关闭的。
    以上就是僵尸扫描原理

    4.5.3 僵尸扫描-实战

    实验拓扑图:

    在这里插入图片描述

    一台 XP 的虚拟机为僵尸主机,IP 地址为 192.168.42.138 并关闭 XP 系统的防火墙
    192.168.42.145 为目标主机,确认 sshd 服务能够正常访问。

    XP 安装完后,要关闭防火墙:

    在这里插入图片描述

    第一步:给僵尸主机发送的 SYN/ACK 数据包,将返回的数据包存入 rz1

    rz1=sr1(IP(dst="192.168.42.138")/TCP(dport=445,flags="SA"))
    
    • 1

    命令详解:
    rz1 表示定义了一个变量来接受我们返回的数据包
    dst 表示我们的僵尸主机 IP
    dport=445 表示我们向僵尸主机的 445 端口发送数据包,XP 主机的 445 端口一般都是开启状态
    flags=“SA”表示发送 SYN/ACK

    在这里插入图片描述

    查看一下 IPID
    display()表示查看变量中的内容。我们只需要查看 IP 下面的 ID 字段即可

    rz1.display()
    
    • 1

    在这里插入图片描述

    第二步:攻击者修改 IP 包头的 SRC 字段为僵尸主机的 IP,伪装成僵尸主机给目标主机发 SYN 请求。

    rt=sr1(IP(src="192.168.42.138",dst="192.168.42.137")/TCP(dport=23),timeout=1)
    
    • 1

    命令详解
    rt 表示定义了一个变量来接受我们返回的数据包
    src 表示伪造成僵尸主机的 IP 地址
    dst 表示将数据包发送目标主机
    dport 目标端口
    timeout 超时时间

    在这里插入图片描述

    第三步:攻击者再次向僵尸主机发送 SYN/ACK 确认包,获得 IPID

    rz2=sr1(IP(dst="192.168.42.138")/TCP(dport=445,flags="SA"))
    
    • 1

    在这里插入图片描述

    实验结果查看
    display()表示查看变量中的内容。我们只需要查看 IP 下面的 ID 字段即可

    rz1.display()
    rz2.display()
    
    • 1
    • 2

    在这里插入图片描述

    即 258-256=2 表示端口开放

    这三条命令,我们在同一个界面里面,分批次去执行

    在这里插入图片描述

    我们测试端口不开放的情况,我们将第二步的端口修改成 222 ,因为 222 肯定是没有开启的端口

    rz1=sr1(IP(dst="192.168.42.138")/TCP(dport=445,flags="SA"))
    rt=sr1(IP(src="192.168.42.138",dst="192.168.42.137")/TCP(dport=2222),timeout=1)
    rz2=sr1(IP(dst="192.168.42.138")/TCP(dport=445,flags="SA"))
    rz1.display()
    rz2.display()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们可以看到 549 、550 结果为+1 即端口为关闭状态

     exit()     #退出
    
    • 1

    僵尸扫描分两步,第一步找到僵尸主机,第二步使用僵尸主机进行僵尸扫描

    4.5.4 使用 nmap 进行僵尸扫描

    1、扫描 192.168.42.0 网段中某些机器可以作为僵尸主机,外网也可以,不一定要内网,我只是在内网进行演示

    nmap 192.168.42.0/24 -p1-1024 --script=ipidseq.nse > a.txt
    
    • 1

    在这里插入图片描述

    -p1-1024 #指定扫描的端口范围为 1 到 1024。只扫描常用端口就可以了
    –script=ipidseq.nse 判断主机是否可以当做僵尸主机

    vim a.txt     #在文档中查找关键字 Incremental
    
    • 1

    在这里插入图片描述

    Incremental 英 [ˌɪnkrɪˈmɛnt(ə)l] 增量式;增量备份;增量的;渐进的;增量法

    表示主机 IPID 为递增,可以做为僵尸主机。

    nmap 192.168.42.138 -sI 192.168.42.137 -p1-100
    
    • 1

    -sI 参数表示指定僵尸主机进行扫描目标主机。注意是大写的 I

    在这里插入图片描述

    Zombie是僵尸的意思,IPID自增不一定就能够做僵尸主机,还要足够闲置

    nmap 192.168.42.137 -sI 192.168.42.138 -p1-100
    
    • 1

    在这里插入图片描述

    这台192.168.42.138做不了僵尸主机

  • 相关阅读:
    三个“清洁代码”技巧将使您的开发团队效率提高 50%
    600+ 道 Java面试题及答案整理(2022最新版)
    手把手教你Nginx 配置 HTTPS 完整过程
    前端Vue页面中如何展示本地图片
    Android-Framework 不允许应用商场下载的应用安装,adb 、pm 可以正常安装
    第23天中视频伙伴计划通过!分享本人心得,希望能帮到路上的你
    Spring AOP(JavaEE进阶系列5)
    基于nodejs+vue的读书会网站
    【ELFK】之zookeeper
    接口优化例子
  • 原文地址:https://blog.csdn.net/m0_53008479/article/details/126504878