1.4 端口扫描实验

我们已经安装好了nmap软件,Superscan软件,如图所示,现在对局域网设备进行端口扫描

实验原理

TCP 三次挥手

  • 第一次通话(A → B)
    A 拿起电话拨号:“喂?能听到吗?我想和你通话。”
    含义:A 主动发起连接请求,询问 B 是否就绪。
  • 第二次通话(B → A)
    B 听到铃声,接起电话回复:“我能听到,你那边能听到我吗?”
    含义:B 同意建立连接,同时反问 A,确认双向通道都正常。
  • 第三次通话(A → B)
    A 听到回应后说:“我也能听到,那我们可以正常通话了。”
    含义:A 确认对方已就绪,双向通信通道正式建立

标志位顺序(肉眼识别)

  1. SYN=1,ACK=0 连接请求
  2. SYN=1,ACK=1 同意 + 确认
  3. SYN=0,ACK=1 最终确认

确认号(Ack) = 对方上一包的序列号(Seq) + 1

在抓包列表中,逐行查看 Info 列(Wireshark 会自动翻译标志位):

  • [SYN] → 第一包
  • [SYN, ACK] → 第二包
  • [ACK] → 第三包

端口扫描原理

SuperScan 默认使用 TCP 全连接扫描,就是完整走一遍我们刚才讲的「TCP 打电话流程」

场景 1:端口【开放】(房间有人,服务正常运行)

  1. 扫描机向目标 22 端口发送 SYN 包(拨号:喂,能通话吗?)
  2. 目标主机 22 端口有服务在监听,回复 SYN+ACK 包(接电话:我可以)
  3. 扫描机回复 ACK 包(三次握手完成,连接建立)
  4. 扫描机只是 “试探”,不需要真正通信,立刻发送 RST 包挂断电话

场景 2:端口【关闭】(房间空着,没有服务)

  1. 扫描机拨号(发 SYN 包)
  2. 目标 22 端口没有任何程序监听,相当于房间没人、电话没装机
  3. 目标主机直接回复 RST 包(直接挂断:别打了,这里没人)

场景 3:端口【被防火墙过滤】(被拦截,完全收不到信号)

  1. 扫描机拨号(发 SYN 包)
  2. 目标主机的防火墙,直接拦下了拨号请求,数据包根本到不了端口
  3. 扫描机一直等待,全程没有任何回应,超时

端口扫描三种结果:
✅ 有回应 → 端口开放
❌ 直接挂断 → 端口关闭
🔒 无回应(超时) → 防火墙过滤

superscan

内网扫描

角色 IP 地址
攻击者(攻击机) 192.168.150.10
靶机(被攻击者) 192.168.150.12
网关(默认网关) 192.168.150.2

1、输入目标靶机的IP地址

2、设置扫描端口列表

第一步:点击端口列表
第二步:全选所有端口
第三包:保存端口扫描配置文件
第四步:点击确定保存

3、扫描类型

扫描类型只需要勾选显示主机相应 还有 扫描所有在列表中选择的端口 就可以了。

4、点击开始

扫描速度可以设置的慢一点,然后点击开始扫描,查看端口扫描结果。

139 端口依赖 Windows 的「Server 服务(文件共享)」和「NetBIOS over TCP/IP」组件,只要开启了文件共享,这两个服务默认就会开启,139 端口就会处于监听状态。

公网扫描

必须经过授权才可以检测公网服务器的端口扫描,不然是违法的,这是我自己的云服务器,仅供测试使用:

IP = 117.72.201.196

扫描结果如下:

nmap

一般语法格式:nmap [Scan Type(s)] [Options]

-sT

TCP connect()扫描:这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听, connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。

-sS

TCP同步扫描(TCP SYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接。这项技术最大的好处是,很少有系统能够把这记入系统日志。

-sP

ping扫描:若只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务,如果主机正在运行就会作出响应。在默认的情况下nmap也能够向80端口发送TCP ack包,如果你收到一个RST包,就表示主机正在运行。nmap使用的第三种技术是:发送一个SYN包,然后等待一个RST或者SYN/ACK包。对于非root用户,nmap使用connect()方法。在默认的情况下(root用户),nmap并行使用ICMP和ACK技术。实际上,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。

-sU

UDP扫描:如果想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。

扩展指令:

nmap -p 22 --script ssh-brute --script-args "userdb=C:\\Users\\kipley\\Desktop\\users.txt,passdb=C:\\Users\\kipley\\Desktop\\pass.txt" 117.72.201.198

这是一条 基于 Nmap 脚本引擎(NSE)的 SSH 弱口令暴力破解指令,核心目的是:

对目标主机 117.72.201.198 的 SSH 服务,用你提供的「用户名字典 + 密码字典」尝试爆破登录,检测目标是否存在弱口令漏洞。

指令片段 作用说明
nmap 调用 Nmap 工具的基础命令
-p 22 指定目标端口:限定只扫描 / 操作 22 端口(SSH 服务默认端口),避免浪费时间扫描其他端口
--script ssh-brute 调用 NSE 脚本:加载 Nmap 自带的ssh-brute.nse脚本,这个脚本专门用于 SSH 服务的账号密码爆破
--script-args "..." 给脚本传递参数:给ssh-brute脚本传入自定义配置,双引号里是具体参数
userdb=C:\\Users\\...\\users.txt 告诉脚本「用户名字典文件」的路径:文件里存着要尝试的所有用户名
passdb=C:\\Users\\...\\pass.txt 告诉脚本「密码字典文件」的路径:文件里存着要尝试的所有密码
117.72.201.198 目标主机 IP:指定要测试的目标主机地址

必须合法授权!

只能测试自己的主机、或明确获得对方授权的主机,非法爆破他人设备是违法行为


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Archive PDF预览 PPTX Obsidian