0%

主动信息收集2

端口扫描

端口扫描是必须要在已知目标IP存活的情况下进行的。

  1. UDP端口扫描

    1. 原理就是没有返回的数据包,如果返回的是ICMP的端口不可达,说明没有这个端口,和我们进行主机发现截然相反。
    2. scapy就能,原理就是上面写的。
    3. nmap扫描方法:namp -sU 192.168.209.1
    4. result
    5. 如果跟上-p 端口号,就是指定检测的端口,如果p参数跟上-,代表全端口
    6. 如果想查看当前执行状态,按下回车键,nmap就能够告诉我当前状态。
  2. TCP端口扫描

    1. 就是根据三次握手进行端口的扫描,当然也可以通过不完整的握手进行扫描(相对于比较隐蔽),只发送SYN包不回复ACK包
    2. 僵尸扫描:
      1. 需要可以进行IP地址伪造
      2. 需要一台僵尸机器,这台机器是闲置的
      3. 需要IPID(IP头的Identification字段)是递增的,就是发送的数据包这个字段是依次增加的。
      4. 首先我们给僵尸机器发送一个SYN/ACK,僵尸机会返回一个RST的数据包(因为没经过握手)
      5. 包中会得到一个IPID
      6. 这个时候我们再发送一个SYN包给被扫描的主机,这里伪造为僵尸机的IP
      7. 被扫描主机会返回给僵尸机一个SYN/ACK包,僵尸机会给被扫描机器返回一个RST包,这里面的IPID是给我们的IPID增加了一的(所以这个僵尸机器是必须要很闲的)
      8. 我们再给僵尸机器发送一个SYN/ACK包,僵尸机器再次给我们发送一个RST
      9. 这个RST中的IPID是关键,如果IPID=我们之前得到的IPID+2,那么说明目标主机开放,如果IPID=之前的IPID+1说明没有开放。
      10. 存在
      11. 不存在

SYN包扫描

  1. scapy扫描

    1. 使用命令sr1(IP(dst="192.168.209.1")/TCP(flags="S",dport=80),timeout=1).display()
    2. 响应
    3. 可以看到响应的是SA=SYN+ACK
    4. 但其实抓包发现,我们还发了一个RST包,这个数据包不是scapy发送的是系统发送的,因为我们“莫名其妙”收到了一个SA包。
    5. 如果不存在的话呢,会报错,其实是因为我们的返回值是none,但我们还是display造成的。
    6. 如果返回的数据包中的flags是RA的话呢也说明不存在。
    7. flags是18的话呢是SA
  2. nmap

    1. 不加参数:nmap 192.168.209.1 -p 1-100
    2. nmap先进行DNS反向解析再进行端口扫描
    3. 有的时候如果有防护墙,nmap还会将防火墙后面的端口(nmap显示close的)也显示出来,我们可以使用–open参数
    4. nmap -sS 192.168.209.1 -p 1-100也是一样的,但是指定是使用SYN的这种扫描方法。
    5. -iL是对一个文件列表扫描
  3. hping3

    1. hping3 192.168.209.1 --scan 1-100 -S
    2. 这个最终就会打印存在的端口
    3. hping3 -c 100 -S --spoof 192.168.209.111 -p ++1 192.168.209.1
    4. 这个的意思是我们发送是个数据包(-c),使用SYN(-S)发送,–spoof使用地址欺骗(地址是192.168.209.111),-p ++1 代表每次端口递增1,最后就是我们的target。
    5. 欺骗
    6. 可以看到鲨鱼给我们显示的是源地址是我们所要伪造的111
    7. 但是我们要看结果的话呢,我们需要在111机器上抓包得到响应包判断端口是否开放。

全连接端口扫描

结果最准确,但是非常不隐蔽。
就是正常三次握手进行扫描。
首先我们先发送一个SYN包给目标,然后他返回给我们一个数据包,我们再发送一个ACK给他,这个ACK中的TCP部分的ack字段的值要等于得到数据包中的seq字段加一。
但是我们单纯这样子做的话呢不能正常的进行握手,因为我们的机器内核会发送RST给目标,目标接收到之后会导致会话终止。
避免这种情况的方法:禁用iptables,因为iptables是在内核之前接收到数据包的,不管是发送和接受都要经过他。
命令:iptables -A OUTPUT -p tcp --tcp- flags RST RST -d 192.168.209.1 -j DROP
这句话的意思是,我们增加一个发送数据(OUTPUT)的规则(-A),对于tcp(-p),我们对发送给192.168.209.1(-d)的数据包如果是RST(-flags)的话呢我们就执行动作DROP(-j)。
iptables -L 的话呢可以查看当前的规则。

  1. scapy

    1. 其实就是上面的那种方式,但是不要忘记增加防火墙的规则
  2. nmap

    1. -sT参数的话呢是使用全连接的扫描方式
    2. nmap -sT 192.168.209.1 -p 1-100
    3. 速度会慢一点
  3. dmitry

    1. dmitry -p 192.168.209.1
    2. 上面就是全连接的扫描
  4. nc

    1. 使用nc进行端口的检测
    2. nc -nv -w 1 -z 192.168.209.1 1-100
    3. n不做域名解析,v显示详细信息,w超时时间,z是扫描

僵尸扫描

  1. scapy

    1. I=IP()
    2. T=TCP()
    3. RZ=(I/T)
    4. RT=(I/T)
    5. RZ[IP].dst=”192.168.209.134”
    6. RZ[TCP].dport=445
    7. RZ[TCP].flags=”SA”
    8. 上面这一些是用来配置僵尸机的
    9. RT[IP].src=”192.168.209.138”
    10. RT[IP].dst=”192.168.209.1”
    11. RT[TCP].dport=25
    12. RT[TCP].flags=”S”
    13. 上面是配置扫描主机的
    14. az1=sr1(RZ)
    15. at=sr1(RT,timeout=1)
    16. 上面这个是给扫描机器发的,因为肯定收不到回包,所以要定义超时,或者使用send函数(不接收返回数据)
    17. az2=sr1(RZ)
    18. 如果最终的az1的IP部分中的ID字段+2=az2中的IP部分中的ID字段
    19. 如果是+1,那说明不存在
  2. nmap

    1. 发现僵尸机:nmap -p 445 192.168.209.134 --script=ipidseq.nse
    2. 使用上面的就可以进行僵尸机判断,如果记过现实Incremental的话呢说明可以
    3. nmap 192.168.209.1 -sI 192.168.209.134 -Pn -p 0-100
    4. -sI指定僵尸机器,-Pn跳过主机发现