端口扫描 - scapy - 全链接扫描

news/2024/5/17 18:00:26 标签: kali, scapy, syn, ack, tcp

0x00:介绍

端口扫描分为隐蔽扫描、全链接扫描、僵尸扫描。

全链接扫描:隐蔽扫描是直接发的 syn 包,只进行第一次握手,通过返回的信息判断端口是否开放。全链接扫描顾名思义,像正常的请求一样去访问目标服务器,也就是要进行三次握手。

有时候会受一些防火墙的影像,直接发送 syn 导致没有信息返回,判断不准确的情况,这时候可以用全链接方式进行扫描。弊端在于大量的全链接请求,而请求后又没有进行后续的操作,很容易被一些设备检测到。

0x01:scapy 全链接扫描端口

首先,先来看一个问题:

当使用脚本发包时,第一次握手给目标服务器发了 syn 包,第二次服务器返回了 syn/ack 包,在自己准备给服务器发送第三次的确认包 ack 时,自己的机器会先发一个 rst 包过去。

其原因在于自己发了 syn 时,自己机器并不知情,当服务器返回 syn/ack 时,自己的机器看来这个包是莫名其妙的,当收到一个莫名其妙的 syn/ack 时,自己机器会返回一个 rst 包。

当自己机器返回 rst 包后,这个连接就终端了,这时自己再向目标服务器发送 ack 确认包时,目标服务器突然收到一个 ack 不能理解,就会返回一个 rst,这时端口情况就扫描不出来了。

明确整个流程后,再来看下脚本,python 脚本如下:

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

SYN=IP(dst="172.168.1.101")/TCP(dport=21,flags='S')

print "-- Send SYN --"
SYN.display()

print"\n\n-- SYN Received --"
response = sr1(SYN,timeout=1,verbose=0)
response.display()

if int(response[TCP].flags) == 18:
    print"\n\n-- Sent ACK --"
    A = IP(dst="172.168.1.101")/TCP(dport=21,flags='A',ack=(response[TCP].seq+1))
    A.display()
    print"\n\n-- ACK Received --"
    response2 = sr1(A,timeout=1,verbose=0)
    response2.display()
else:
    print"SYN/ACK not returned"

以上就是 scapy 通过全链接扫描的 python 脚本,首先是造好了一个 syn 包,然后接收了返回的包,判断返回包 flags 是否是 18 也就是 SA 标志,如果是 SA 则造 ACK 确认包发送,否则的话直接就 pass 掉。

执行过程如下,首先是发送 syn 包的过程如下:

请输入图片描述

然后就是目标服务器返回的 syn/ack 包,如下:

请输入图片描述

然后就是自己机器收到 syn/ack 后,发送的 ack 包,如下:

请输入图片描述

因为自己机器莫名其妙的收到了一个 syn/ack,所以会先发一个 rst,这时目标服务器莫名其妙的收到了一个 rst,也会回一个 rst,如下:

请输入图片描述

通过 wireshark 抓包如下:

请输入图片描述

通过 wireshark 的抓包结果可以看出之前所述的过程。那么应该如何阻止自己的机器返回 rst 包,从而完整的完成全链接的三次握手呢。这个可以通过 iptables 来设置防火墙,阻止其内核向目标服务器发送 rst 包,其示例如下:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 1.1.1.1 -j DROP

其中 - A 代表是加一条规则,OUTPUT 代表的是出站,-P 代表的协议,--tcp-flags 代表 tcp 的 flags,-d 代表目标地址,-j 代表的是要执行的动作,drop 也就是丢掉的意思。整个 iptables 意思就是添加一条出站规则协议是 tcp 的 flags 是 RST 的目标地址是 1.1.1.1 的包,然后丢掉。这样在自己机器收到 syn/ack 时,发送的 rst 包就会被 iptables 直接丢掉。

可以通过 - L 参数来查看一下 iptables 当前的规则列表,如下图:

请输入图片描述

添加规则后重新执行脚本,前几个包都一样,最后一个包返回的就不在是 rst 了,而是 ack 包,如下:

请输入图片描述

这时,再通过 wireshark 抓包看下脚本的执行过程,如下:

请输入图片描述

0x02:总结

通过之前的 scapy 总结,不论是各个层的主机发现,还是 udp 和 tcp 的端口发现,都很强大很好用。但 scapy 在全链接端口扫描时,可以发现其实是有点麻烦的,当隐蔽扫描无法正常扫描时,可以考虑使用全链接的方式,相对还有一个强大的方便的工具,就是 nmap 了,nmap 下篇继续介绍。


                                                                        公众号推荐:aFa攻防实验室

                         分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。

                                                                          


http://www.niftyadmin.cn/n/1148036.html

相关文章

Delphi 可重载运算符列表

类别 运算符 运算符标识 使用 转换 隐式转换 Implicit Implicit(a: type): resultType; 显式转换 Explicit Explicit(a: type): resultType; 一元 - Negative Negative(a: type): resultType; Positive Positive(a: type): resultType; Inc Inc Inc(a: type): resultType; D…

中移动3G第一阶段全业务曝光 含34个增值业务

3月27日消息,消息人士在网易论坛刊登了“中国移动3G第一阶段全系列业务”介绍细则,一共包含34个增值业务业务,包含可视电话、视频共享、视频会议、多媒体彩铃、视频留言、手机电视、PoC(无线一键通)等多个3G流行的业务…

Visual Basic 9.0 前沿播报·动态篇(三)XML字面量和XML后期绑定

本期是Visual Basic 9.0前沿播报动态篇的第三篇,也是这个系列的完结篇。按照惯例,我将Visual Basic 9.0最激动人心的部分放在了这一篇。在这一篇,我们将看到所有新特性作用在XML上之后带来的革新性变化。 VisualBasic 9.0专门为XML集成设置了…

一个医院院长电视机坏了,拿到一个大修理店去修

一个医院院长电视机坏了,拿到一个大修理店去修。修理店接待人员:“OK,开机费50元”医院院长: “为什么还没修理就要先交费”?修理店接待人员: “我们修理店的制度就是这样,你们医院的挂号费,不是没看病之前就要交吗”&…

端口扫描 - nmap - 全链接扫描

0x00:简介 nmap 之前的隐蔽扫描方式主要是通过 sS 参数只像目标服务器发送 SYN 包根据返回结果来判断端口是否开放。全链接扫描参数是 sT,T 既代表 tcp 全链接,使用方法和隐蔽扫描无异,只不过由 sS 换成了 sT。 0x01&#xff1a…

.net常用功能函数说明

1、装箱拆箱 要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。2、注意ADO。NET中数据查询语句中的符号格式(c#实现) a.引号在查询时,出现单引号时,应将之替换为两个…

vmware中为虚拟机添加硬盘空间

Vmware有自己的硬盘管理工具,其所在位置是/vmware/vmware workstation/,名称为vmware-vdiskmanager.exe,具体的参数及命令格式可以参照帮助文档。其使用方法如下: 假设虚拟机装有Linux操作系统,虚拟机名称为AS4&#x…

端口扫描 - nc - 全链接扫描

0x00:简介 nc 在众多强大的功能中,也有端口扫描,主要的参数有以下几个: 其中 n 参数作用是跟 ip 地址,不做 dns 域名解析,可以加快速度。v 参数是显示详细信息。z 参数就是扫描模式,默认就是 t…