<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>流量分析 on M15tak3のBlog</title>
    <link>https://blog.m15tak3.com/tags/%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90/</link>
    <description>Recent content from M15tak3のBlog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>skyman.soul@gmail.com (M15tak3)</managingEditor>
    <webMaster>skyman.soul@gmail.com (M15tak3)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Fri, 15 May 2026 18:30:00 +0800</lastBuildDate>
    
    
    <atom:link href="https://blog.m15tak3.com/tags/%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
      
    

    <item>
      <title>CTF 流量包</title>
      <link>https://blog.m15tak3.com/post/ctf%E6%B5%81%E9%87%8F%E5%8C%85/</link>
      <pubDate>Fri, 15 May 2026 18:30:00 &#43;0800</pubDate>
      <author>skyman.soul@gmail.com (M15tak3)</author>
      <guid>https://blog.m15tak3.com/post/ctf%E6%B5%81%E9%87%8F%E5%8C%85/</guid>
      <description>
        <![CDATA[<h1>CTF 流量包</h1><p>作者：M15tak3（skyman.soul@gmail.com）</p>
        
          <h1 id="ctf-流量包从-pcap-里把-flag-捞出来">
<a class="header-anchor" href="#ctf-%e6%b5%81%e9%87%8f%e5%8c%85%e4%bb%8e-pcap-%e9%87%8c%e6%8a%8a-flag-%e6%8d%9e%e5%87%ba%e6%9d%a5"></a>
CTF 流量包：从 PCAP 里把 flag 捞出来
</h1><p>CTF 里的流量包题，一般会给你一个 <code>.pcap</code>、<code>.pcapng</code> 或者压缩包，要求你从网络通信记录里找到 flag。<br>
这类题通常归在 Misc、Forensics 或者流量分析方向，核心不是背命令，而是还原“当时网络里发生了什么”。</p>
<p>简单来说，流量包题就是在问你：</p>
<blockquote>
<p>谁和谁通信了？用了什么协议？传了什么内容？有没有被编码、压缩、拆分或者隐藏？</p>
</blockquote>
<p>只要能按这个思路一步步排查，大多数入门到中等难度的流量题都能处理。</p>
<hr>
<h2 id="1-常用工具">
<a class="header-anchor" href="#1-%e5%b8%b8%e7%94%a8%e5%b7%a5%e5%85%b7"></a>
1. 常用工具
</h2><h3 id="11-wireshark">
<a class="header-anchor" href="#11-wireshark"></a>
1.1 Wireshark
</h3><p>Wireshark 是做流量包题最常用的图形化工具。<br>
它可以查看每一个数据包，也可以按协议、IP、端口、关键字进行过滤。</p>
<p>常用功能：</p>
<ul>
<li>查看协议统计</li>
<li>查看 IP 会话</li>
<li>过滤 HTTP、DNS、FTP、ICMP 等协议</li>
<li>追踪 TCP 流</li>
<li>导出 HTTP 传输文件</li>
<li>查看数据包中的明文内容</li>
</ul>
<p>打开流量包后，最常用的两个入口是：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Statistics -&gt; Protocol Hierarchy
</span></span><span class="line"><span class="cl">Statistics -&gt; Conversations
</span></span></code></pre></div><p>第一个用来看有哪些协议，第二个用来看哪些主机之间有通信。</p>
<h3 id="12-tshark">
<a class="header-anchor" href="#12-tshark"></a>
1.2 tshark
</h3><p><code>tshark</code> 是 Wireshark 的命令行版本，适合批量提取字段。</p>
<p>查看流量包基本内容：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap
</span></span></code></pre></div><p>查看 HTTP 请求：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap -Y <span class="s2">&#34;http.request&#34;</span>
</span></span></code></pre></div><p>提取 DNS 查询域名：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap -Y <span class="s2">&#34;dns.qry.name&#34;</span> -T fields -e dns.qry.name
</span></span></code></pre></div><p>提取 ICMP 数据字段：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap -Y <span class="s2">&#34;icmp&#34;</span> -T fields -e data
</span></span></code></pre></div><h3 id="13-strings">
<a class="header-anchor" href="#13-strings"></a>
1.3 strings
</h3><p><code>strings</code> 适合第一时间粗略搜索明文内容。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">strings traffic.pcap <span class="p">|</span> grep -i flag
</span></span><span class="line"><span class="cl">strings traffic.pcap <span class="p">|</span> grep -i password
</span></span><span class="line"><span class="cl">strings traffic.pcap <span class="p">|</span> grep -i admin
</span></span><span class="line"><span class="cl">strings traffic.pcap <span class="p">|</span> grep -i upload
</span></span></code></pre></div><p>如果题目比较简单，直接用 <code>strings</code> 就可能搜到 flag。<br>
如果搜不到，也可以通过关键词找到可疑请求、账号密码或者文件名。</p>
<h3 id="14-binwalk-和-foremost">
<a class="header-anchor" href="#14-binwalk-%e5%92%8c-foremost"></a>
1.4 binwalk 和 foremost
</h3><p>如果流量包里传输过图片、压缩包、文档等文件，可以尝试分离文件。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">binwalk traffic.pcap
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">foremost traffic.pcap
</span></span></code></pre></div><p>不过这类工具更适合作为辅助。做流量分析时，优先还是应该先看协议和会话。</p>
<hr>
<h2 id="2-拿到流量包后的基本流程">
<a class="header-anchor" href="#2-%e6%8b%bf%e5%88%b0%e6%b5%81%e9%87%8f%e5%8c%85%e5%90%8e%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%b5%81%e7%a8%8b"></a>
2. 拿到流量包后的基本流程
</h2><h3 id="21-先看题目描述">
<a class="header-anchor" href="#21-%e5%85%88%e7%9c%8b%e9%a2%98%e7%9b%ae%e6%8f%8f%e8%bf%b0"></a>
2.1 先看题目描述
</h3><p>题目描述往往会给方向，比如：</p>
<ul>
<li>“管理员登录时泄露了密码”</li>
<li>“黑客上传了一个文件”</li>
<li>“DNS 请求里藏着秘密”</li>
<li>“有人通过 ICMP 传输了 flag”</li>
<li>“还原键盘输入”</li>
<li>“找到攻击者下载的文件”</li>
</ul>
<p>如果题目提到 HTTP，就优先看 HTTP 请求和响应。<br>
如果题目提到 DNS，就优先提取域名。<br>
如果题目提到键盘，就考虑 USB HID 流量。<br>
如果题目提到上传、下载，就要注意文件导出。</p>
<p>很多时候，题目描述已经把最重要的协议告诉你了。</p>
<h3 id="22-看协议统计">
<a class="header-anchor" href="#22-%e7%9c%8b%e5%8d%8f%e8%ae%ae%e7%bb%9f%e8%ae%a1"></a>
2.2 看协议统计
</h3><p>在 Wireshark 中打开：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Statistics -&gt; Protocol Hierarchy
</span></span></code></pre></div><p>重点观察：</p>
<ul>
<li>有没有 HTTP、FTP、DNS、ICMP 等明文协议</li>
<li>有没有 USB、Bluetooth、802.11 等特殊流量</li>
<li>TCP、UDP 流量比例是否异常</li>
<li>是否存在 TLS 加密流量</li>
</ul>
<p>如果 HTTP 占比很高，大概率要看网页请求。<br>
如果 DNS 查询很多，而且域名看起来很长、很乱，就要怀疑 DNS 隐写。<br>
如果 ICMP 包很多，就要看 data 字段。<br>
如果出现 FTP，优先找明文账号密码和传输文件。</p>
<h3 id="23-看通信会话">
<a class="header-anchor" href="#23-%e7%9c%8b%e9%80%9a%e4%bf%a1%e4%bc%9a%e8%af%9d"></a>
2.3 看通信会话
</h3><p>打开：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Statistics -&gt; Conversations
</span></span></code></pre></div><p>重点关注：</p>
<ul>
<li>哪两个 IP 之间通信最多</li>
<li>是否有异常外部 IP</li>
<li>是否有大流量连接</li>
<li>是否出现可疑端口</li>
<li>是否有明显的上传或下载行为</li>
</ul>
<p>常见端口可以先记住这些：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">21    FTP
</span></span><span class="line"><span class="cl">22    SSH
</span></span><span class="line"><span class="cl">25    SMTP
</span></span><span class="line"><span class="cl">53    DNS
</span></span><span class="line"><span class="cl">80    HTTP
</span></span><span class="line"><span class="cl">110   POP3
</span></span><span class="line"><span class="cl">143   IMAP
</span></span><span class="line"><span class="cl">443   HTTPS
</span></span><span class="line"><span class="cl">3306  MySQL
</span></span><span class="line"><span class="cl">6379  Redis
</span></span></code></pre></div><p>如果发现某条 TCP 会话数据量特别大，很可能里面传了文件或者关键内容。</p>
<hr>
<h2 id="3-wireshark-常用过滤语法">
<a class="header-anchor" href="#3-wireshark-%e5%b8%b8%e7%94%a8%e8%bf%87%e6%bb%a4%e8%af%ad%e6%b3%95"></a>
3. Wireshark 常用过滤语法
</h2><p>做题时过滤器用得越熟，找线索越快。</p>
<h3 id="31-按协议过滤">
<a class="header-anchor" href="#31-%e6%8c%89%e5%8d%8f%e8%ae%ae%e8%bf%87%e6%bb%a4"></a>
3.1 按协议过滤
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http
</span></span><span class="line"><span class="cl">dns
</span></span><span class="line"><span class="cl">ftp
</span></span><span class="line"><span class="cl">icmp
</span></span><span class="line"><span class="cl">tcp
</span></span><span class="line"><span class="cl">udp
</span></span><span class="line"><span class="cl">usb
</span></span></code></pre></div><h3 id="32-按-ip-过滤">
<a class="header-anchor" href="#32-%e6%8c%89-ip-%e8%bf%87%e6%bb%a4"></a>
3.2 按 IP 过滤
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ip.addr == 192.168.1.10
</span></span><span class="line"><span class="cl">ip.src == 192.168.1.10
</span></span><span class="line"><span class="cl">ip.dst == 192.168.1.10
</span></span></code></pre></div><h3 id="33-按端口过滤">
<a class="header-anchor" href="#33-%e6%8c%89%e7%ab%af%e5%8f%a3%e8%bf%87%e6%bb%a4"></a>
3.3 按端口过滤
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">tcp.port == 80
</span></span><span class="line"><span class="cl">tcp.srcport == 8080
</span></span><span class="line"><span class="cl">tcp.dstport == 21
</span></span><span class="line"><span class="cl">udp.port == 53
</span></span></code></pre></div><h3 id="34-按关键字搜索">
<a class="header-anchor" href="#34-%e6%8c%89%e5%85%b3%e9%94%ae%e5%ad%97%e6%90%9c%e7%b4%a2"></a>
3.4 按关键字搜索
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">frame contains &#34;flag&#34;
</span></span><span class="line"><span class="cl">frame contains &#34;password&#34;
</span></span><span class="line"><span class="cl">frame contains &#34;admin&#34;
</span></span><span class="line"><span class="cl">frame contains &#34;ctf&#34;
</span></span></code></pre></div><p>如果是 HTTP，也可以写得更具体：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http contains &#34;flag&#34;
</span></span><span class="line"><span class="cl">http contains &#34;password&#34;
</span></span></code></pre></div><h3 id="35-查看某一条-tcp-流">
<a class="header-anchor" href="#35-%e6%9f%a5%e7%9c%8b%e6%9f%90%e4%b8%80%e6%9d%a1-tcp-%e6%b5%81"></a>
3.5 查看某一条 TCP 流
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">tcp.stream eq 0
</span></span><span class="line"><span class="cl">tcp.stream eq 1
</span></span><span class="line"><span class="cl">tcp.stream eq 2
</span></span></code></pre></div><p>右键某个 TCP 包：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Follow -&gt; TCP Stream
</span></span></code></pre></div><p>这是流量题里最常用的操作之一。<br>
因为单个数据包可能只是一小段内容，追踪 TCP 流才能看到完整请求和响应。</p>
<hr>
<h2 id="4-http-流量分析">
<a class="header-anchor" href="#4-http-%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90"></a>
4. HTTP 流量分析
</h2><p>HTTP 是最常见的流量题协议，因为它经常是明文。</p>
<h3 id="41-过滤-http-请求">
<a class="header-anchor" href="#41-%e8%bf%87%e6%bb%a4-http-%e8%af%b7%e6%b1%82"></a>
4.1 过滤 HTTP 请求
</h3><p>只看 HTTP：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http
</span></span></code></pre></div><p>只看 HTTP 请求：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http.request
</span></span></code></pre></div><p>只看 GET 请求：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http.request.method == &#34;GET&#34;
</span></span></code></pre></div><p>只看 POST 请求：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http.request.method == &#34;POST&#34;
</span></span></code></pre></div><p>POST 请求尤其值得关注，因为登录、提交表单、上传文件经常使用 POST。</p>
<h3 id="42-重点看哪些位置">
<a class="header-anchor" href="#42-%e9%87%8d%e7%82%b9%e7%9c%8b%e5%93%aa%e4%ba%9b%e4%bd%8d%e7%bd%ae"></a>
4.2 重点看哪些位置
</h3><p>HTTP 流量中常见线索位置：</p>
<ul>
<li>URL 参数</li>
<li>POST 表单</li>
<li>Cookie</li>
<li>Authorization 头</li>
<li>Referer</li>
<li>User-Agent</li>
<li>响应正文</li>
<li>文件上传内容</li>
<li>返回的压缩包、图片、脚本</li>
</ul>
<p>例如看到请求：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-http" data-lang="http"><span class="line"><span class="cl"><span class="nf">POST</span> <span class="nn">/login.php</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
</span></span><span class="line"><span class="cl"><span class="n">Host</span><span class="o">:</span> <span class="l">example.com</span>
</span></span><span class="line"><span class="cl"><span class="n">Content-Type</span><span class="o">:</span> <span class="l">application/x-www-form-urlencoded</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">username=admin&amp;password=YWRtaW4xMjM=
</span></span></code></pre></div><p><code>YWRtaW4xMjM=</code> 看起来像 Base64，解码后是：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">admin123
</span></span></code></pre></div><p>这类账号密码可能就是后续解压文件、登录后台或者提交 flag 的关键。</p>
<h3 id="43-导出-http-文件">
<a class="header-anchor" href="#43-%e5%af%bc%e5%87%ba-http-%e6%96%87%e4%bb%b6"></a>
4.3 导出 HTTP 文件
</h3><p>如果 HTTP 中传输了文件，可以在 Wireshark 中导出：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">File -&gt; Export Objects -&gt; HTTP
</span></span></code></pre></div><p>导出后检查文件类型：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">file suspicious_file
</span></span></code></pre></div><p>如果是压缩包，就尝试解压。<br>
如果是图片，就考虑图片隐写。<br>
如果是脚本，就查看源码。<br>
如果文件名、响应内容或注释里有奇怪字符串，也要尝试解码。</p>
<hr>
<h2 id="5-ftp-流量分析">
<a class="header-anchor" href="#5-ftp-%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90"></a>
5. FTP 流量分析
</h2><p>FTP 在 CTF 中非常友好，因为用户名、密码和命令很多时候都是明文。</p>
<p>过滤 FTP：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ftp
</span></span></code></pre></div><p>常见内容：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">USER admin
</span></span><span class="line"><span class="cl">PASS 123456
</span></span></code></pre></div><p>如果发现传输文件，继续看：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ftp-data
</span></span></code></pre></div><p>可以右键追踪 TCP 流，尝试还原传输内容。</p>
<p>FTP 题常见考点：</p>
<ul>
<li>找登录账号密码</li>
<li>找上传或下载的文件名</li>
<li>还原传输文件</li>
<li>从文件中继续解密或隐写分析</li>
</ul>
<hr>
<h2 id="6-dns-隐写分析">
<a class="header-anchor" href="#6-dns-%e9%9a%90%e5%86%99%e5%88%86%e6%9e%90"></a>
6. DNS 隐写分析
</h2><p>DNS 题经常把数据拆开放在子域名里。</p>
<p>过滤 DNS：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">dns
</span></span></code></pre></div><p>提取查询域名：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap -Y <span class="s2">&#34;dns.qry.name&#34;</span> -T fields -e dns.qry.name
</span></span></code></pre></div><p>可能会看到类似内容：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ZmxhZ3s.example.com
</span></span><span class="line"><span class="cl">ZG5zXw.example.com
</span></span><span class="line"><span class="cl">c2VjcmV0fQ.example.com
</span></span></code></pre></div><p>取出前面的子域名并拼接：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ZmxhZ3sZG5zXwc2VjcmV0fQ
</span></span></code></pre></div><p>然后尝试 Base64、Hex、URL 编码等方式解码。</p>
<p>DNS 隐写常见特征：</p>
<ul>
<li>子域名很长</li>
<li>域名由大量随机字符组成</li>
<li>多个请求的子域名可以拼接</li>
<li>出现明显的 Base64 字符集</li>
<li>查询频率异常高</li>
</ul>
<p>如果域名里出现 <code>-</code>、<code>_</code>、数字和大小写字母混合，也可以考虑 Base64 URL Safe 编码。</p>
<hr>
<h2 id="7-icmp-流量分析">
<a class="header-anchor" href="#7-icmp-%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90"></a>
7. ICMP 流量分析
</h2><p>ICMP 就是常见的 ping 协议。<br>
CTF 中经常把信息藏在 ICMP 的 data 字段里。</p>
<p>过滤 ICMP：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">icmp
</span></span></code></pre></div><p>提取 ICMP 数据：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r traffic.pcap -Y <span class="s2">&#34;icmp&#34;</span> -T fields -e data
</span></span></code></pre></div><p>如果得到的是十六进制字符串，例如：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">666c61677b69636d705f7365637265747d
</span></span></code></pre></div><p>可以用 Python 转换：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="s2">&#34;666c61677b69636d705f7365637265747d&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>输出：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">flag{icmp_secret}
</span></span></code></pre></div><p>ICMP 题要注意去重。<br>
因为 ping 通常有 request 和 reply，如果直接把所有 ICMP 数据都拼接，可能会重复一遍。</p>
<p>可以只看请求包：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">icmp.type == 8
</span></span></code></pre></div><p>或者只看响应包：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">icmp.type == 0
</span></span></code></pre></div><hr>
<h2 id="8-tcp-流追踪">
<a class="header-anchor" href="#8-tcp-%e6%b5%81%e8%bf%bd%e8%b8%aa"></a>
8. TCP 流追踪
</h2><p>TCP 流追踪是流量包题的核心操作。</p>
<p>在 Wireshark 中选中一个 TCP 包，右键：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Follow -&gt; TCP Stream
</span></span></code></pre></div><p>然后可以看到这条连接中完整的客户端和服务器通信。</p>
<p>如果想看不同 TCP 流，可以使用：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">tcp.stream eq 0
</span></span><span class="line"><span class="cl">tcp.stream eq 1
</span></span><span class="line"><span class="cl">tcp.stream eq 2
</span></span></code></pre></div><p>遇到下面这些情况，优先追踪 TCP 流：</p>
<ul>
<li>HTTP 请求内容显示不完整</li>
<li>FTP 传输文件</li>
<li>可疑端口上有大量数据</li>
<li>看到一部分 flag 或编码字符串</li>
<li>数据包被拆成很多段</li>
</ul>
<p>追踪 TCP 流后，可以切换显示方式：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ASCII
</span></span><span class="line"><span class="cl">Raw
</span></span><span class="line"><span class="cl">Hex Dump
</span></span></code></pre></div><p>如果要导出原始数据，可以选择 <code>Raw</code> 后保存。</p>
<hr>
<h2 id="9-usb-键盘流量分析">
<a class="header-anchor" href="#9-usb-%e9%94%ae%e7%9b%98%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90"></a>
9. USB 键盘流量分析
</h2><p>有些题给的不是网络流量，而是 USB 抓包。<br>
常见题型是还原键盘输入。</p>
<p>过滤 USB 数据：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">usb.capdata
</span></span></code></pre></div><p>提取字段：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tshark -r usb.pcap -T fields -e usb.capdata
</span></span></code></pre></div><p>键盘 HID 数据通常类似：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">00:00:04:00:00:00:00:00
</span></span><span class="line"><span class="cl">00:00:05:00:00:00:00:00
</span></span><span class="line"><span class="cl">00:00:06:00:00:00:00:00
</span></span></code></pre></div><p>第三个字节通常表示按键码。<br>
例如：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">04 -&gt; a
</span></span><span class="line"><span class="cl">05 -&gt; b
</span></span><span class="line"><span class="cl">06 -&gt; c
</span></span></code></pre></div><p>如果第一个字节是 <code>02</code> 或 <code>20</code>，通常表示按下了 Shift，需要转换成大写或符号。</p>
<p>USB 键盘题常见流程：</p>
<ol>
<li>提取 <code>usb.capdata</code></li>
<li>过滤空数据</li>
<li>取出按键码</li>
<li>根据 HID 键盘映射表还原字符</li>
<li>处理 Shift、Backspace、Enter 等特殊按键</li>
</ol>
<hr>
<h2 id="10-常见编码和解码思路">
<a class="header-anchor" href="#10-%e5%b8%b8%e8%a7%81%e7%bc%96%e7%a0%81%e5%92%8c%e8%a7%a3%e7%a0%81%e6%80%9d%e8%b7%af"></a>
10. 常见编码和解码思路
</h2><p>流量包里的 flag 不一定直接出现，经常会被编码。</p>
<h3 id="101-base64">
<a class="header-anchor" href="#101-base64"></a>
10.1 Base64
</h3><p>特征：</p>
<ul>
<li>常见字符是大小写字母、数字、<code>+</code>、<code>/</code></li>
<li>末尾可能有 <code>=</code></li>
<li>长度通常是 4 的倍数</li>
</ul>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ZmxhZ3t0ZXN0X2ZsYWd9
</span></span></code></pre></div><p>解码：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> ZmxhZ3t0ZXN0X2ZsYWd9 <span class="p">|</span> base64 -d
</span></span></code></pre></div><h3 id="102-hex">
<a class="header-anchor" href="#102-hex"></a>
10.2 Hex
</h3><p>特征：</p>
<ul>
<li>只包含 <code>0-9a-fA-F</code></li>
<li>长度通常是偶数</li>
</ul>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">666c61677b6865785f656e636f64657d
</span></span></code></pre></div><p>Python 解码：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;666c61677b6865785f656e636f64657d&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><h3 id="103-url-编码">
<a class="header-anchor" href="#103-url-%e7%bc%96%e7%a0%81"></a>
10.3 URL 编码
</h3><p>特征：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">%66%6c%61%67%7b%75%72%6c%7d
</span></span></code></pre></div><p>Python 解码：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="kn">import</span> <span class="n">unquote</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">unquote</span><span class="p">(</span><span class="s2">&#34;</span><span class="si">%66%</span><span class="s2">6c</span><span class="si">%61%</span><span class="s2">67%7b</span><span class="si">%75%</span><span class="s2">72</span><span class="si">%6c%7d</span><span class="s2">&#34;</span><span class="p">))</span>
</span></span></code></pre></div><h3 id="104-压缩数据">
<a class="header-anchor" href="#104-%e5%8e%8b%e7%bc%a9%e6%95%b0%e6%8d%ae"></a>
10.4 压缩数据
</h3><p>如果看到文件头或数据特征，可以考虑压缩：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">1f 8b       gzip
</span></span><span class="line"><span class="cl">78 9c       zlib
</span></span><span class="line"><span class="cl">50 4b       zip
</span></span><span class="line"><span class="cl">89 50 4e 47 png
</span></span><span class="line"><span class="cl">ff d8 ff    jpg
</span></span></code></pre></div><p>做题时要对 magic bytes 敏感。<br>
有时候流量里传输的是文件内容，但是后缀名可能是假的。</p>
<hr>
<h2 id="11-一个通用排查清单">
<a class="header-anchor" href="#11-%e4%b8%80%e4%b8%aa%e9%80%9a%e7%94%a8%e6%8e%92%e6%9f%a5%e6%b8%85%e5%8d%95"></a>
11. 一个通用排查清单
</h2><p>拿到流量包后，可以按这个顺序做：</p>
<ol>
<li>看题目描述，判断可能协议。</li>
<li>用 <code>strings</code> 搜索 <code>flag</code>、<code>admin</code>、<code>password</code>、<code>ctf</code>。</li>
<li>用 Wireshark 看 <code>Protocol Hierarchy</code>。</li>
<li>用 <code>Conversations</code> 找大流量会话。</li>
<li>过滤 HTTP、FTP、DNS、ICMP 等常见协议。</li>
<li>对可疑 TCP 连接执行 <code>Follow TCP Stream</code>。</li>
<li>如果有 HTTP 文件传输，使用 <code>Export Objects</code> 导出。</li>
<li>对可疑字符串尝试 Base64、Hex、URL 编码。</li>
<li>对导出的文件继续做隐写、解压、脚本分析。</li>
<li>如果数据被拆分，用 tshark 提取字段后写脚本拼接。</li>
</ol>
<p>这个流程不一定每题都完整走一遍，但它能帮你避免一上来就乱翻包。</p>
<hr>
<h2 id="12-做题时的经验">
<a class="header-anchor" href="#12-%e5%81%9a%e9%a2%98%e6%97%b6%e7%9a%84%e7%bb%8f%e9%aa%8c"></a>
12. 做题时的经验
</h2><h3 id="121-不要只盯着-flag">
<a class="header-anchor" href="#121-%e4%b8%8d%e8%a6%81%e5%8f%aa%e7%9b%af%e7%9d%80-flag"></a>
12.1 不要只盯着 flag
</h3><p>很多题不会直接出现 <code>flag{}</code>。<br>
它可能先给你一个密码、一个压缩包、一个图片、一个脚本或者一个 key。</p>
<p>所以除了搜索 <code>flag</code>，还要搜索：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">admin
</span></span><span class="line"><span class="cl">password
</span></span><span class="line"><span class="cl">pass
</span></span><span class="line"><span class="cl">login
</span></span><span class="line"><span class="cl">upload
</span></span><span class="line"><span class="cl">download
</span></span><span class="line"><span class="cl">secret
</span></span><span class="line"><span class="cl">key
</span></span><span class="line"><span class="cl">token
</span></span><span class="line"><span class="cl">ctf
</span></span></code></pre></div><h3 id="122-数据量大的连接优先看">
<a class="header-anchor" href="#122-%e6%95%b0%e6%8d%ae%e9%87%8f%e5%a4%a7%e7%9a%84%e8%bf%9e%e6%8e%a5%e4%bc%98%e5%85%88%e7%9c%8b"></a>
12.2 数据量大的连接优先看
</h3><p>如果某条 TCP 连接明显比其他连接大，里面很可能传了文件。<br>
这种连接通常比零散的小请求更有价值。</p>
<h3 id="123-明文协议优先看">
<a class="header-anchor" href="#123-%e6%98%8e%e6%96%87%e5%8d%8f%e8%ae%ae%e4%bc%98%e5%85%88%e7%9c%8b"></a>
12.3 明文协议优先看
</h3><p>HTTP、FTP、DNS、ICMP 这类协议更容易出题。<br>
如果流量里存在这些协议，先分析它们，通常比一开始研究 TLS 更高效。</p>
<h3 id="124-看到异常长字符串就尝试解码">
<a class="header-anchor" href="#124-%e7%9c%8b%e5%88%b0%e5%bc%82%e5%b8%b8%e9%95%bf%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%b0%b1%e5%b0%9d%e8%af%95%e8%a7%a3%e7%a0%81"></a>
12.4 看到异常长字符串就尝试解码
</h3><p>CTF 题目里，异常长的字符串往往不是随机出现的。<br>
如果它出现在 URL、Cookie、POST 参数、DNS 子域名、ICMP data 字段中，就很值得拿出来解码。</p>
<h3 id="125-能脚本化就脚本化">
<a class="header-anchor" href="#125-%e8%83%bd%e8%84%9a%e6%9c%ac%e5%8c%96%e5%b0%b1%e8%84%9a%e6%9c%ac%e5%8c%96"></a>
12.5 能脚本化就脚本化
</h3><p>如果要拼接几百条 DNS 查询、ICMP 数据或者 USB 键盘输入，不要手工复制。<br>
用 <code>tshark</code> 提取字段，再用 Python 处理，会稳定很多。</p>
<hr>
<h2 id="13-总结">
<a class="header-anchor" href="#13-%e6%80%bb%e7%bb%93"></a>
13. 总结
</h2><p>CTF 流量包题的的分析路线：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">题目描述 -&gt; 协议统计 -&gt; 会话分析 -&gt; 协议过滤 -&gt; TCP 流追踪 -&gt; 数据提取 -&gt; 编码解码 -&gt; 文件分析
</span></span></code></pre></div><p>遇到 HTTP，就看请求、响应、Cookie、POST 和文件导出。<br>
遇到 FTP，就找账号密码和传输文件。<br>
遇到 DNS，就提取域名并尝试拼接解码。<br>
遇到 ICMP，就看 data 字段。<br>
遇到 USB，就按 HID 键盘数据还原输入。</p>

        
        <hr><p>本文2026-05-15首发于<a href='https://blog.m15tak3.com/'>M15tak3のBlog</a>，最后修改于2026-05-15</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>CTF</category>
      
    </item>
    
  </channel>
</rss>
