端口扫描 - Scapy - 隐蔽扫描

0x00:简介

端口扫描可分为三种,分别是隐蔽扫描、全链接扫描、僵尸扫描。

隐蔽扫描:像服务器发起的请求不会经历完整的三次握手,首先会向目标服务器进行第一次握手,发送一个 SYN 包,然后根据服务器返回的 flags 来判断目标端口是否开放,flags 如果返回了 SA(SYN/ACK)则代表端口开放,SA 这个是正常的第二次握手,如果返回的是 RA(RSTS/ACK),则代表端口不开放,RA 是目标服务器没有正常返回的意思。当自己收到第二次握手返回的信息后,就已经可以确认端口开放情况,所以就不再向目标发送第三次的确认包 ACK 了,因为不完整,缺少第三次的确认,所以称为隐蔽扫描。

0x01:scapy tcp 隐蔽扫描

因为隐蔽扫描需要建立握手,所以协议是 tcp,scapy 命令如下:

端口扫描 - Scapy - 隐蔽扫描_第1张图片

53 是开放的,flags 返回的是 SA,54 是没有开放的,flags 返回的是 RA。

结合 python 批量发现脚本如下:

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *

if len(sys.argv)!=4:
    print "tip:./scapy-tcp.py 1.1.1.1 1 100"
    sys.exit()

ip=sys.argv[1]
start=int(sys.argv[2])
end=int(sys.argv[3])

for port in range(start,end):
    a=sr1(IP(dst=ip)/TCP(dport=port),timeout=1,verbose=0)
    if a == None:
        pass
    else:
        if int(a[TCP].flags)==18:
            print port
        else:
            pass

脚本三个参数,分别是目标 ip,其实端口和结束端口。然后遍历端口给到 scapy 进行检测,最后根据返回的 flags 信息来判断端口是否开放,脚本中是判断值是否为 18,18 带表的是 SA,如果不等于 18,则代表只要返回不是 SA 的,都没有开放。18 之所以等于 SA,首先看一下 tcp 包头返回 syn/ack 的 wireshark 抓包情况:

端口扫描 - Scapy - 隐蔽扫描_第2张图片

数据包里的 flags 从下网上数位数分别为 1,2,4,8,16,32,64……,16+2 为 18,也就是 syn 段和 acknowledgment 段,这两位的值都为 1 时,则代表 flags 为 SA。

再来看下 RA 的情况,如下图:

端口扫描 - Scapy - 隐蔽扫描_第3张图片

4 位 reset 段值为 1,16 位 acknowledgment 段值为 1,也就是 RA,16+4 为 20,不为 18。这就是脚本中为什么通过 flags==18 来判断端口是否开放。

最后来看下脚本的扫描结果:

端口扫描 - Scapy - 隐蔽扫描_第4张图片

0x02:拓展

先来看一个情况,用 scapy 发现单个端口,执行结果如下图:

端口扫描 - Scapy - 隐蔽扫描_第5张图片

tcp 包头里的 flags 为 SA, 通过 wireshark 抓包如下:

请输入图片描述

可以发现,wireshar 抓的包再收到 syn/ack 后有一个返回包 RST。这个包不是 scapy 产生的,而是系统内核回的。流程是这样的:scapy 向目标服务器发送了 SYN,目标服务器返回了 SYN/ACK,这时自己的机器平白无故的接收了个 SYN/ACK,很是郁闷,所以会直接返回 RSTS。

0x03:总结

到目前位置,scapy 记录了其通过修改包头类型来发送不同的协议,以此来实现一些发现端口发现主机的工作。二层用 arp,三层用 icmp,四层用 udp 和 tcp,端口 udp 根据返回信息端口不可达来判断,端口 tcp 根据 flags 返回信息 SA 和 RA 来判断。

公众号回复数字“8”领取CIS加固全套手册。

微 信:fageweiketang,朋友圈不定期干货分享,欢迎讨论。

公众号:发哥微课堂,专注于代码审计、WEB渗透、网络安全。

 端口扫描 - Scapy - 隐蔽扫描_第6张图片                    端口扫描 - Scapy - 隐蔽扫描_第7张图片

你可能感兴趣的:(渗透测试,信息搜集)