第一届好靶场MISC-FTP流量分析

第一届好靶场MISC-FTP流量分析

FTP流量分析

FTP流量分析

概念

FTP(文件传输协议,File Transfer Protocol)流量是指在网络中,客户端与服务器之间为了传输文件和管理目录而产生的网络数据包集合。

它是TCP/IP模型中的应用层(Application Layer)*协议,底层依赖于传输层的*TCP协议来提供可靠的数据传输服务。

FTP的核心功能

FTP主要用于在不同主机之间共享和管理文件,屏蔽了不同操作系统之间的底层文件组织差异。它的核心功能包括:

  • 文件传输: 支持将文件从远程服务器下载到本地(Download),或将本地文件上传到服务器(Upload)。
  • 目录管理: 允许客户端在远程服务器上浏览目录列表,以及创建、删除、重命名文件和文件夹。
  • 身份认证与控制: 支持基于用户名和密码的访问控制(传统FTP为明文验证)。同时支持配置“匿名(Anonymous)”访问模式供公共文件下载。
  • 断点续传: 在网络波动导致传输中断时,支持从上次中断的位置继续传输文件,无需从头开始。
  • 连接类型默认端口作用
    控制连接 (Control Connection)TCP 21用于传输FTP命令和服务器响应(如登录请求、切换目录命令)。这条连接在整个FTP会话期间始终保持开启。
    数据连接 (Data Connection)TCP 20 (主动模式) 或 随机高位端口 (被动模式)专门用于实际传输文件数据或目录列表内容。每当需要传输文件时临时建立,传输完毕后立即断开。

工作模式:主动与被动

FTP 的数据通道建立方式有两种,这往往也是网络配置中最容易踩坑的地方(尤其是在有防火墙和 NAT 的环境中):

  • 主动模式 (Active Mode,PORT): 客户端开放一个随机高位端口,并通过控制通道告诉服务器:“我的数据端口是 X,你来连我”。服务器端的主动发起会使用其 20 端口去连接客户端的 X 端口。
  • 被动模式 (Passive Mode,PASV): 客户端发送 PASV 命令,服务器开放一个随机高位端口并回复:“我的数据端口是 Y,你来连我”。客户端主动去连接服务器的 Y 端口进行数据传输。现代网络环境下,为了穿透客户端侧的 NAT 防火墙,通常默认使用被动模式。

Q1:攻击者的IP是什么?

shell
flag{192.168.39.88}

从协议中我们观察发现是TCP协议流量居多,然后发现FTP协议,FTP协议是用来传输协议使用的,如果攻击者进行扩大危害的话需要进行文件传输。

同时FTP的固定端口是22,我们可以去TCP端口查看哪个IP对22端口链接比较

点击放大,点击空白处返回
点击放大,点击空白处返回

发现192.168.39.88的不同端口向固定192.168.39.90:21发送数据

点击放大,点击空白处返回
点击放大,点击空白处返回

那我们就先去观察192.168.39.88这个IP和192.168.39.90互换了什么信息吧

shell
ip.addr == 192.168.39.88 && tcp.port == 21
点击放大,点击空白处返回
点击放大,点击空白处返回

先了解一下FTP的响应码吧

FTP响应码

位数含义
第 1 位状态:成功/失败/进行中
第 2 位功能分类:authentication / 文件操作 / 连接管理等
第 3 位更细的描述

提示: 所以你看到 230 的第一眼就应该反应:2xx = 成功,3xx = 进行中。

1xx:积极初步应答(还在处理中)
码含义
110新标记应答
120服务在 nnn 分钟后准备好
125数据连接已打开,开始传输
150文件状态正常,即将打开数据连接 ✅ 本包出现
2xx:成功(命令已执行)
码含义
200命令成功
202命令未实现,本站点不需要此命令
211系统状态或帮助应答
212目录状态
213文件状态
214帮助信息 ✅ 本包出现(HELP 命令回复)
215UNIX 系统类型 ✅ 本包出现(SYST 回复)
220服务就绪,欢迎信息 ✅ 本包出现
221服务关闭控制连接
225数据连接打开,无传输
226关闭数据连接,传输完成 ✅ 本包出现(LIST/RETR 完成)
227进入被动模式(IP/Port 给出)
229进入扩展被动模式 ✅ 本包出现(EPSV)
230用户登录成功 ✅ 关键信号!
231用户注销
232登录需要安全机制
234安全认证完成
250目录操作成功 ✅ 本包出现(CWD 成功)
257路径名建立
3xx:积极中间应答(还需进一步输入)
码含义
331用户名正确,需要密码 ✅ 本包大量出现
332需要登录账户
334需要安全机制
335代理认证需要用户名
336用户名需要代理认证
350需要更多信息
4xx:临时负应答(可重试)
码含义
421服务不可用/超时断开 ✅ 本包出现(长时间无操作)
425无法打开数据连接
426连接关闭,传输中止
430无效的用户名或密码
431需要足够空间
434请求的主机不可用
450请求的文件操作未执行
451处理请求时出现本地错误
452写入文件时空间不足
5xx:永久负应答(不可重试)
码含义
500语法错误,命令不可识别
501参数语法错误
502命令未实现
503命令顺序错误
530登录失败/未登录 ✅ 本包大量出现(暴力破解失败的标志)
532存储文件需要账户
550请求操作未执行,文件不可用
551请求操作中止,页类型未知
552超出存储分配
553文件名不允许
核心关键记忆点

在这个包里,你只需要重点记住以下 5 个状态码:

  • 220 = 服务器上线了
  • 331 = 用户名对了,给密码
  • 230 = 登录成功 ✅(关键)
  • 530 = 登录失败 ❌(关键)
  • 226 = 下载完成

那我们就去看看FTP响应码230:用户登录成功 吧

shell
ftp.response.code == 230
点击放大,点击空白处返回
点击放大,点击空白处返回

我们追踪一下流数据吧,看看发生了什么事件

点击放大,点击空白处返回
点击放大,点击空白处返回

第一个流:追踪流数据

表明

USER ftpuser

密码是ftp@2026

同时也可以知道了攻击者是192.168.39.88


Q2:攻击者对哪个网段进行了存活探测?发现了多少台存活主机?

格式:IP/网段,存活主机数

flag
flag{192.168.39.0/24,7}

这个和SSH流量分析的Q3一样,了解ARP就可以知道使用这个指令

shell
tshark -r "./hbcb01_FTP.pcapng" -Y "arp.opcode == 1 and arp.src.proto_ipv4 == 192.168.39.88" -T fields -e arp.dst.proto_ipv4 | sort -V -u
点击放大,点击空白处返回
点击放大,点击空白处返回

观察可以发现是从0扫到了255,所以网段是192.168.39.0/24

点击放大,点击空白处返回
点击放大,点击空白处返回

存活主机数

这个题了好靶场-SSH的流量分析不同在于

攻击者存活主机探测使用了什么协议共发现多少台存活主机(SSH) 攻击者对哪个网段进行了存活探测?发现了多少台存活主机?(本题)

第一个问使用这个协议发现了多少个主机,包含攻击者自己(因为自己也是在那个网段)

第二个是问除去自己还有多少个主机,一个字只差就是共

shell
tshark -r "./hbcb01_FTP.pcapng" -Y "arp.opcode == 2 and arp.dst.proto_ipv4 == 192.168.39.88" -T fields -e arp.src.proto_ipv4 | sort -u
点击放大,点击空白处返回
点击放大,点击空白处返回

发现主机数量为7


Q3:受害者服务器开放了哪些常见的端口?

shell
flag{21,135,139,445,5985}
markdown
ip.addr == 192.168.39.90    → 只看涉及 192.168.39.90 的包(不管源还是目的)
&&                          → 而且(同时满足)
tcp.flags.syn == 1          → TCP 的 SYN 标志位为 1
&&                          → 而且
tcp.flags.ack == 0          → TCP 的 ACK 标志位为 0

组合起来是什么?

SYN=1, ACK=0 是 TCP 三次握手的第一个包(客户端发起的连接请求)。

所以这条过滤找的是:别人向 192.168.39.90 发起的所有 TCP 连接请求。

看这些连接请求发到了哪个目标端口,就能知道受害者开放了哪些端口。

tcp标志位

TCP 三次握手

当客户端要连接服务器的某个端口时,发生以下三步:

Plaintext
客户端                                服务器
  |                                   |
  |-------- SYN (seq=x) -------->     |  第1步:客户端发请求(SYN=1)
  |                                   |
  |<---- SYN+ACK (seq=y, ack=x+1)-----|  第2步:服务器同意连接(SYN=1, ACK=1)
  |                                   |
  |-------- ACK (ack=y+1) ------>     |  第3步:客户端确认(ACK=1)
  |                                   |
  连接建立成功 ✅

当客户端要连接服务器的某个端口时,发生以下三步:

Plaintext
客户端                                服务器
  |                                   |
  |-------- SYN (seq=x) -------->     |  第1步:客户端发请求(SYN=1)
  |                                   |
  |<---- SYN+ACK (seq=y, ack=x+1)-----|  第2步:服务器同意连接(SYN=1, ACK=1)
  |                                   |
  |-------- ACK (ack=y+1) ------>     |  第3步:客户端确认(ACK=1)
  |                                   |
  连接建立成功 ✅

每个包里的 TCP 标志位(Flags) 告诉对方"这个包是干什么的":

标志含义出现时机
SYN同步序列号,请求建立连接第1步、第2步
ACK确认收到对方数据第2步、第3步
RST强制断开/拒绝连接端口关闭时
FIN正常结束连接关闭连接时

SYN=1 + ACK=0 → 只能是三次握手的第1步 → 别人在尝试连接受害者。

这些连接请求发到了哪个端口,就说明攻击者在探测哪个端口。

那判断"哪些端口开放了"用哪个过滤?

看第2步——服务器回复了 SYN+ACK 的包:

tcp.flags.syn == 1 && tcp.flags.ack == 1 && ip.src == 192.168.39.90

条件含义
ip.src == 192.168.39.90受害者发出的包
tcp.flags.syn == 1 && tcp.flags.ack == 1它在回应别人的连接请求(同意连接)
shell
tshark -r "./hbcb01_FTP.pcapng" -Y "tcp.flags.syn == 1 && tcp.flags.ack == 1 && ip.src == 192.168.39.90" -T fields -e tcp.srcport | sort -n -u
点击放大,点击空白处返回
点击放大,点击空白处返回

常见的服务端口

端口服务/协议说明
21FTP文件传输
22SSH远程安全登录(Linux)
23Telnet远程登录(明文,不安全)
25SMTP邮件发送
53DNS域名解析
80HTTP网页服务
110POP3邮件接收
135RPC(远程过程调用)Windows 服务管理
137/138/139NetBIOSWindows 网络邻居/共享(旧)
443HTTPS加密网页
445SMB(文件共享)Windows 文件共享/打印机共享
1433MSSQLSQL Server 数据库
3306MySQLMySQL 数据库
3389RDPWindows 远程桌面
5985WinRM(HTTP)Windows 远程管理(PowerShell 远程)
5986WinRM(HTTPS)WinRM 加密版本

回到数据

  • 21 → FTP(已确认)
  • 135 → RPC
  • 139 → NetBIOS 会话服务
  • 445 → SMB(文件共享)
  • 5985 → WinRM

这几个全是 Windows 服务器的典型端口,结合之前看到的 FileZilla Server 中文版,受害者是一台 Windows 服务器。

所以第三题的答案就是:受害者(192.168.39.90)开放的常见端口有 21(FTP)、135(RPC)、139(NetBIOS)、445(SMB)、5985(WinRM),共 5 个。


Q4:受害者的FTP服务和软件版本是什么?

sh
flag{FileZilla Server 0.9.60 beta}

这个我们在追踪FTP第一次链接的时候就可以发现220响应

点击放大,点击空白处返回
点击放大,点击空白处返回
点击放大,点击空白处返回
点击放大,点击空白处返回

Q5:攻击者在暴力破解前使用 Nmap 脚本探测了 FTP 匿名登录,尝试的用户名是什么?

shell
flag{anonymous}

仔细看的话应该可以在FTP协议中看到这一行No.3193中的info

点击放大,点击空白处返回
点击放大,点击空白处返回

Nmap 的 ftp-anon.nse 脚本有几个特征,可以帮判断"这是脚本不是人在操作":

  • 整个会话只有 USER + PASS 两条命令 → 登录完就走了,不 LIST 不 CWD
  • 用户名 anonymous(FTP 匿名登录的标准用户名)
  • 连接后得到结果就断开,不再有后续操作
  • 不像是人手动操作(人不会只试一次 anonymous 就走了)

Nmap 的 ftp-anon 脚本也常用一些固定密码


Q6:攻击者使用了什么工具进行暴力破解?

shell
flag{Hydra}

这个是CTF常用的,没有更多依据了,仅仅是并发连接特征

  • 4 路并发 → Hydra 默认 -t 16,但可以用 -t 4 控制
  • 固定用户名 → Hydra 的 -l 参数
  • 字典逐个试 → Hydra 的 -P 参数
    点击放大,点击空白处返回
    点击放大,点击空白处返回

格式:数量|文件名

shell
flag{5|README.txt,华章科技-2026年6月薪资明细.pdf,华章科技-2026年Q2财务报告.pdf,华章科技-内部系统凭据清单.pdf,华章科技-山东政务项目投标方案.pdf}

FTR-RETR是文件下载含义

shell
ftp.request.command == "RETR"

image-20260730135708699

也就是追踪第三个FTP-230流也可以发现这个信息

image-20260730140708960


Q11:攻击者下载 PDF 前切换了什么传输模式?

text
flag{BINARY}

FTP传输模式

命令模式用途
TYPE AASCII文本文件(换行符转换)
TYPE IImage/Binary二进制文件(PDF、图片、压缩包等)
TYPE EEBCDICIBM 大型机编码
点击放大,点击空白处返回
点击放大,点击空白处返回
点击放大,点击空白处返回
点击放大,点击空白处返回

PDF 是二进制文件,如果用 ASCII 模式传输会被破坏(换行符被转换导致文件损坏),所以下载前必须切到 TYPE I(二进制模式)。


Q12:被窃取的财务报告中,公司 Q2 总营收是多少?

shell
flag{8743.2}

如何提取FTP文件呢?

在wireshark中选择

text
文件->导出对象->FTP-data

image-20260730142834700


Q13:被窃取的薪资表中,CEO 王建国的月薪总额是多少?

shell
flag{110000}

什么时候我也月薪这样

image-20260730143008973


Q14:凭据文件中生产环境数据库主库的密码是什么?

shell
flag{PgMaster\#2026db}

image-20260730143253358


Q15:投标文件中该项目的投标总价是多少?

shell
flag{2350}

image-20260730144144695


Q16:被窃取的文件中隐藏的 flag 是什么?

shell
flag{420E8A8C540D4BE07F0221F46CCFB8EE}

image-20260730144253910

第一届好靶场MISC-SQL流量分析
第一届好靶场MISC-SSH流量分析

评论区

评论加载中...