<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>网络安全 on 知识带给我们自由</title>
    <link>https://yuexuan521.github.io/zh/tags/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/</link>
    <description>Recent content in 网络安全 on 知识带给我们自由</description>
    <image>
      <title>知识带给我们自由</title>
      <url>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en-us</language>
    <copyright>See this site&amp;rsquo;s source code here, licensed under GPLv3 ·</copyright>
    <lastBuildDate>Thu, 05 Mar 2026 12:00:00 +0000</lastBuildDate>
    <atom:link href="https://yuexuan521.github.io/zh/tags/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>实战指南：基于 HFish &#43; Python &#43; GitHub Pages 构建自动化威胁情报源</title>
      <link>https://yuexuan521.github.io/zh/posts/%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97%E5%9F%BA%E4%BA%8E-hfish--python--github-pages-%E6%9E%84%E5%BB%BA%E8%87%AA%E5%8A%A8%E5%8C%96%E5%A8%81%E8%83%81%E6%83%85%E6%8A%A5%E6%BA%90/</link>
      <pubDate>Thu, 05 Mar 2026 12:00:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97%E5%9F%BA%E4%BA%8E-hfish--python--github-pages-%E6%9E%84%E5%BB%BA%E8%87%AA%E5%8A%A8%E5%8C%96%E5%A8%81%E8%83%81%E6%83%85%E6%8A%A5%E6%BA%90/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/hacklcx/HFish/blob/master/docs/6-4-api.md&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;HFish API配置文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://yuexuan521.github.io/honeypot-blocklist/ip_list.txt&#34;&gt;威胁情报开源示例：ip_list&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/yuexuan521/honeypot-blocklist&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;honeypot-blocklist 项目地址&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;规划&#34;&gt;规划&lt;/h2&gt;
&lt;p&gt;蜜罐（Honeypot）最核心的特点是：&lt;strong&gt;没有任何正常的业务流量会访问它&lt;/strong&gt;。因此，凡是进入蜜罐的数据，本质上都是“可疑”或“恶意”的。这使得蜜罐收集到的数据具有&lt;strong&gt;极高的信噪比（高保真）&lt;/strong&gt;。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/hacklcx/HFish/blob/master/docs/6-4-api.md"target="_blank" rel="noopener noreferrer">HFish API配置文档</a></p>
<p><a href="https://yuexuan521.github.io/honeypot-blocklist/ip_list.txt">威胁情报开源示例：ip_list</a></p>
<p><a href="https://github.com/yuexuan521/honeypot-blocklist"target="_blank" rel="noopener noreferrer">honeypot-blocklist 项目地址</a></p>
<h2 id="规划">规划</h2>
<p>蜜罐（Honeypot）最核心的特点是：<strong>没有任何正常的业务流量会访问它</strong>。因此，凡是进入蜜罐的数据，本质上都是“可疑”或“恶意”的。这使得蜜罐收集到的数据具有<strong>极高的信噪比（高保真）</strong>。</p>
<p>蜜罐可以捕获攻击者的基础信息，将其转化为<strong>入侵指标（IOCs）</strong>：</p>
<ul>
<li><strong>攻击源 IP 地址</strong>：识别攻击者来自哪里（国家、ASN、代理池）。</li>
<li><strong>恶意哈希值（File Hash）</strong>：上传的恶意软件的 MD5/SHA256。</li>
<li><strong>恶意域名/URL</strong>：恶意软件回连的 C2（命令与控制）服务器地址。</li>
<li><strong>用途</strong>：将这些数据实时同步给防火墙（FW）、WAF 或入侵检测系统（IDS），实现“一处被攻，全网封禁”。</li>
</ul>
<p>本文即是实现将Hifsh蜜罐获得的攻击信息，通过使用其自带的 API 接口进行自动化提取，并利用 GitHub/Gitee Pages 进行分发。（提取简单的攻击源 IP 地址为例）</p>
<h3 id="架构设计">架构设计</h3>
<ol>
<li>
<p><strong>数据源</strong>：部署在内网或公网的 HFish 蜜罐。</p>
<p>部署教程：<a href="https://www.freebuf.com/articles/sectool/457499.html"target="_blank" rel="noopener noreferrer">云服务器搭建HFish蜜罐全流程 </a></p>
</li>
<li>
<p><strong>处理中心</strong>：一个运行 Python 脚本的中间服务器（可以是 HFish 本机）。</p>
</li>
<li>
<p><strong>发布平台</strong>：GitHub 或 Gitee（利用其 Pages 服务托管静态文本文件）。（ <a href="https://github.com/"target="_blank" rel="noopener noreferrer">GitHub</a> ）</p>
</li>
<li>
<p><strong>最终产物</strong>：一个公网可访问的 URL（例如 <a href="https://yuexuan521.github.io/honeypot-blocklist/ip_list.txt">https://yuexuan521.github.io/honeypot-blocklist/ip_list.txt</a>）。</p>
</li>
</ol>
<h2 id="第一步准备-hfish-api">第一步：准备 HFish API</h2>
<p>HFish 提供了 API 用于获取攻击数据。</p>
<ol>
<li>登录 HFish 管理后台。</li>
<li>进入 <strong>“系统设置” -&gt; “API 设置”</strong>。</li>
<li>获取 <strong>API Key</strong> 和 <strong>管理端地址</strong>。
<ul>
<li><em>注意：如果你的 HFish 在内网，确保运行脚本的机器能访问到 HFish 的管理端口（默认 4433）。</em></li>
</ul>
</li>
</ol>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719188.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719188.png" 
             alt="image-20251227102507885" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="第二步编写自动化提取脚本-python">第二步：编写自动化提取脚本 (Python)</h2>
<p>我们需要编写一个 Python 脚本，完成“拉取数据 -&gt; 过滤白名单 -&gt; 格式化 -&gt; 写入文件”的动作。</p>
<p>在 HFish 服务器或能访问 HFish 的机器上创建 /root/generate_feed.py：（需修改HFISH_HOST、API_KEY、OUTPUT_TXT的值，第10行）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">ipaddress</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">urllib3</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># ================= 配置区 =================</span>
</span></span><span class="line"><span class="cl"><span class="n">HFISH_HOST</span> <span class="o">=</span> <span class="s2">&#34;https://IP:4433&#34;</span>                       <span class="c1"># !!填写你的Hish网址!!</span>
</span></span><span class="line"><span class="cl"><span class="n">API_KEY</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>                                         <span class="c1"># !!填写你的Hish API Key!!</span>
</span></span><span class="line"><span class="cl"><span class="n">OUTPUT_TXT</span> <span class="o">=</span> <span class="s2">&#34;/root/threat-feed/ip_list.txt&#34;</span>         <span class="c1"># !!填写你保存文件的地址!!</span>
</span></span><span class="line"><span class="cl"><span class="n">TIME_WINDOW_HOURS</span> <span class="o">=</span> <span class="mi">24</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">LOCAL_WHITELIST</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;127.0.0.1&#34;</span><span class="p">,</span> <span class="s2">&#34;192.168.0.0/16&#34;</span><span class="p">,</span> <span class="s2">&#34;10.0.0.0/8&#34;</span><span class="p">,</span> <span class="s2">&#34;172.16.0.0/12&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;8.8.8.8&#34;</span><span class="p">,</span> <span class="s2">&#34;1.1.1.1&#34;</span><span class="p">,</span> <span class="s2">&#34;60.204.200.232&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">WHITELIST_URLS</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;bing&#34;</span><span class="p">:</span> <span class="s2">&#34;https://www.bing.com/toolbox/bingbot.json&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;github&#34;</span><span class="p">:</span> <span class="s2">&#34;https://api.github.com/meta&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =========================================</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">urllib3</span><span class="o">.</span><span class="n">disable_warnings</span><span class="p">(</span><span class="n">urllib3</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">InsecureRequestWarning</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">WhitelistManager</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">whitelist_cidrs</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="n">LOCAL_WHITELIST</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="bp">self</span><span class="o">.</span><span class="n">whitelist_cidrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_network</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">fetch_remote_whitelists</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[-] Fetching remote whitelists...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">url</span> <span class="ow">in</span> <span class="n">WHITELIST_URLS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">            <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">resp</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="n">resp</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="n">data</span> <span class="o">=</span> <span class="n">resp</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">                    <span class="n">prefixes</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">                    <span class="k">if</span> <span class="s2">&#34;prefixes&#34;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> <span class="n">prefixes</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;ipv4Prefix&#34;</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="s2">&#34;prefixes&#34;</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl">                    <span class="k">elif</span> <span class="s2">&#34;web&#34;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> <span class="n">prefixes</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;web&#34;</span><span class="p">,</span> <span class="p">[])</span>
</span></span><span class="line"><span class="cl">                    <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">prefixes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                        <span class="k">if</span> <span class="n">p</span> <span class="ow">and</span> <span class="s2">&#34;.&#34;</span> <span class="ow">in</span> <span class="n">p</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                            <span class="bp">self</span><span class="o">.</span><span class="n">whitelist_cidrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_network</span><span class="p">(</span><span class="n">p</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">is_whitelisted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ip_str</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">target</span> <span class="o">=</span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="n">ip_str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">network</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">whitelist_cidrs</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">network</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="kc">False</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_data</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">HFISH_HOST</span><span class="si">}</span><span class="s2">/api/v1/attack/ip?api_key=</span><span class="si">{</span><span class="n">API_KEY</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">end_time</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="n">start_time</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">TIME_WINDOW_HOURS</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">end_time</span> <span class="o">-</span> <span class="p">(</span><span class="n">TIME_WINDOW_HOURS</span> <span class="o">*</span> <span class="mi">3600</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;start_time&#34;</span><span class="p">:</span> <span class="n">start_time</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;end_time&#34;</span><span class="p">:</span> <span class="n">end_time</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;intranet&#34;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;threat_label&#34;</span><span class="p">:</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">resp</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;Content-Type&#39;</span><span class="p">:</span> <span class="s1">&#39;application/json&#39;</span><span class="p">},</span> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">resp</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[!] Request Error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">wl</span> <span class="o">=</span> <span class="n">WhitelistManager</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">wl</span><span class="o">.</span><span class="n">fetch_remote_whitelists</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="n">get_data</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span> <span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">raw_ips</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="s1">&#39;data&#39;</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">data_content</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[-] API Response Keys: </span><span class="si">{</span><span class="n">data_content</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;List Type&#39;</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_content</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="n">raw_ips</span> <span class="o">=</span> <span class="n">data_content</span>
</span></span><span class="line"><span class="cl">        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="s1">&#39;attack_ip&#39;</span> <span class="ow">in</span> <span class="n">data_content</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">raw_ips</span> <span class="o">=</span> <span class="n">data_content</span><span class="p">[</span><span class="s1">&#39;attack_ip&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">            <span class="k">elif</span> <span class="s1">&#39;list&#39;</span> <span class="ow">in</span> <span class="n">data_content</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">raw_ips</span> <span class="o">=</span> <span class="n">data_content</span><span class="p">[</span><span class="s1">&#39;list&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">            <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[!] Error: Unknown dict structure in &#39;data&#39;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="n">data_content</span><span class="p">)</span> <span class="c1"># 打印出来看看</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[!] Error: No &#39;data&#39; field. keys: </span><span class="si">{</span><span class="n">result</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</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="sa">f</span><span class="s2">&#34;[-] Raw IPs found: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">raw_ips</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">clean_ips</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">raw_ips</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">ip</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">ip</span> <span class="o">=</span> <span class="n">item</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">ip</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;source_ip&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">item</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;ip&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">item</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;attack_ip&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">ip</span> <span class="ow">and</span> <span class="s2">&#34;.&#34;</span> <span class="ow">in</span> <span class="n">ip</span> <span class="ow">and</span> <span class="s2">&#34;attack_ip&#34;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ip</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="ow">not</span> <span class="n">wl</span><span class="o">.</span><span class="n">is_whitelisted</span><span class="p">(</span><span class="n">ip</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="n">clean_ips</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ip</span><span class="p">)</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="sa">f</span><span class="s2">&#34;[-] Final Unique IPs: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">clean_ips</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">OUTPUT_TXT</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;# HFish Threat Feed</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;# Updated: </span><span class="si">{</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="n">clean_ips</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">ip</span><span class="si">}</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[-] Saved to </span><span class="si">{</span><span class="n">OUTPUT_TXT</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="第三步建立开源仓库-githubgitee">第三步：建立开源仓库 (GitHub/Gitee)</h2>
<ol>
<li>在 GitHub 上创建一个新仓库，例如 <code>honeypot-blocklist</code>。</li>
<li>在你的服务器上安装 Git，并克隆该仓库。（<code>yourusername</code>改成你的用户名）</li>
</ol>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># 在服务器上操作
</span></span><span class="line"><span class="cl">cd /root/
</span></span><span class="line"><span class="cl">git clone https://github.com/yourusername/honeypot-blocklist.git threat-feed
</span></span></code></pre></td></tr></table>
</div>
</div><p>修改上面的 Python 脚本配置，将输出路径指向这个 Git 目录。</p>
<h2 id="第四步自动化更新与推送-shell--crontab">第四步：自动化更新与推送 (Shell + Crontab)</h2>
<h3 id="1编写自动化-shell-脚本">1、编写自动化 Shell 脚本</h3>
<p>编写一个 Shell 脚本 update_feed.sh，将“生成”和“推送”结合起来：</p>
<ol>
<li>
<p>创建脚本文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">vim /root/update_feed.sh
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>写入以下内容：（需修改git user.name和user.email，推荐 ✅使用 GitHub 提供的隐私邮箱）</p>
<p><strong>GitHub隐私邮箱特点</strong>：既能保护你的真实邮箱不泄露，又能让 GitHub 识别出这是你的账号，给你的 GitHub 贡献墙（Contributions Graph）加“绿格子”。</p>
<ol>
<li>登录 GitHub，进入 <strong>Settings（设置）</strong> -&gt; <strong>Emails</strong>。</li>
<li>勾选 <strong>&ldquo;Keep my email addresses private&rdquo;</strong>。</li>
<li>你会看到一个类似这样的邮箱：12345678+你的用户名@users.noreply.github.com。</li>
</ol>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719189.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719189.png" 
             alt="image-20251228221426661" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>配置方法：</strong>（修改5. 配置 Git 身份）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">git config user.name &#34;你的GitHub用户名&#34;
</span></span><span class="line"><span class="cl">git config user.email &#34;12345678+你的用户名@users.noreply.github.com&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># ================= 配置路径 =================</span>
</span></span><span class="line"><span class="cl"><span class="nv">PY_SCRIPT</span><span class="o">=</span><span class="s2">&#34;/root/generate_feed.py&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">GIT_REPO</span><span class="o">=</span><span class="s2">&#34;/root/threat-feed&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">LOG_FILE</span><span class="o">=</span><span class="s2">&#34;/var/log/hfish_feed.log&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># ===========================================</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;-----------------------------------------------------&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;[</span><span class="k">$(</span>date<span class="k">)</span><span class="s2">] Starting update process...&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 1. 进入 Git 仓库目录 (这一步必须最先做)</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="nv">$GIT_REPO</span> <span class="o">||</span> <span class="o">{</span> <span class="nb">echo</span> <span class="s2">&#34;[Error] Cannot cd into </span><span class="nv">$GIT_REPO</span><span class="s2">&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span><span class="p">;</span> <span class="nb">exit</span> 1<span class="p">;</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. 【新增】先拉取远程更新 (防止 Push 冲突)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 这一步会把你在 GitHub 网页上改的 README 同步到本地</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;[-] Pulling remote changes...&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> git pull origin main &gt;&gt; <span class="nv">$LOG_FILE</span> 2&gt;<span class="p">&amp;</span>1<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;[Info] Git pull successful.&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># 如果 pull 失败（极少见），通常是因为冲突，记录日志但不退出，尝试强制覆盖</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;[Warn] Git pull failed (Conflict?). Will try to push anyway.&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. 执行 Python 提取 IP</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 注意：即使 git pull 失败了，我们也要生成新数据，因为数据才是核心</span>
</span></span><span class="line"><span class="cl">/usr/bin/python3 <span class="nv">$PY_SCRIPT</span> &gt;&gt; <span class="nv">$LOG_FILE</span> 2&gt;<span class="p">&amp;</span><span class="m">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 4. 检查文件是否生成</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">&#34;ip_list.txt&#34;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;[Error] ip_list.txt missing. Python script failed?&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 5. 配置 Git 身份</span>
</span></span><span class="line"><span class="cl">git config user.name <span class="s2">&#34;&#34;</span>                          //!!填写你的name和email!!
</span></span><span class="line"><span class="cl">git config user.email <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 6. 提交并推送</span>
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> git commit -m <span class="s2">&#34;Auto update: </span><span class="k">$(</span>date <span class="s2">&#34;+%Y-%m-%d %H:%M&#34;</span><span class="k">)</span><span class="s2">&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span> 2&gt;<span class="p">&amp;</span>1<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;[Info] Changes committed.&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># 尝试推送</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> git push origin main &gt;&gt; <span class="nv">$LOG_FILE</span> 2&gt;<span class="p">&amp;</span>1<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">         <span class="nb">echo</span> <span class="s2">&#34;[Success] Pushed to GitHub.&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span>
</span></span><span class="line"><span class="cl">         <span class="nb">echo</span> <span class="s2">&#34;[Error] Git Push failed. Retrying with --force...&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl">         <span class="c1"># 如果普通推送失败，尝试强制推送 (慎用，但在这种只增不减的情报源场景下是可行的)</span>
</span></span><span class="line"><span class="cl">         <span class="c1"># git push -f origin main &gt;&gt; $LOG_FILE 2&gt;&amp;1</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;[Info] No changes detected. Nothing to push.&#34;</span> &gt;&gt; <span class="nv">$LOG_FILE</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>赋予执行权限：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">chmod +x /root/update_feed.sh
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ol>
<hr>
<h3 id="2配置-ssh-免密推送关键">2、配置 SSH 免密推送（关键！）</h3>
<p>自动化脚本在后台运行时，无法输入 GitHub 的账号密码。你必须配置 <strong>SSH Key</strong>。</p>
<ol>
<li>
<p><strong>检查是否已有 Key</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ls ~/.ssh/id_rsa.pub
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>如果有文件，跳过第2步。</li>
<li>如果没有（报错），执行第2步。</li>
</ul>
</li>
<li>
<p><strong>生成 Key</strong>（一路回车即可）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh-keygen -t rsa -b 4096 -C &#34;hfish-feed&#34;
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>获取公钥</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">cat ~/.ssh/id_rsa.pub
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>复制输出的内容（以 ssh-rsa 开头的一长串）。</li>
</ul>
</li>
<li>
<p><strong>上传到 GitHub</strong>：</p>
<ul>
<li>
<p>打开 GitHub 仓库 -&gt; <strong>Settings</strong> -&gt; <strong>Deploy keys</strong> -&gt; <strong>Add deploy key</strong>。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719190.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719190.png" 
             alt="image-20251230120117688" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
<li>
<p><strong>Title</strong>: HFish Server</p>
</li>
<li>
<p><strong>Key</strong>: 粘贴刚才的内容。</p>
</li>
<li>
<p><strong>重要</strong>：勾选 <strong>Allow write access</strong>（允许写入权限），否则无法推送！</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719191.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719191.png" 
             alt="image-20251230120223456" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
</ul>
</li>
<li>
<p><strong>手动测试连接</strong>（必须做一次！）：
在服务器执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh -T git@github.com
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>输入 yes 确认指纹。</li>
<li>如果看到 Hi <code>&lt;username&gt;/&lt;repo&gt;!</code> You&rsquo;ve successfully authenticated&hellip;，说明通了。</li>
</ul>
</li>
<li>
<p><strong>修改仓库地址为 SSH</strong>（如果你之前是用 HTTPS clone 的）：
进入目录检查：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">cd /root/threat-feed
</span></span><span class="line"><span class="cl">git remote -v
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>
<p>如果显示 <a href="https://github.com/"target="_blank" rel="noopener noreferrer">https://github.com/</a>&hellip;，请执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">git remote set-url origin git@github.com:你的用户名/你的仓库名.git
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ul>
</li>
</ol>
<hr>
<h3 id="3手动测试全流程">3、手动测试全流程</h3>
<p>现在我们手动运行一次 Shell 脚本，看看能不能成功推送。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/root/update_feed.sh
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>检查结果：</strong></p>
<ol>
<li>看日志：tail -f /var/log/hfish_feed.log</li>
<li>看 GitHub 网页：刷新你的仓库，看看 ip_list.txt 更新时间是不是变成了 &ldquo;Just now&rdquo;。</li>
</ol>
<hr>
<h3 id="4设置定时任务-crontab">4、设置定时任务 (Crontab)</h3>
<p>确认手动运行没问题后，最后一步是让它自动跑。我们设置为 <strong>每 2 小时更新一次</strong>（既保证新鲜度，又不浪费资源）。</p>
<ol>
<li>
<p>编辑定时任务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">crontab -e
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>在文件末尾添加一行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># 每 2 小时的第 5 分钟执行一次 (错峰执行)
</span></span><span class="line"><span class="cl">5 */2 * * * /bin/bash /root/update_feed.sh
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>保存退出（如果是 vim，按 Esc 输入 :wq 回车）。</p>
</li>
</ol>
<hr>
<h2 id="第五步开源给他人使用">第五步：开源给他人使用</h2>
<p>现在，你的 GitHub 仓库中会有 ip_list.txt。你需要开启 <strong>GitHub Pages</strong> 功能（在仓库 Settings -&gt; Pages 中开启）。</p>
<ol>
<li>进入该仓库的 <strong>Settings</strong> (设置)。</li>
<li>在左侧侧边栏找到 <strong>Pages</strong>。</li>
<li>在 <strong>Build and deployment</strong> 下的 <strong>Source</strong> 选择 Deploy from a branch。</li>
<li>在 <strong>Branch</strong> 处选择 main (或 master) 分支，文件夹选择 / (root)。</li>
<li>点击 <strong>Save</strong>。</li>
</ol>
<p>一旦开启，你就得到了一个全球可访问的永久直链，例如：
<a href="https://yourusername.github.io/honeypot-blocklist/ip_list.txt"target="_blank" rel="noopener noreferrer">https://yourusername.github.io/honeypot-blocklist/ip_list.txt</a></p>
<p>等待 1-2 分钟后，GitHub 会生成页面，别人只需要订阅这个以 .txt 结尾的 URL 即可。</p>
<p>别人可以这样使用我们的数据：</p>
<ol>
<li><strong>PaloAlto/Fortinet 防火墙</strong>：创建一个 &ldquo;External Dynamic List&rdquo;，填入你的 URL。</li>
<li><strong>Linux 服务器</strong>：写个脚本 wget 你的文件并导入 ipset。</li>
</ol>
<p><strong>效果展示：</strong></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719192.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305220719192.png" 
             alt="image-20251230120659771" 
              
             loading="lazy"
        />
    </a>
</div></p>
]]></content:encoded>
    </item>
    <item>
      <title>云服务器搭建HFish蜜罐全流程 &amp; 报告导出无法打开问题解决方法 </title>
      <link>https://yuexuan521.github.io/zh/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BAhfish%E8%9C%9C%E7%BD%90%E5%85%A8%E6%B5%81%E7%A8%8B-%E6%8A%A5%E5%91%8A%E5%AF%BC%E5%87%BA%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Thu, 05 Mar 2026 12:00:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BAhfish%E8%9C%9C%E7%BD%90%E5%85%A8%E6%B5%81%E7%A8%8B-%E6%8A%A5%E5%91%8A%E5%AF%BC%E5%87%BA%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>&lt;p&gt;闲来无事，用一台闲置的华为云服务器配置个HFish蜜罐，系统是CentOS 8。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310735.png&#34;&gt;
        &lt;img src=&#34;https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310735.png&#34; 
             alt=&#34;image-20251106181020300&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hfish.net/#/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;HFish蜜罐官网：https://hfish.net/#/&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>闲来无事，用一台闲置的华为云服务器配置个HFish蜜罐，系统是CentOS 8。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310735.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310735.png" 
             alt="image-20251106181020300" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><a href="https://hfish.net/#/"target="_blank" rel="noopener noreferrer">HFish蜜罐官网：https://hfish.net/#/</a></p>
<h2 id="蜜罐基础知识">蜜罐基础知识</h2>
<h3 id="蜜罐的定义">蜜罐的定义</h3>
<p>蜜罐是一种主动防御的欺骗技术，其核心思想是通过部署虚假的主机、服务或信息作为诱饵，诱导攻击者实施攻击。在此过程中，蜜罐能够记录攻击行为、分析攻击手法与工具，并推断攻击者的意图，从而帮助防御方更清晰地识别威胁，并针对性地提升真实系统的安全防护能力。[<a href="https://baike.baidu.com/item/%e8%9c%9c%e7%bd%90%e6%8a%80%e6%9c%af/9165942"target="_blank" rel="noopener noreferrer">蜜罐技术_百度百科</a>]</p>
<h3 id="蜜罐的优势">蜜罐的优势</h3>
<ol>
<li>误报率低，告警精准由于蜜罐本身不承载真实业务，正常情况下不应被访问，因此任何对其发起的连接或探测行为都具有较高的可疑性。相较于传统检测设备容易将正常业务请求误判为攻击的情况，蜜罐几乎不会产生误报，能够实现高度可信的安全告警。</li>
<li>深度交互，信息全面蜜罐可模拟多种业务服务甚至对攻击做出合理响应，从而与攻击者进行深度交互。这使得蜜罐能够获取从初始探测到后续攻击链的完整数据，实现对攻击行为的全流程捕获。尤其在SSL加密通信或工业控制等特殊场景中，蜜罐可有效伪装为目标系统，获取非解密的原始攻击载荷。</li>
<li>主动诱捕，生成威胁情报传统防护往往在攻击探测阶段即告结束，而蜜罐则能主动吸引攻击者深入交互，如诱使其上传恶意工具、连接C2服务器等。这些行为不仅被完整记录，还可进一步提取为高质量的本地威胁情报，赋能于IDS、防火墙等其他安全设备，实现对特定攻击手法（TTPs）的持续检测与预警。[<a href="https://xz.aliyun.com/news/13713"target="_blank" rel="noopener noreferrer">一篇文章带你搞懂蜜罐-先知社区</a>]</li>
<li>部署灵活，扩展性强蜜罐通常以软件形态存在，无需调整现有网络结构，即可灵活部署于物理网络、云环境或边缘节点。其轻量化的特性使其能够作为探针广泛分布于网络末端，将安全事件统一上报至态势感知平台，实现对全网威胁的可视化监控。</li>
</ol>
<h3 id="蜜罐与威胁情报">蜜罐与威胁情报</h3>
<p>蜜罐是高质量威胁情报的稳定来源。通过诱使攻击者暴露其攻击工具、基础设施与行为模式，结合其误报率低、信息详实的特性，蜜罐能够持续产出精准的私有威胁情报。这些情报可整合至本地安全分析平台，有效提升对新型攻击的预见性与防护能力。</p>
<h2 id="安装hfish蜜罐">安装HFish蜜罐</h2>
<p>如果部署的环境为Linux，且可以访问互联网，强烈建议使用一键部署脚本进行安装和配置，在使用一键脚本前，请先配置防火墙。</p>
<p>其它版本（及无网环境）安装指南：<a href="https://hfish.net/#/quick-deploy"target="_blank" rel="noopener noreferrer">https://hfish.net/#/quick-deploy</a></p>
<h3 id="配置防火墙">配置防火墙</h3>
<p>以root权限运行以下命令，确保配置防火墙开启TCP/4433、TCP/4434</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">firewall</span><span class="o">-</span><span class="n">cmd</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">4433</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">permanent</span>   <span class="c1">#（用于web界面启动）</span>
</span></span><span class="line"><span class="cl"><span class="n">firewall</span><span class="o">-</span><span class="n">cmd</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">4434</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">permanent</span>   <span class="c1">#（用于节点与管理端通信）</span>
</span></span><span class="line"><span class="cl"><span class="n">firewall</span><span class="o">-</span><span class="n">cmd</span> <span class="o">--</span><span class="n">reload</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310736.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310736.png" 
             alt="image-20251106162714128" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>可能提示需要开启防火墙，使用如下命令：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310737.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310737.png" 
             alt="image-20251106162510856" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">systemctl status firewalld
</span></span><span class="line"><span class="cl">systemctl start firewalld
</span></span><span class="line"><span class="cl">systemctl status firewalld
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310738.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310738.png" 
             alt="image-20251106162558843" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="一键部署hfish蜜罐">一键部署HFish蜜罐</h3>
<p>以root权限运行以下一键部署命令，输入“1”，安装并运行。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">bash &lt;(curl -sS -L https://hfish.net/webinstall.sh)
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310739.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310739.png" 
             alt="image-20251106162834638" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>出现下面提示，表示成功安装。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310740.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310740.png" 
             alt="image-20251106163213209" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="安装mysql">安装MySQL</h2>
<h3 id="使用-yum-安装">使用 yum 安装</h3>
<p>首先，尝试一下直接使用 yum 安装 MySQL</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">yum install mysql-community-server
</span></span></code></pre></td></tr></table>
</div>
</div><p>安装过程中，会提示让我们确认，一律输入 <code>y</code> 按回车即可</p>
<p>如果出现以下错误：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Loading mirror speeds from cached hostfile
</span></span><span class="line"><span class="cl">没有可用软件包 mysql-community-server。
</span></span><span class="line"><span class="cl">错误：无须任何处理
</span></span></code></pre></td></tr></table>
</div>
</div><p>表示我们没有添加安装包的源信息，需要安装 MySQL rpm 源信息</p>
<h3 id="安装-mysql-rpm-源信息">安装 MySQL rpm 源信息</h3>
<p>打开 <a href="https://link.zhihu.com/?target=http%3A//dev.mysql.com/downloads/repo/yum/"target="_blank" rel="noopener noreferrer">http://dev.mysql.com/downloads/repo/yum/</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310741.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310741.png" 
             alt="image-20251106180042285" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>根据你的系统版本，选择对应的安装包，例如我的是CentOS 7.5，这个系统的Linux内核是 Linux 7，所以我选择了红框内的地址，大家依次类推。</p>
<p>拼接下载地址头：<a href="https://link.zhihu.com/?target=http%3A//dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm"target="_blank" rel="noopener noreferrer">http://dev.mysql.com/get/</a>，得到以下地址</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"> CentOS 7
</span></span><span class="line"><span class="cl"> http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
</span></span><span class="line"><span class="cl"> CentOS 8
</span></span><span class="line"><span class="cl"> http://dev.mysql.com/get/mysql84-community-release-el8-2.noarch.rpm
</span></span></code></pre></td></tr></table>
</div>
</div><p>使用 wget + 刚才拼接的地址，下载安装包源信息</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">CentOS 7
</span></span><span class="line"><span class="cl">wget  http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
</span></span><span class="line"><span class="cl">CentOS 8
</span></span><span class="line"><span class="cl">wget http://dev.mysql.com/get/mysql84-community-release-el8-2.noarch.rpm
</span></span></code></pre></td></tr></table>
</div>
</div><p>rpm 安装源信息</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">CentOS 7
</span></span><span class="line"><span class="cl">rpm -ivh mysql80-community-release-el7-7.noarch.rpm
</span></span><span class="line"><span class="cl">CentOS 8
</span></span><span class="line"><span class="cl">rpm -ivh mysql84-community-release-el8-2.noarch.rpm
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="禁用-mysql-模块">禁用 MySQL 模块</h3>
<p>如果还是出现错误，需要禁用默认启用的 MySQL 模块。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">yum module disable mysql
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310742.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310742.png" 
             alt="image-20251106171221748" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="再次安装">再次安装</h3>
<p>再尝试使用 yum 安装MySQL</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">yum install mysql-community-server
</span></span></code></pre></td></tr></table>
</div>
</div><p>安装过程中，会提示让我们确认，一律输入 <code>y</code> 按回车即可</p>
<h3 id="检查安装是否成功">检查安装是否成功</h3>
<p>检查一下刚才的安装是否成功</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">rpm -qa | grep mysql
</span></span></code></pre></td></tr></table>
</div>
</div><p>输出：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">mysql-community-libs-compat-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql-community-icu-data-files-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql80-community-release-el7-7.noarch
</span></span><span class="line"><span class="cl">mysql-community-common-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql-community-libs-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql-community-server-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql-community-client-8.0.33-1.el7.x86_64
</span></span><span class="line"><span class="cl">mysql-community-client-plugins-8.0.33-1.el7.x86_64
</span></span></code></pre></td></tr></table>
</div>
</div><p>输出类似以上内容，表示安装完成</p>
<h3 id="登录和修改密码">登录和修改密码</h3>
<p>我们安装的时候，并没有设置初始密码</p>
<p>所以 mysql 在第一次启动的时候，会自动初始化一个密码</p>
<p>通过以下这行代码，我们可以查看 mysql 自动初始化的密码：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># 第一次启动后，可以查看mysql初始化密码
</span></span><span class="line"><span class="cl">grep &#39;temporary password&#39; /var/log/mysqld.log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">输出（root@localhost: 后面的是密码）：
</span></span><span class="line"><span class="cl">2023-04-21T06:03:27.071550Z 6 [Note] [MY-010454] [Server] A temporary password
</span></span><span class="line"><span class="cl">is generated for root@localhost: r2to%yZ%a)%s
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="登录">登录</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># 登录mysql，一定要注意：-p和&#39;密码&#39;之间是没有空格的
</span></span><span class="line"><span class="cl">mysql -u root -p&#39;r2to%yZ%a)%s&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="修改-root-密码">修改 root 密码</h3>
<p>注意了，默认的密码策略，需要：大写英文 + 特殊字符 + 数字</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;Root_123&#39;;
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="创建需要的hfish数据库">创建需要的HFish数据库</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">CREATE DATABASE HFish001;
</span></span><span class="line"><span class="cl">show databases;
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310743.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310743.png" 
             alt="image-20251106172357982" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="登录web界面">登录Web界面</h2>
<p>华为云服务器需要添加一条安全组规则，允许访问4433端口</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310745.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310745.png" 
             alt="image-20251106181213291" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>完成安装后，通过以下网址、账号密码登录</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">登陆链接：https://[ip]:4433/web/
</span></span><span class="line"><span class="cl">账号：admin
</span></span><span class="line"><span class="cl">密码：HFish2021
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果管理端的IP是192.168.1.1，则登陆链接为：https://192.168.1.1:4433/web/</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">注意：访问管理端的URL中必须有/web/目录
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310746.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310746.png" 
             alt="image-20251106175157010" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>初次配置需要选择数据库，端口默认3306，数据库名：HFish001，用户名密码为MySQL的数据库密码</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310747.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310747.png" 
             alt="image-20251106164928890" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>配置成功，等待重启</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310748.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310748.png" 
             alt="image-20251106172526860" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>看到下方的管理界面</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310749.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310749.png" 
             alt="image-20251106172711580" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="配置蜜罐服务">配置蜜罐服务</h2>
<p>选择“节点管理”，可以配置蜜罐服务</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310750.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310750.png" 
             alt="image-20251107113140322" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>华为云服务器需要相应添加安全组规则，开放端口</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310751.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310751.png" 
             alt="image-20251107113313689" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>CentOS内的firewall也需要开放相应端口</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="err">安全组规则：</span><span class="mi">8080</span><span class="p">,</span><span class="mi">9215</span><span class="p">,</span><span class="mi">6379</span><span class="p">,</span><span class="mi">9200</span><span class="p">,</span><span class="mi">9000</span><span class="p">,</span><span class="mi">8081</span><span class="p">,</span><span class="mi">135</span><span class="p">,</span><span class="mi">139</span><span class="p">,</span><span class="mi">445</span><span class="p">,</span><span class="mi">1433</span><span class="p">,</span><span class="mi">3389</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">firewall</span><span class="o">-</span><span class="n">cmd</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">6379</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">9200</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">9000</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">8081</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">135</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">139</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">445</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">1433</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">3389</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">add</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">80</span><span class="o">/</span><span class="n">tcp</span> <span class="o">--</span><span class="n">permanent</span>    <span class="o">//</span><span class="n">firewall批量添加端口</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> <span class="n">firewall</span><span class="o">-</span><span class="n">cmd</span> <span class="o">--</span><span class="n">reload</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>测试http://[ip]:[port]，相应的服务已经可以访问了</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310752.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310752.png" 
             alt="image-20251107113512203" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>稍等片刻，就可以看到攻击者的记录了</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310753.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310753.png" 
             alt="image-20251107113743753" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="其它配置">其它配置</h2>
<h3 id="配置白名单">配置白名单</h3>
<p>在系统配置内，选择“白名单配置”，填入自己的网段可以减少管理蜜罐时产生的误报</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310754.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310754.png" 
             alt="image-20251107114238724" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="数据大屏">数据大屏</h3>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310755.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310755.png" 
             alt="image-20251109152230667" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>其它功能详见HFish蜜罐功能手册：[<a href="https://hfish.net/#/README"target="_blank" rel="noopener noreferrer">快速了解HFish</a>]</p>
<h2 id="报告导出word无法打开问题解决">报告导出word无法打开问题解决</h2>
<p>我在使用HFish蜜罐导出自动生成的周报时遇到问题，下载下来的word（.docx）文件无法打开，显示错误如下。网上修复的方法试了很多，最后找到一种真正有效的方法。</p>
<p>可以在网站上预览：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310756.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310756.png" 
             alt="image-20251114220404344" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310757.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310757.png" 
             alt="image-20251114220427065" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>通过Word打开显示错误如下：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310758.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310758.png" 
             alt="image-20251114220224883" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310759.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310759.png" 
             alt="image-20251114220332844" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>我的Office版本为2021，2019版本也会遇到这个问题。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310760.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310760.png" 
             alt="562c9b288224fcba368ca2ae21f52afb" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="解决方法">解决方法：</h3>
<p>使用WPS可以正常打开下载下来的。或者用WPS另存为.doc文件后，word也可以正常打开。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310761.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20260305215310761.png" 
             alt="image-20251116223834022" 
              
             loading="lazy"
        />
    </a>
</div></p>
]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF zip 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-zip-1/</link>
      <pubDate>Thu, 20 Nov 2025 09:01:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-zip-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190415529.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190415529.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190417993.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190417993.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;拼在一起解下base64就有flag 注意：得到的 flag 请包上 flag{} 提交&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;hr&gt;
&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、将下载的压缩包解压，得到68个小压缩包，压缩包内部文件4个字节，符合CRC32爆破条件&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190415529.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190415529.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190417993.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190417993.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>拼在一起解下base64就有flag 注意：得到的 flag 请包上 flag{} 提交</p>
<h3 id="密文">密文：</h3>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、将下载的压缩包解压，得到68个小压缩包，压缩包内部文件4个字节，符合CRC32爆破条件</p>
<blockquote>
<p>注意：一般数据内容小于5Bytes(&lt;=4Bytes)即可尝试通过爆破CRC32穷举数据内容</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190419984.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190419984.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、使用CRC32爆破脚本尝试爆破第一个压缩包out0.zip，爆破成功得到文件内容 <code>z5Bz</code> ，根据题目提示，这是base64编码文件的一部分，需要将所有out*.zip压缩包的文件拼接才能拿到完整的文件

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190421759.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190421759.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>编写Python脚本进行自动化爆破，借鉴其他人的脚本</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1">#python3</span>
</span></span><span class="line"><span class="cl">import zipfile
</span></span><span class="line"><span class="cl">import string
</span></span><span class="line"><span class="cl">import binascii
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">def CrackCrc<span class="o">(</span>crc<span class="o">)</span>:
</span></span><span class="line"><span class="cl">	<span class="k">for</span> i in dic:
</span></span><span class="line"><span class="cl">		<span class="k">for</span> j in dic:
</span></span><span class="line"><span class="cl">			<span class="k">for</span> k in dic:
</span></span><span class="line"><span class="cl">				<span class="k">for</span> h in dic:
</span></span><span class="line"><span class="cl">					<span class="nv">s</span> <span class="o">=</span> i + j + k + h
</span></span><span class="line"><span class="cl">					<span class="k">if</span> <span class="nv">crc</span> <span class="o">==</span> <span class="o">(</span>binascii.crc32<span class="o">(</span>s.encode<span class="o">()))</span>:
</span></span><span class="line"><span class="cl">						f.write<span class="o">(</span>s<span class="o">)</span>
</span></span><span class="line"><span class="cl">						<span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">def CrackZip<span class="o">()</span>:
</span></span><span class="line"><span class="cl">	<span class="k">for</span> i in range<span class="o">(</span>0,68<span class="o">)</span>:
</span></span><span class="line"><span class="cl">		<span class="c1"># 压缩包文件路径</span>
</span></span><span class="line"><span class="cl">		<span class="nv">file</span> <span class="o">=</span> <span class="s1">&#39;out&#39;</span>+str<span class="o">(</span>i<span class="o">)</span>+<span class="s1">&#39;.zip&#39;</span>
</span></span><span class="line"><span class="cl">		<span class="nv">crc</span> <span class="o">=</span> zipfile.ZipFile<span class="o">(</span>file,<span class="s1">&#39;r&#39;</span><span class="o">)</span>.getinfo<span class="o">(</span><span class="s1">&#39;data.txt&#39;</span><span class="o">)</span>.CRC
</span></span><span class="line"><span class="cl">		CrackCrc<span class="o">(</span>crc<span class="o">)</span>
</span></span><span class="line"><span class="cl">		print<span class="o">(</span><span class="s1">&#39;\r&#39;</span>+<span class="s2">&#34;loading：{:%}&#34;</span>.format<span class="o">(</span>float<span class="o">((</span>i+1<span class="o">)</span>/68<span class="o">))</span>,end<span class="o">=</span><span class="s1">&#39;&#39;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">dic</span> <span class="o">=</span> string.ascii_letters + string.digits + <span class="s1">&#39;+/=&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nv">f</span> <span class="o">=</span> open<span class="o">(</span><span class="s1">&#39;out.txt&#39;</span>,<span class="s1">&#39;w&#39;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">print<span class="o">(</span><span class="s2">&#34;\nCRC32begin&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">CrackZip<span class="o">()</span>
</span></span><span class="line"><span class="cl">print<span class="o">(</span><span class="s2">&#34;CRC32finished&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">f.close<span class="o">()</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>运行脚本，得到out.txt文件</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA<span class="o">==</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190423301.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190423301.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、使用在线工具进行解密，看到解出的明文中有如下提示信息：
<a href="https://the-x.cn/encodings/Base64.aspx"target="_blank" rel="noopener noreferrer">Base64 在线解码、编码</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag.txt
</span></span><span class="line"><span class="cl">fix the file and get the flag
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190424904.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190424904.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>提示我们修复这个文件，可以拿到flag。文件尾与RAR文件尾一致（ <code>C4 3D 7B 00 40 07 00</code> ），可以确定为rar压缩包，但缺少文件头，需要补上缺失的文件头。

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190426964.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190426964.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="m">52</span> <span class="m">61</span> <span class="m">72</span> <span class="m">21</span> 1A <span class="m">07</span> <span class="m">00</span>   <span class="c1"># RAR文件头</span>
</span></span><span class="line"><span class="cl">C4 3D 7B <span class="m">00</span> <span class="m">40</span> <span class="m">07</span> <span class="m">00</span>   <span class="c1"># RAR文件尾</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>用010 Editor打开，补上文件头，另存为.rar文件。

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190429011.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190429011.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>最后在rar压缩包的注释中找到flag。

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190430981.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190430981.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>nev3r_enc0de_t00_sm4ll_fil3_w1th_zip<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [DDCTF2018]流量分析 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-ddctf2018%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90-1/</link>
      <pubDate>Tue, 11 Nov 2025 15:24:51 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-ddctf2018%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190910849.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190910849.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190912872.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190912872.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;得到的 flag 请包上 flag{} 提交。&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;p&gt;下载附件解压，得到流量分析.pcap和流量分析.txt&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190914452.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190914452.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、先看流量分析.txt，看hint二去pcap包里找 &lt;code&gt;“KEY”&lt;/code&gt; 。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190910849.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190910849.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190912872.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190912872.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。</p>
<h3 id="密文">密文：</h3>
<p>下载附件解压，得到流量分析.pcap和流量分析.txt</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190914452.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190914452.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、先看流量分析.txt，看hint二去pcap包里找 <code>“KEY”</code> 。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">流量分析
</span></span><span class="line"><span class="cl">200pt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">提示一：若感觉在中间某个容易出错的步骤，若有需要检验是否正确时，可以比较MD5: 90c490781f9c320cd1ba671fcb112d1c
</span></span><span class="line"><span class="cl">提示二：注意补齐私钥格式
</span></span><span class="line"><span class="cl">-----BEGIN RSA PRIVATE KEY-----
</span></span><span class="line"><span class="cl">XXXXXXX
</span></span><span class="line"><span class="cl">-----END RSA PRIVATE KEY-----
</span></span></code></pre></td></tr></table>
</div>
</div><p>搜索 <code>“KEY”</code> 。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tcp contains <span class="s2">&#34;KEY&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190916301.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190916301.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>追踪TCP流，找到一句话提到了密钥，最后大部分是一张图片的base64数据。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190918330.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190918330.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><a href="http://www.hiencode.com/quoted.html#:~:text=%E5%9C%A8%E7%BA%BFQuot"target="_blank" rel="noopener noreferrer">
Quoted-printable编码</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190919892.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190919892.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190921515.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190921515.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>保存下来，尝试base64解码，另存为png文件。</p>
<p><a href="https://the-x.cn/encodings/Base64.aspx"target="_blank" rel="noopener noreferrer">Base64 在线解码、编码</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190923478.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190923478.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>得到图片如下：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190925805.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190925805.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、将图片转换为文本，校对一遍，注意不要出错，套上正确的SSL私钥格式，保存为txt文件。</p>
<p>ORC在线识别： <a href="https://www.onlineocr.net/zh_hant/"target="_blank" rel="noopener noreferrer">https://www.onlineocr.net/zh_hant/</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190928683.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190928683.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">-----BEGIN RSA PRIVATE KEY-----
</span></span><span class="line"><span class="cl">MIICXAIBAAKBgQDCm6vZmclJrVH1AAyGuCuSSZ8O+mIQiOUQCvN0HYbj8153JfSQ
</span></span><span class="line"><span class="cl">LsJIhbRYS7+zZ1oXvPemWQDv/u/tzegt58q4ciNmcVnq1uKiygc6QOtvT7oiSTyO
</span></span><span class="line"><span class="cl">vMX/q5iE2iClYUIHZEKX3BjjNDxrYvLQzPyGD1EY2DZIO6T45FNKYC2VDwIDAQAB
</span></span><span class="line"><span class="cl">AoGAbtWUKUkx37lLfRq7B5sqjZVKdpBZe4tL0jg6cX5Djd3Uhk1inR9UXVNw4/y4
</span></span><span class="line"><span class="cl">QGfzYqOn8+Cq7QSoBysHOeXSiPztW2cL09ktPgSlfTQyN6ELNGuiUOYnaTWYZpp/
</span></span><span class="line"><span class="cl">QbRcZ/eHBulVQLlk5M6RVs9BLI9X08RAl7EcwumiRfWas6kCQQDvqC0dxl2wIjwN
</span></span><span class="line"><span class="cl">czILcoWLig2c2u71Nev9DrWjWHU8eHDuzCJWvOUAHIrkexddWEK2VHd+F13GBCOQ
</span></span><span class="line"><span class="cl">ZCM4prBjAkEAz+ENahsEjBE4+7H1HdIaw0+goe/45d6A2ewO/lYH6dDZTAzTW9z9
</span></span><span class="line"><span class="cl">kzV8uz+Mmo5163/JtvwYQcKF39DJGGtqZQJBAKa18XR16fQ9TFL64EQwTQ+tYBzN
</span></span><span class="line"><span class="cl">+04eTWQCmH3haeQ/0Cd9XyHBUveJ42Be8/jeDcIx7dGLxZKajHbEAfBFnAsCQGq1
</span></span><span class="line"><span class="cl">AnbJ4Z6opJCGu+UP2c8SC8m0bhZJDelPRC8IKE28eB6SotgP61ZqaVmQ+HLJ1/wH
</span></span><span class="line"><span class="cl">/5pfc3AmEyRdfyx6zwUCQCAH4SLJv/kprRz1a1gx8FR5tj4NeHEFFNEgq1gmiwmH
</span></span><span class="line"><span class="cl">2STT5qZWzQFz8NRe+/otNOHBR2Xk4e8IS+ehIJ3TvyE<span class="o">=</span>
</span></span><span class="line"><span class="cl">-----END RSA PRIVATE KEY-----
</span></span></code></pre></td></tr></table>
</div>
</div><p>3、给Wireshark添加上TLS密钥，就可以查看到HTTP的内容。</p>
<p>选择“ <code>首选项</code> ”</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190930589.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190930589.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>选择“ <code>TLS</code> ”，选择TLS密钥文件位置。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190933003.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190933003.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>最后，过滤HTTP流量，追踪HTTP流，得到flag。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190935025.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190935025.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190937066.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190937066.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">DDCTF<span class="o">{</span>0ca2d8642f90e10efd9092cd6a2831c0<span class="o">}</span>
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>0ca2d8642f90e10efd9092cd6a2831c0<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF Rabbit 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-rabbit-1/</link>
      <pubDate>Tue, 21 Oct 2025 13:21:08 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-rabbit-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204852897.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204852897.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204855410.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204855410.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;注意：得到的 flag 请包上 flag{} 提交&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、根据题目直接得到编码方式，Rabbit编码，使用在线工具进行解密。
&lt;a href=&#34;http://www.jsons.cn/rabbitencrypt/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Rabbit在线工具&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204852897.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204852897.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204855410.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204855410.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>注意：得到的 flag 请包上 flag{} 提交</p>
<h3 id="密文">密文：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="解题思路">解题思路：</h3>
<p>1、根据题目直接得到编码方式，Rabbit编码，使用在线工具进行解密。
<a href="http://www.jsons.cn/rabbitencrypt/"target="_blank" rel="noopener noreferrer">Rabbit在线工具</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204856907.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228204856907.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、得到flag。</p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Cute_Rabbit
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h3 id="rabbit加解密算法">Rabbit加解密算法：</h3>
<ol>
<li>
<p><strong>密钥 - 共享的绝密暗号</strong></p>
<ul>
<li>
<p>你和你朋友事先约定好一个绝密暗号，比如 <strong>“巧克力蛋糕真好吃”</strong> 。这个暗号就是 <strong>“密钥”</strong> 。</p>
</li>
<li>
<p><strong>在 Rabbit 算法里，密钥是一串 128 位的数字（比如 <code>2B7E1516...</code> ），长度固定，是加解密的根本，绝对不能泄露。</strong></p>
</li>
</ul>
</li>
<li>
<p><strong>初始化向量 - 本次通信的页码</strong></p>
<ul>
<li>
<p>为了更安全，你们决定每次通信都用密码本的不同页。于是你打电话告诉朋友：“今天我们用密码本的 <strong>第58页</strong> 开始。” 这个“第58页”就是 <strong>“初始化向量”</strong> 。</p>
</li>
<li>
<p><strong>在 Rabbit 算法里，IV 是一串 64 位的数字。它的作用是确保即使用同一个密钥加密两份相同的内容，也会得到完全不同的密文。就像用同一个密码本，但从不同页开始，写出的密码也不同。</strong></p>
</li>
</ul>
</li>
<li>
<p><strong>Rabbit 机器的工作 - 生成“密码流”</strong></p>
<ul>
<li>
<p>现在，你把密钥（“巧克力蛋糕真好吃”）和 IV（“第58页”）输入到一台叫做 <strong>Rabbit</strong> 的神奇机器里。</p>
</li>
<li>
<p>这台机器会轰隆隆地运转起来，内部有很多齿轮和计数器（这就是算法的内部状态），根据你给的“暗号”和“页码”，它开始疯狂地吐出一长串、完全随机、没有规律的 <strong>“密码流”</strong> 。</p>
</li>
<li>
<p>这个密码流就像： <code>X5j9!kLm@qR3tW#z...</code> （无穷无尽）。</p>
</li>
</ul>
</li>
<li>
<p><strong>加密 - 编写密码信</strong></p>
<ul>
<li>
<p>现在你开始写原始信件（ <strong>明文</strong> ）： <code>“明天下午三点公园见”</code></p>
</li>
<li>
<p>然后，你拿出 Rabbit 机器生成的“密码流”，将信上的每一个字和密码流上的每一个字符进行 <strong>“一对一混合”</strong> （在计算机里是做“异或”运算）。</p>
</li>
<li>
<p>混合后，你原本清晰的信件就变成了一堆毫无意义的乱码（ <strong>密文</strong> ）： <code>“敨晑佢歮湤歮”</code></p>
</li>
</ul>
</li>
<li>
<p><strong>解密 - 还原密码信</strong></p>
<ul>
<li>
<p>你的朋友收到了这堆乱码和你的电话通知（IV=“第58页”）。</p>
</li>
<li>
<p>他也有同样的 Rabbit 机器，并且知道你们的共享暗号（密钥=“巧克力蛋糕真好吃”）。</p>
</li>
<li>
<p>他把密钥和 IV 输入机器，机器会生成 <strong>一模一样</strong> 的“密码流”： <code>X5j9!kLm@qR3tW#z...</code></p>
</li>
<li>
<p>他再用这个密码流和乱码（密文）进行 <strong>完全相同的“混合”操作</strong> ，神奇的事情发生了，乱码又变回了清晰的原信： <code>“明天下午三点公园见”</code> 。</p>
</li>
</ul>
</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [SUCTF 2019]Game 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-suctf-2019game-1/</link>
      <pubDate>Mon, 13 Oct 2025 08:00:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-suctf-2019game-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191821473.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191821473.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191823927.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191823927.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;感谢菠萝吹雪师傅出题。&lt;/p&gt;
&lt;p&gt;flag 请替换 SUCTF{} 为 flag{} 后提交。&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;p&gt;下载附件，得到一张图片和一个网站源代码&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191825575.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191825575.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191828044.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191828044.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、在网站源代码index.html中，发现经过Base32加密后的密文： &lt;code&gt;ON2WG5DGPNUECSDBNBQV6RTBNMZV6RRRMFTX2===&lt;/code&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191821473.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191821473.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191823927.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191823927.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>感谢菠萝吹雪师傅出题。</p>
<p>flag 请替换 SUCTF{} 为 flag{} 后提交。</p>
<h3 id="密文">密文：</h3>
<p>下载附件，得到一张图片和一个网站源代码</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191825575.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191825575.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191828044.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191828044.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、在网站源代码index.html中，发现经过Base32加密后的密文： <code>ON2WG5DGPNUECSDBNBQV6RTBNMZV6RRRMFTX2===</code></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191829453.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191829453.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><a href="https://www.qqxiuzi.cn/bianma/base.php"target="_blank" rel="noopener noreferrer">Base32编码解码</a>
使用在线网站进行解密，得到假的flag： <code>suctf{hAHaha_Fak3_F1ag}</code></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191831117.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191831117.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、转过方向，看看那张图片。发现存在LSB隐写，密文为： <code>U2FsdGVkX1+zHjSBeYPtWQVSwXzcVFZLu6Qm0To/KeuHg8vKAxFrVQ==</code></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191832778.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191832778.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><a href="https://www.qqxiuzi.cn/bianma/base64.htm"target="_blank" rel="noopener noreferrer">Base64编码转换</a>
密文与Base64编码非常相似，并且Base64解码后头部是&quot;Salted&quot;，猜测加密方式为AES或3DES。（根据U2FsdGVkX1开头，也有同样效果）</p>
<blockquote>
<p><strong>3DES</strong> (Triple DES): PKCS#5 的早期实现通常使用 3DES 加密算法。当使用 3DES 时，加密的数据块可能会以 “Salted” 开头，后面跟着一个随机生成的盐值，用于派生密钥。
<strong>AES</strong> (Advanced Encryption Standard): 虽然 AES 通常不需要特定的前缀，但在某些实现中，如果使用 PKCS#5 或者类似的密码派生标准，也可能看到类似的前缀。</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191834495.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191834495.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、加密方式是3DES，密钥为之前的假flag： <code>suctf{hAHaha_Fak3_F1ag}</code> ，解密得到flag
<a href="https://www.sojson.com/encrypt_triple_des.html"target="_blank" rel="noopener noreferrer">TripleDes加密/解密</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191836631.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191836631.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191838200.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191838200.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">suctf<span class="o">{</span>U_F0und_1t<span class="o">}</span>
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>U_F0und_1t<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF USB 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-usb-1/</link>
      <pubDate>Mon, 06 Oct 2025 12:09:55 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-usb-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190257641.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190257641.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://www.freebuf.com/column/199854.html&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF解题技能之压缩包分析基础篇&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/mochu7777777/article/details/109632626&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF：USB&lt;/a&gt;
&lt;a href=&#34;https://www.cnblogs.com/Dreamerwd/p/15159027.html#:~:text=%E5%85%88%E6%8A%8A%E5%8E%8B%E7%BC%A9%E5%8C%85%E6%8F%90&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;(usb键盘隐写)buuctf:USB&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190257641.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190257641.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://www.freebuf.com/column/199854.html"target="_blank" rel="noopener noreferrer">CTF解题技能之压缩包分析基础篇</a>
<a href="https://blog.csdn.net/mochu7777777/article/details/109632626"target="_blank" rel="noopener noreferrer">BUUCTF：USB</a>
<a href="https://www.cnblogs.com/Dreamerwd/p/15159027.html#:~:text=%E5%85%88%E6%8A%8A%E5%8E%8B%E7%BC%A9%E5%8C%85%E6%8F%90"target="_blank" rel="noopener noreferrer">(usb键盘隐写)buuctf:USB</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190259617.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190259617.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>Do your konw usb?? 注意：得到的 flag 请包上 flag{} 提交</p>
<h3 id="密文">密文：</h3>
<p>下载附件解压，得到233.rar和key.ftm文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190300928.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190300928.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、解压233.rar，发现文件损坏，233.png没有解压出来，flag.txt文件中没有flag。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190302891.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190302891.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190304627.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190304627.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>用010Editor打开，提示文件的第三个块CRC报错，也就是233.rar的文件块。</p>
<blockquote>
<p>RAR是有四个文件块组成的，分别是分别是 <code>标记块</code> 、 <code>归档头部块</code> 、 <code>文件块</code> 、 <code>结束块</code> 。</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190306232.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190306232.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>检查发现是文件块的HEAD_TYPE出错，原数值应为0x74，而非0x7A。修改后即可成功解压。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190308479.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190308479.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190310134.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190310134.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、解压已修改后的文件，得到233.png</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190311759.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190311759.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用StegSolve打开图片，在Blue plane 0通道发现一个二维码</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190315061.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190315061.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>扫描二维码得到疑似flag的密文： <code>ci{v3erf_0tygidv2_fc0}</code> ，猜测为维吉尼亚密码。但缺少key值（密钥），暂时无法解密</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190316521.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190316521.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、回过头，key.ftm中应该就有我们要的key值</p>
<blockquote>
<p><strong>FTM</strong> 是FamiTracker，用于生产任天堂（NES）系统的音乐的音频节目创建的音频跟踪器模块。 它包括短的音频样本和一系列包含旋律音符。</p>
</blockquote>
<p>在010 Editor中搜索“key”关键字，发现隐藏zip压缩包，内部有key.pcap</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190318757.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190318757.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>将zip的数据另存为一个单独的zip文件，解压得到key.pcap。（或者使用WinRAR直接打开key.ftm）</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190320539.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190320539.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>打开发现全部为USB的流量</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190321587.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190321587.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用隐写脚本USBUsbKeyboardDataHacker.py，得到内容 <code>aababacbbdbdccccdcdcdbbcccbcbbcbbaababaaaaaaaaaaaaaaaaaakey{xinan}</code> ，key值为 <code>xinan</code></p>
<p><a href="https://github.com/WangYihang/UsbKeyboardDataHacker"target="_blank" rel="noopener noreferrer">https://github.com/WangYihang/UsbKeyboardDataHacker
</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">python UsbKeyboardDataHacker.py /root/key.pcap
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190323953.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190323953.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、使用得到的key值，解密维吉尼亚密码，得到 <code>fa{i3eei_0llgvgn2_sc0}</code>
<a href="https://www.qqxiuzi.cn/bianma/weijiniyamima.php"target="_blank" rel="noopener noreferrer">维吉尼亚密码加密解密</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190326705.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190326705.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>猜测明文又经过栅栏加密，解密得到 <code>flag{vig3ne2e_is_c00l}</code>
<a href="https://www.qqxiuzi.cn/bianma/zhalanmima.php"target="_blank" rel="noopener noreferrer">栅栏密码加密解密</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190328258.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190328258.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>vig3ne2e_is_c00l<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [GUET-CTF2019]虚假的压缩包 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-guet-ctf2019%E8%99%9A%E5%81%87%E7%9A%84%E5%8E%8B%E7%BC%A9%E5%8C%85-1/</link>
      <pubDate>Mon, 29 Sep 2025 08:15:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-guet-ctf2019%E8%99%9A%E5%81%87%E7%9A%84%E5%8E%8B%E7%BC%A9%E5%8C%85-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191120443.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191120443.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/YueXuan_521/article/details/134055375&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF zip伪加密 1&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/Demonslzh/article/details/130738368&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RSA加密原理详解，以及RSA中的数论基础&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/mochu7777777/article/details/105367979#:~:text=%5BGUET-&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF：[GUET-CTF2019]虚假的压缩包&lt;/a&gt;
&lt;a href=&#34;https://www.cnblogs.com/vuclw/p/15848284.html#:~:text=%E5%85%B6%E4%B8%AD%E7%9C%9F%E5%AE%9E%E7%9A%84%E5%8E%8B&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF:[GUET-CTF2019]虚假的压缩包&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/YueXuan_521/article/details/134352467?spm=1001.2014.3001.5502&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Misc | 相当于签到 第二届“奇安信”杯网络安全技能竞赛&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191120443.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191120443.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://blog.csdn.net/YueXuan_521/article/details/134055375"target="_blank" rel="noopener noreferrer">BUUCTF zip伪加密 1</a>
<a href="https://blog.csdn.net/Demonslzh/article/details/130738368"target="_blank" rel="noopener noreferrer">RSA加密原理详解，以及RSA中的数论基础</a>
<a href="https://blog.csdn.net/mochu7777777/article/details/105367979#:~:text=%5BGUET-"target="_blank" rel="noopener noreferrer">BUUCTF：[GUET-CTF2019]虚假的压缩包</a>
<a href="https://www.cnblogs.com/vuclw/p/15848284.html#:~:text=%E5%85%B6%E4%B8%AD%E7%9C%9F%E5%AE%9E%E7%9A%84%E5%8E%8B"target="_blank" rel="noopener noreferrer">BUUCTF:[GUET-CTF2019]虚假的压缩包</a>
<a href="https://blog.csdn.net/YueXuan_521/article/details/134352467?spm=1001.2014.3001.5502"target="_blank" rel="noopener noreferrer">Misc | 相当于签到 第二届“奇安信”杯网络安全技能竞赛</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191122980.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191122980.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。</p>
<h3 id="密文">密文：</h3>
<p>下载附件解压，得到两个压缩包：虚假的压缩包.zip和真实的压缩包.zip</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191124567.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191124567.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、先处理虚假的压缩包.zip，因为真实的压缩包.zip需要密码。虚假的压缩包.zip使用了伪加密，搜索 <code>50 4B 01 02</code> ，将文件头的第9位和第10位改为0。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191125895.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191125895.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>解压得到Key.txt文件，内容如下：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191127788.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191127788.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、猜测为RSA加密，解密脚本如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">gmpy2</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.mpz(n)#初始化一个大整数
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.mpfr(x)# 初始化一个高精度浮点数x
</span></span></span><span class="line"><span class="cl"><span class="s2">d = gmpy2.invert(e,n) # 求逆元，de = 1 mod n
</span></span></span><span class="line"><span class="cl"><span class="s2">C = gmpy2.powmod(M,e,n)# 幂取模，结果是 C = (M^e) mod n
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.is_prime(n) #素性检测
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.gcd(a,b)  #欧几里得算法，最大公约数
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.gcdext(a,b)  #扩展欧几里得算法
</span></span></span><span class="line"><span class="cl"><span class="s2">gmpy2.iroot(x,n) #x开n次根
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">mpz</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">q</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">mpz</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">mpz</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">l</span> <span class="o">=</span> <span class="p">(</span><span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">q</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">d</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">invert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="n">l</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">c</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">mpz</span><span class="p">(</span><span class="mi">26</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">n</span> <span class="o">=</span> <span class="n">p</span> <span class="o">*</span> <span class="n">q</span>
</span></span><span class="line"><span class="cl"><span class="n">ans</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">来源</span><span class="p">:</span><span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">blog</span><span class="o">.</span><span class="n">csdn</span><span class="o">.</span><span class="n">net</span><span class="o">/</span><span class="n">qq_24033605</span><span class="o">/</span><span class="n">article</span><span class="o">/</span><span class="n">details</span><span class="o">/</span><span class="mi">117158714</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>运行脚本，得到答案是 <code>5</code> 。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191129180.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191129180.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、解压真实的压缩包.zip，得到一张没卵用且会浪费你时间的图片.jpg和亦真亦假。</p>
<p>解压密码： <code>答案是5</code></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191130320.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191130320.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用TweakPNG打开jpg图片，发现提示jpg图片CRC不对，应该是被修改宽高啦。（另外该图片应为png文件，png文件头89 50 4E 47）</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191131706.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191131706.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191133343.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191133343.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用如下脚本，计算原文件宽高。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">binascii</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">struct</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">crcbp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;1.png&#34;</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>    <span class="c1">#打开图片!!!</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2000</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2000</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">data</span> <span class="o">=</span> <span class="n">crcbp</span><span class="p">[</span><span class="mi">12</span><span class="p">:</span><span class="mi">16</span><span class="p">]</span> <span class="o">+</span> \
</span></span><span class="line"><span class="cl">            <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s1">&#39;&gt;i&#39;</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span><span class="o">+</span><span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s1">&#39;&gt;i&#39;</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span><span class="o">+</span><span class="n">crcbp</span><span class="p">[</span><span class="mi">24</span><span class="p">:</span><span class="mi">29</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">crc32</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xffffffff</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span><span class="p">(</span><span class="n">crc32</span> <span class="o">==</span> <span class="mh">0x1670BAE6</span><span class="p">):</span>    <span class="c1">#修改为图片当前CRC!!!</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;hex:&#39;</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="nb">hex</span><span class="p">(</span><span class="n">j</span><span class="p">))</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>得到图片的高应为 <code>242</code> ， <code>0xF2</code> 。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191135339.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191135339.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>修改图片高度如下</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191137129.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191137129.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>得到图片

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191139101.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191139101.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、根据上面图片的提示，我们将亦真亦假文件的数据 <code>异或5</code> ，python脚本如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">binascii</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 打开文件进行读取</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;file&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">f1</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 初始化变量存储解密后的数据</span>
</span></span><span class="line"><span class="cl"><span class="n">flag_data</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 对每个字符进行异或操作</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">tmp</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span> <span class="o">^</span> <span class="mi">5</span>
</span></span><span class="line"><span class="cl">    <span class="n">flag_data</span> <span class="o">+=</span> <span class="nb">hex</span><span class="p">(</span><span class="n">tmp</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 将解密后的数据写入新文件</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;./flag.doc&#39;</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># 使用 binascii.unhexlify 替代 decode(&#39;hex&#39;)</span>
</span></span><span class="line"><span class="cl">    <span class="n">f2</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">flag_data</span><span class="p">))</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="s2">&#34;Decryption complete.&#34;</span><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>得到flag.doc文件，打开没有发现flag，全选改变字体颜色，得到flag。（word隐藏文字）</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191141092.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191141092.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">FLAG<span class="o">{</span>_th2_7ru8_2iP_<span class="o">}</span>   
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>_th2_7ru8_2iP_<span class="o">}</span>   
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [RCTF2019]draw 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-rctf2019draw-1/</link>
      <pubDate>Mon, 15 Sep 2025 08:30:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-rctf2019draw-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191728297.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191728297.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/mochu7777777/article/details/105369804&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF：[RCTF2019]draw&lt;/a&gt;
&lt;a href=&#34;https://blog.rois.io/2019/06/06/rctf-2019-official-writeup/#:~:text=%E4%BD%BF%E7%94%A8Wire&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RCTF 2019 Official Writeup&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191730360.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191730360.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;得到的 flag 请包上 flag{} 提交。&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;p&gt;保存attachment.txt文件，内容如下：&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191728297.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191728297.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://blog.csdn.net/mochu7777777/article/details/105369804"target="_blank" rel="noopener noreferrer">BUUCTF：[RCTF2019]draw</a>
<a href="https://blog.rois.io/2019/06/06/rctf-2019-official-writeup/#:~:text=%E4%BD%BF%E7%94%A8Wire"target="_blank" rel="noopener noreferrer">RCTF 2019 Official Writeup</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191730360.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191730360.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。</p>
<h3 id="密文">密文：</h3>
<p>保存attachment.txt文件，内容如下：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191731854.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191731854.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cs pu lt <span class="m">90</span> fd <span class="m">500</span> rt <span class="m">90</span> pd fd <span class="m">100</span> rt <span class="m">90</span> repeat 18<span class="o">[</span>fd <span class="m">5</span> rt 10<span class="o">]</span> lt <span class="m">135</span> fd <span class="m">50</span> lt <span class="m">135</span> pu bk <span class="m">100</span> pd setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> repeat 18<span class="o">[</span>fd <span class="m">5</span> rt 10<span class="o">]</span> rt <span class="m">90</span> fd <span class="m">60</span> rt <span class="m">90</span> bk <span class="m">30</span> rt <span class="m">90</span> fd <span class="m">60</span> pu lt <span class="m">90</span> fd <span class="m">100</span> pd rt <span class="m">90</span> fd <span class="m">50</span> bk <span class="m">50</span> setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> lt <span class="m">90</span> fd <span class="m">50</span> rt <span class="m">90</span> fd <span class="m">50</span> pu fd <span class="m">50</span> pd fd <span class="m">25</span> bk <span class="m">50</span> fd <span class="m">25</span> rt <span class="m">90</span> fd <span class="m">50</span> pu setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> fd <span class="m">100</span> rt <span class="m">90</span> fd <span class="m">30</span> rt <span class="m">45</span> pd fd <span class="m">50</span> bk <span class="m">50</span> rt <span class="m">90</span> fd <span class="m">50</span> bk <span class="m">100</span> fd <span class="m">50</span> rt <span class="m">45</span> pu fd <span class="m">50</span> lt <span class="m">90</span> pd fd <span class="m">50</span> bk <span class="m">50</span> rt <span class="m">90</span> setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> fd <span class="m">50</span> pu lt <span class="m">90</span> fd <span class="m">100</span> pd fd <span class="m">50</span> rt <span class="m">90</span> fd <span class="m">25</span> bk <span class="m">25</span> lt <span class="m">90</span> bk <span class="m">25</span> rt <span class="m">90</span> fd <span class="m">25</span> setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> pu fd <span class="m">25</span> lt <span class="m">90</span> bk <span class="m">30</span> pd rt <span class="m">90</span> fd <span class="m">25</span> pu fd <span class="m">25</span> lt <span class="m">90</span> pd fd <span class="m">50</span> bk <span class="m">25</span> rt <span class="m">90</span> fd <span class="m">25</span> lt <span class="m">90</span> fd <span class="m">25</span> bk <span class="m">50</span> pu bk <span class="m">100</span> lt <span class="m">90</span> setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> fd <span class="m">100</span> pd rt <span class="m">90</span> arc <span class="m">360</span> <span class="m">20</span> pu rt <span class="m">90</span> fd <span class="m">50</span> pd arc <span class="m">360</span> <span class="m">15</span> pu fd <span class="m">15</span> setcolor pick <span class="o">[</span> red orange yellow green blue violet <span class="o">]</span> lt <span class="m">90</span> pd bk <span class="m">50</span> lt <span class="m">90</span> fd <span class="m">25</span> pu home bk <span class="m">100</span> lt <span class="m">90</span> fd <span class="m">100</span> pd arc <span class="m">360</span> <span class="m">20</span> pu home
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、从题目和文本的数据可以看出，要画出什么东西。数据是Logo语言代码，使用任意Logo语言解释器就可以运行代码，得到flag。</p>
<p>Logo解释器： <a href="https://www.calormen.com/jslogo/"target="_blank" rel="noopener noreferrer">https://www.calormen.com/jslogo/</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191733830.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191733830.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>附一个类似的python代码：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># @Author：YueXuan</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Date  ：2024/10/4 14:37</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">turtle</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 初始化画布</span>
</span></span><span class="line"><span class="cl"><span class="n">screen</span> <span class="o">=</span> <span class="n">turtle</span><span class="o">.</span><span class="n">Screen</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">screen</span><span class="o">.</span><span class="n">setup</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">800</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 创建一个海龟对象</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span> <span class="o">=</span> <span class="n">turtle</span><span class="o">.</span><span class="n">Turtle</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 设置速度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">speed</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 开始绘制</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">500</span><span class="p">)</span>  <span class="c1"># 向前走 500 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 重复绘制</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">18</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 绘制下一个图形</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">135</span><span class="p">)</span>  <span class="c1"># 向左转 135 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">135</span><span class="p">)</span>  <span class="c1"># 向左转 135 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向后走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;red&#39;</span><span class="p">,</span> <span class="s1">&#39;orange&#39;</span><span class="p">,</span> <span class="s1">&#39;yellow&#39;</span><span class="p">,</span> <span class="s1">&#39;green&#39;</span><span class="p">,</span> <span class="s1">&#39;blue&#39;</span><span class="p">,</span> <span class="s1">&#39;violet&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 重复绘制</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">18</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>  <span class="c1"># 向前走 60 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>  <span class="c1"># 向后走 30 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>  <span class="c1"># 向前走 60 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 绘制下一个图形</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>  <span class="c1"># 向前走 30 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">45</span><span class="p">)</span>  <span class="c1"># 向右转 45 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向后走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">45</span><span class="p">)</span>  <span class="c1"># 向右转 45 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 绘制下一个图形</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向后走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向后走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 继续绘制</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>  <span class="c1"># 向后走 30 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向后走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向后走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 绘制圆弧</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">360</span><span class="p">)</span>  <span class="c1"># 绘制半径为 20 的圆</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向右转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向前走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="mi">360</span><span class="p">)</span>  <span class="c1"># 绘制半径为 15 的圆</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span>  <span class="c1"># 向前走 15 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">color</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="n">index</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">colors</span><span class="p">)])</span>  <span class="c1"># 设置颜色</span>
</span></span><span class="line"><span class="cl"><span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>  <span class="c1"># 向后走 50 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>  <span class="c1"># 向前走 25 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">home</span><span class="p">()</span>  <span class="c1"># 返回原点</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">backward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向后走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>  <span class="c1"># 向左转 90 度</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>  <span class="c1"># 向前走 100 单位</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">pendown</span><span class="p">()</span>  <span class="c1"># 落笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">360</span><span class="p">)</span>  <span class="c1"># 绘制半径为 20 的圆</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">penup</span><span class="p">()</span>  <span class="c1"># 抬笔</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span><span class="o">.</span><span class="n">home</span><span class="p">()</span>  <span class="c1"># 返回原点</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 结束绘图</span>
</span></span><span class="line"><span class="cl"><span class="n">turtle</span><span class="o">.</span><span class="n">done</span><span class="p">()</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191735446.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191735446.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>RCTF_HeyLogo<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [ACTF新生赛2020]明文攻击 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-actf%E6%96%B0%E7%94%9F%E8%B5%9B2020%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB-1/</link>
      <pubDate>Mon, 08 Sep 2025 08:00:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-actf%E6%96%B0%E7%94%9F%E8%B5%9B2020%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190618732.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190618732.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://peiqi.wgpsec.org/ctf/misc/%E5%8E%8B%E7%BC%A9%E5%8C%85%E7%A0%B4%E8%A7%A3/%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB.html&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;明文攻击&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/qq_46230755/article/details/112108707#:~:text=%5BACTF%E6%96%B0&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF：[ACTF新生赛2020]明文攻击&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/qq_52974719/article/details/117084427&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Zip明文攻击细节问题及解决方案&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190618732.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190618732.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://peiqi.wgpsec.org/ctf/misc/%E5%8E%8B%E7%BC%A9%E5%8C%85%E7%A0%B4%E8%A7%A3/%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB.html"target="_blank" rel="noopener noreferrer">明文攻击</a>
<a href="https://blog.csdn.net/qq_46230755/article/details/112108707#:~:text=%5BACTF%E6%96%B0"target="_blank" rel="noopener noreferrer">BUUCTF：[ACTF新生赛2020]明文攻击</a>
<a href="https://blog.csdn.net/qq_52974719/article/details/117084427"target="_blank" rel="noopener noreferrer">Zip明文攻击细节问题及解决方案</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190620679.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190620679.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。</p>
<h3 id="密文">密文：</h3>
<p>下载附件解压，得到tmp文件夹，下有none.zip，最后得到</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190622314.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190622314.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190623424.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190623424.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、尝试解压res.zip，需要解压密码。看一下woo.jpg图片，发现数据中存在zip压缩包数据。（zip文件头：50 4B 03 04）</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190624826.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190624826.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>文件头存在缺失，补全文件头，另存为zip文件。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190626656.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190626656.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>解压1.zip压缩包，得到flag.txt文件。（不是flag）</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190629298.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190629298.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、两个压缩包的CRC值相同，结合题目“明文攻击”，可以使用包含flag.txt的1.zip压缩包，对res.zip进行明文攻击。</p>
<blockquote>
<p><strong>明文攻击</strong> 是一种存在特定场景下爆破手段，大致原理是当你不知道一个zip的密码，但是你有zip中的一个已知文件（文件大小要大于12Byte）或者已经通过其他手段知道zip加密文件中的某些内容时，因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的，所以可以用已知文件来找加密密钥，利用密钥来解锁其他加密文件。</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190630346.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190630346.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190631734.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190631734.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用ARCHPR进行明文攻击，5、6分钟后点击“停止”</p>
<blockquote>
<p>需要注意的是，明文攻击并不需要你太多时间，最多也就5,6分钟（师傅们的总结），一旦超过这个时间或感觉可以了点停止即可。</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190633480.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190633480.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>会弹出“加密密钥已成功恢复”提示框</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190635693.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190635693.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>点击取消，将无密码的文件另存下来</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190637817.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190637817.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>解压得到secret.txt文件，打开就是flag</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190640317.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190640317.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ACTF<span class="o">{</span>3te9_nbb_ahh8<span class="o">}</span>
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>3te9_nbb_ahh8<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
