<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Web安全 on 知识带给我们自由</title>
    <link>https://yuexuan521.github.io/zh/tags/web%E5%AE%89%E5%85%A8/</link>
    <description>Recent content in Web安全 on 知识带给我们自由</description>
    <image>
      <title>知识带给我们自由</title>
      <url>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en-us</language>
    <copyright>See this site&amp;rsquo;s source code here, licensed under GPLv3 ·</copyright>
    <lastBuildDate>Fri, 14 Mar 2025 15:51:54 +0000</lastBuildDate>
    <atom:link href="https://yuexuan521.github.io/zh/tags/web%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>BUUCTF [UTCTF2020]basic-forensics 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-utctf2020basic-forensics-1/</link>
      <pubDate>Fri, 14 Mar 2025 15:51:54 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-utctf2020basic-forensics-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192033727.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192033727.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://hello-ctf.com/HC_Start/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hello CTF&lt;/a&gt;
&lt;a href=&#34;https://ns.openctf.net/learn/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NewStar CTF&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/qq_24033605/article/details/117336177&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUU-MISC-[UTCTF2020]basic-forensics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192035810.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192035810.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;得到的 flag 请包上 flag{} 提交。&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;p&gt;下载附件，是一张打不开的图片&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192037839.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192037839.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、使用010Editor打开图片，发现似乎是一本书的数据&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192033727.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192033727.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://hello-ctf.com/HC_Start/"target="_blank" rel="noopener noreferrer">Hello CTF</a>
<a href="https://ns.openctf.net/learn/"target="_blank" rel="noopener noreferrer">NewStar CTF</a>
<a href="https://blog.csdn.net/qq_24033605/article/details/117336177"target="_blank" rel="noopener noreferrer">BUU-MISC-[UTCTF2020]basic-forensics</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192035810.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192035810.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。</p>
<h3 id="密文">密文：</h3>
<p>下载附件，是一张打不开的图片</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192037839.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192037839.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、使用010Editor打开图片，发现似乎是一本书的数据</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192039122.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192039122.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>直接搜索关键词“flag”，就找到flag了</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192040648.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192040648.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>fil3_ext3nsi0ns_4r3nt_r34l<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="-玥轩-网络安全拓扑空间">🔒 玥轩 |网络安全拓扑空间</h2>
<h4 id="-攻防演化方程">🛡️ 攻防演化方程</h4>
<p><code>#CTF_TOP10% | #密码学 | #漏洞宇宙</code></p>
<hr>
<h3 id="-安全算法素因子分解">🔑 安全算法素因子分解</h3>
<p><strong>漏洞扫描定理</strong> ：</p>
<p>$$
\sqrt{61526} \approx 248 \quad \Rightarrow \quad \text{61,526次代码片分享构建248个攻防模型}
$$</p>
<p><strong>竞赛场博弈论</strong> ：</p>
<p>$$
\begin{cases} \text{CTF攻防矩阵} &amp; \nabla \cdot \vec{F} = \rho/\epsilon_0 \ \text{数模国赛优化解} &amp; \iint_{D} e^{x^2+y^2} , dx , dy \end{cases}
$$</p>
<hr>
<h3 id="-云安全算子矩阵">🛰️ 云安全算子矩阵</h3>
<p>$$
\text{专家算子} = \begin{bmatrix} \text{阿里云} &amp; \otimes &amp; \text{乘风者计划} \ \text{华为云} &amp; \oplus &amp; \text{云享专家} \ \end{bmatrix}^{\mathrm{T}}
$$</p>
<hr>
<h3 id="-安全协议证明体系">🧩 安全协议证明体系</h3>
<p><strong>密码学引理</strong></p>
<p>$$
\mathbb{Z}_{p}^{*} \ni \alpha \xrightarrow{\text{ECDSA}} \sigma = (\gamma, \delta) \quad \Rightarrow \quad \text{云原生场景密钥演化}
$$</p>
<p><strong>威胁建模推论</strong></p>
<p>$$
\forall x \in \mathcal{V},\ \exists y \mid \mathop{\mathbb{P}}(X \leq \phi(y)) \geq 0.95 \quad \Rightarrow \quad \text{APT攻击概率收敛}
$$</p>
<hr>
<h3 id="-尼采安全哲学">🌩️ 尼采安全哲学</h3>
<p>$$
\mathop{\text{lim}}_{t\to\infty} \frac{\partial \Psi}{\partial t} = \lambda \Psi \quad \text{其中} \ \Psi = \text{&ldquo;深自缄默→声震人间&rdquo;}
$$</p>
<hr>
<h3 id="-安全信道协议">📡 安全信道协议</h3>
<p>$$
\begin{array}{ccc} \text{CTF Writeup库} &amp; \xleftrightarrow{\text{TLS1.3}} &amp; \text{漏洞星球} \ &amp; \Updownarrow &amp; \ \text{云安全智库} &amp; \xrightarrow{\text{AES-GCM}} &amp; \text{我的GitHub} \ \end{array}
$$</p>
<hr>
<h4 id="-安全握手请求">🔗 安全握手请求</h4>
<p>$$
\text{Let’s } \mathop{\text{Handshake}} \left( \frac{\text{你}}{\text{我}} \right) \ni { \text{知乎|GitHub|阿里云} }
$$</p>
]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [GKCTF 2021]你知道apng吗 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-gkctf-2021%E4%BD%A0%E7%9F%A5%E9%81%93apng%E5%90%97-1/</link>
      <pubDate>Sun, 19 Jan 2025 11:53:54 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-gkctf-2021%E4%BD%A0%E7%9F%A5%E9%81%93apng%E5%90%97-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190956824.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190956824.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://hello-ctf.com/HC_Start/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hello CTF&lt;/a&gt;
&lt;a href=&#34;https://ns.openctf.net/learn/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NewStar CTF&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/weixin_45556441/article/details/119801433&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;buuctf [GKCTF 2021]你知道apng吗 ＜apng图片格式的考察＞&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/qq_29977871/article/details/128507643&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;buuctf-misc-[GKCTF 2021]你知道apng吗1&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/wangjin7356/article/details/123402038&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;你知道apng吗&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190956824.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190956824.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://hello-ctf.com/HC_Start/"target="_blank" rel="noopener noreferrer">Hello CTF</a>
<a href="https://ns.openctf.net/learn/"target="_blank" rel="noopener noreferrer">NewStar CTF</a>
<a href="https://blog.csdn.net/weixin_45556441/article/details/119801433"target="_blank" rel="noopener noreferrer">buuctf [GKCTF 2021]你知道apng吗 ＜apng图片格式的考察＞</a>
<a href="https://blog.csdn.net/qq_29977871/article/details/128507643"target="_blank" rel="noopener noreferrer">buuctf-misc-[GKCTF 2021]你知道apng吗1</a>
<a href="https://blog.csdn.net/wangjin7356/article/details/123402038"target="_blank" rel="noopener noreferrer">你知道apng吗</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190958970.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228190958970.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>（flag由flag头包裹</p>
<h3 id="密文">密文：</h3>
<p>下载附件，解压得到girl.apng文件。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191000373.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191000373.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、根据题目 <code>你知道apng吗</code> ，搜索得到这是一种类似于GIF的动图文件。</p>
<p><a href="https://www.bilibili.com/opus/301546385385594815"target="_blank" rel="noopener noreferrer">科普（APNG）</a></p>
<blockquote>
<p>APNG：我出身于PNG（便携式网络图形），我的使命就是淘汰GIF。我的全称是Animated Portable Network Graphics，我的本质是PNG的位图动画扩展，但未获PNG组织官方认可。我仍对原版PNG保持向下兼容，我的第1帧为标准PNG图像，剩余的动画和帧速等数据放在PNG扩展数据块，因此只支持原版PNG的软件会正确显示第1帧。Firefox与Chrome浏览器（59版本及以上）均可以直接打开我。</p>
</blockquote>
<p><a href="https://baike.baidu.com/item/APNG/3582613"target="_blank" rel="noopener noreferrer">APNG百度</a></p>
<blockquote>
<p>APNG（Animated Portable Network Graphics）是一个基于PNG（Portable Network Graphics）的位图动画格式，扩展方法类似主要用于网页的GIF 89a，仍对传统PNG保留向下兼容。第1帧是标准的单幅PNG图像，因此只支持原版PNG的软件能正常显示第1帧。剩余的动画帧和帧速数据储存在符合原版PNG标准的扩展数据块里。 APNG与Mozilla社区关系密切，格式标准文档就放在Mozilla网站。</p>
</blockquote>
<p>使用Firefox可以打开girl.apng，可以看到有多个二维码一闪而过。</p>
<p>找到一个APNG在线查看工具： <a href="https://ezgif.com/split?err=expired"target="_blank" rel="noopener noreferrer">https://ezgif.com/split?err=expired</a> ，上传图片后，点击 <code>Split</code> ，得到每帧的图片。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191001456.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191001456.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p><code>1、</code>

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191003482.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191003482.png" 
             alt="请添加图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><code>2、</code>

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191005565.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191005565.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><code>3、</code>

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191007640.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191007640.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><code>4、</code>

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191009559.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191009559.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>2、使用PS（或在线PS）处理第一张图片，选择 <code>编辑</code> –&gt; <code>变换</code> –&gt; <code>扭曲</code> ，此时扫码得到四分之一的flag。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191010855.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191010855.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191012920.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191012920.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>第二张图片使用StegSolve，查看其它的通道，找到可以识别的二维码。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191014992.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191014992.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191017077.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191017077.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>剩下两张可以直接扫码得到四分之一flag，最后得到完整flag。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191018883.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191018883.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191021077.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191021077.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>a3c7e4e5-9b9d-ad20-0327-288a235370ea<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [SUCTF2018]followme 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-suctf2018followme-1/</link>
      <pubDate>Mon, 16 Dec 2024 09:00:00 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-suctf2018followme-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191840322.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191840322.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://hello-ctf.com/HC_Start/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hello CTF&lt;/a&gt;
&lt;a href=&#34;https://ns.openctf.net/learn/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NewStar CTF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191842332.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191842332.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;得到的 flag 请包上 flag{} 提交。来源： &lt;a href=&#34;https://github.com/hebtuerror404/CTF_competition_warehouse_2018&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://github.com/hebtuerror404/CTF_competition_warehouse_2018&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;密文&#34;&gt;密文：&lt;/h3&gt;
&lt;p&gt;下载附件得到attachment.pcapng文件&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191844026.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191844026.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;解题思路&#34;&gt;解题思路：&lt;/h3&gt;
&lt;p&gt;1、有两种方法，先讲讲我的解题经过。我首先简单浏览了一下流量，发现有大量HTTP流量，并且似乎存在爆破行为。过滤出HTTP流量，查看到爆破密码的步骤，随便看一个就捡到了flag。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191840322.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191840322.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://hello-ctf.com/HC_Start/"target="_blank" rel="noopener noreferrer">Hello CTF</a>
<a href="https://ns.openctf.net/learn/"target="_blank" rel="noopener noreferrer">NewStar CTF</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191842332.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191842332.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。来源： <a href="https://github.com/hebtuerror404/CTF_competition_warehouse_2018"target="_blank" rel="noopener noreferrer">https://github.com/hebtuerror404/CTF_competition_warehouse_2018</a></p>
<h3 id="密文">密文：</h3>
<p>下载附件得到attachment.pcapng文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191844026.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191844026.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、有两种方法，先讲讲我的解题经过。我首先简单浏览了一下流量，发现有大量HTTP流量，并且似乎存在爆破行为。过滤出HTTP流量，查看到爆破密码的步骤，随便看一个就捡到了flag。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191845264.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191845264.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h4 id="方法一">方法一：</h4>
<p>使用Wireshark，在分组字节流中查找包含 <code>ctf</code> 的内容，可以找到flag</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191847456.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191847456.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h4 id="方法二">方法二：</h4>
<p>将全部HTTP对象导出</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191849628.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191849628.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>发现大量的文件如下：</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191851559.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191851559.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>搜索文件中的关键词，使用grep命令，查找到flag</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -r -i  <span class="s2">&#34;ctf&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191853095.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228191853095.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">SUCTF<span class="o">{</span>password_is_not_weak<span class="o">}</span>
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>password_is_not_weak<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF [WUSTCTF2020]girlfriend 1</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-wustctf2020girlfriend-1/</link>
      <pubDate>Mon, 18 Nov 2024 12:58:09 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-wustctf2020girlfriend-1/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192235955.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192235955.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;
&lt;a href=&#34;https://blog.csdn.net/mochu7777777/article/details/105412940&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;BUUCTF：[WUSTCTF2020]girlfriend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192238168.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192238168.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;p&gt;得到的 flag 请包上 flag{} 提交。
感谢 Iven Huang 师傅供题。
比赛平台：https://ctfgame.w-ais.cn/&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192235955.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192235955.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a>
<a href="https://blog.csdn.net/mochu7777777/article/details/105412940"target="_blank" rel="noopener noreferrer">BUUCTF：[WUSTCTF2020]girlfriend</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192238168.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192238168.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<p>得到的 flag 请包上 flag{} 提交。
感谢 Iven Huang 师傅供题。
比赛平台：https://ctfgame.w-ais.cn/</p>
<h3 id="密文">密文：</h3>
<p>下载附件，得到attachment .zip压缩包，解压后得到girlfriend.zip压缩包。最后材料是girlfriend.wav和题目描述.txt。</p>
<p>题目描述.txt内容如下：

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192239778.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192239778.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<h3 id="解题思路">解题思路：</h3>
<p>1、尝试听girlfriend.wav音频文件，刚开始没有听出是手机键盘拨号声。后面看题解，得知是DTMF拨号音识别。
<strong>Audacity显示</strong>

<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192240867.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192240867.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用dtmf2num程序识别拨号内容
<a href="https://link.csdn.net/?from_id=105412940&amp;target=http://aluigi.altervista.org/mytoolz/dtmf2num.zip"target="_blank" rel="noopener noreferrer">dtmf2num下载地址</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dtmf2num.exe ..<span class="se">\资</span>料<span class="se">\g</span>irlfriend.wav
</span></span><span class="line"><span class="cl">dtmf2num.exe 音频文件位置
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192242495.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192242495.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>得到如下的按键顺序、次数</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">999*666*88*2*777*33*6*999*4*4444*777*555*333*777*444*33*66*3*7777
</span></span></code></pre></td></tr></table>
</div>
</div><p>2、对应手机上九宫格输入，得到最后的字符串为 <code>YOUAREMYGIRLFRIENDS</code></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192244079.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228192244079.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">YOUAREMYGIRLFRIENDS
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="m">999</span>     ---&gt;   y
</span></span><span class="line"><span class="cl"><span class="m">666</span>     ---&gt;   o
</span></span><span class="line"><span class="cl"><span class="m">88</span>      ---&gt;   u
</span></span><span class="line"><span class="cl"><span class="m">2</span>       ---&gt;   a
</span></span><span class="line"><span class="cl"><span class="m">777</span>     ---&gt;   r
</span></span><span class="line"><span class="cl"><span class="m">33</span>      ---&gt;   e
</span></span><span class="line"><span class="cl"><span class="m">6</span>       ---&gt;   m
</span></span><span class="line"><span class="cl"><span class="m">999</span>     ---&gt;   y
</span></span><span class="line"><span class="cl"><span class="m">4</span>       ---&gt;   g
</span></span><span class="line"><span class="cl"><span class="m">4444</span>    ---&gt;   i
</span></span><span class="line"><span class="cl"><span class="m">777</span>     ---&gt;   r
</span></span><span class="line"><span class="cl"><span class="m">555</span>     ---&gt;   l
</span></span><span class="line"><span class="cl"><span class="m">333</span>     ---&gt;   f
</span></span><span class="line"><span class="cl"><span class="m">777</span>     ---&gt;   r
</span></span><span class="line"><span class="cl"><span class="m">444</span>     ---&gt;   i
</span></span><span class="line"><span class="cl"><span class="m">33</span>      ---&gt;   e
</span></span><span class="line"><span class="cl"><span class="m">66</span>      ---&gt;   n
</span></span><span class="line"><span class="cl"><span class="m">3</span>       ---&gt;   d
</span></span><span class="line"><span class="cl"><span class="m">7777</span>    ---&gt;   s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">youaremygirlfriends
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="flag">flag：</h3>
<p>大写提交不成功，切换小写</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flag<span class="o">{</span>youaremygirlfriends<span class="o">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>网络安全 DVWA通关指南 DVWA File Inclusion（文件包含）</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-file-inclusion%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB/</link>
      <pubDate>Mon, 30 Sep 2024 12:23:22 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-file-inclusion%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB/</guid>
      <description>&lt;h2 id=&#34;dvwa-file-inclusion文件包含&#34;&gt;DVWA File Inclusion（文件包含）&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;本地文件包含lfi&#34;&gt;本地文件包含(LFI)&lt;/h3&gt;
&lt;p&gt;文件包含漏洞的产生原因是 PHP 语言在通过引入文件时，引用的文件名，用户可控，由于传入的文件名没有经过合理的校验，或者校验被绕过，从而操作了预想之外的文件，就可能导致意外的文件泄露甚至恶意的代码注入。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-file-inclusion文件包含">DVWA File Inclusion（文件包含）</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<blockquote>
<h3 id="本地文件包含lfi">本地文件包含(LFI)</h3>
<p>文件包含漏洞的产生原因是 PHP 语言在通过引入文件时，引用的文件名，用户可控，由于传入的文件名没有经过合理的校验，或者校验被绕过，从而操作了预想之外的文件，就可能导致意外的文件泄露甚至恶意的代码注入。</p>
<p>当被包含的文件在服务器本地时，就形成的本地文件包含漏洞。</p>
<h4 id="漏洞利用">漏洞利用</h4>
<p><strong>利用条件：</strong></p>
<blockquote>
<p>（1）include()等函数通过动态变量的方式引入包含文件； （2）用户能够控制该动态变量。</p>
</blockquote>
<h3 id="远程文件包含rfl">远程文件包含(RFL)</h3>
<p>服务器通过 PHP 的特性（函数）去包含任意文件时，由于要包含的这个文件来源过滤不严格，</p>
<p>从而可以去包含一个恶意文件，攻击者就可以远程构造一个特定的恶意文件达到攻击目的。</p>
<h4 id="漏洞利用-1">漏洞利用</h4>
<p><strong>条件：</strong> <code>php.ini</code> 中开启 <code>allow_url_include</code> 、 <code>allow_url_fopen</code> 选项。</p>
<h3 id="修复建议">修复建议</h3>
<blockquote>
<ol>
<li>
<p>禁止远程文件包含 <code>allow_url_include=off</code></p>
</li>
<li>
<p>配置 <code>open_basedir=指定目录</code> ，限制访问区域。</p>
</li>
<li>
<p>过滤 <code>../</code> 等特殊符号</p>
</li>
<li>
<p>修改Apache日志文件的存放地址</p>
</li>
<li>
<p>开启魔术引号 <code>magic_quotes_qpc=on</code></p>
</li>
<li>
<p>尽量不要使用动态变量调用文件，直接写要包含的文件。</p>
</li>
</ol>
</blockquote>
</blockquote>
<h2 id="low">Low</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>没有任何过滤措施存在，同时使用GET方法传递参数。尝试查看file1.php文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312282.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312282.png" 
             alt="image-20240517101641776" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、在URL输入不存在的路径，提交出现报错信息，得到文件的绝对路径</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Warning: include(iviirjgiegij): failed to open stream: No such file or directory in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Warning: include(): Failed opening &#39;iviirjgiegij&#39; for inclusion (include_path=&#39;.;C:\php\pear;../../external/phpids/0.6/lib/&#39;) in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312283.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312283.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、使用相对路径访问fi.php，路径为D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php。</p>
<p>相对路径计算如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">..\..\hackable\flags\fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>成功访问到fi.php文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312284.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312284.png" 
             alt="image-20240517102538336" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="medium">Medium</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Input validation
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span> <span class="s2">&#34;http://&#34;</span><span class="p">,</span> <span class="s2">&#34;https://&#34;</span> <span class="p">),</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 使用str_replace函数移除$file字符串中所有的&#34;http://&#34;和&#34;https://&#34;子串。
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span> <span class="s2">&#34;../&#34;</span><span class="p">,</span> <span class="s2">&#34;..</span><span class="se">\&#34;</span><span class="s2">&#34;</span> <span class="p">),</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 继续使用str_replace函数，这次移除$file中所有向上一级目录的路径指示符，无论是&#34;../&#34;还是&#34;..\&#34;（考虑到不同操作系统的路径分隔符）。
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、使用str_replace函数对输入的文件路径进行过滤，因为使用的是str_replace函数，所以可以使用双写绕过。构造Payload如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">..././..././hackable/flags/fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>拼接到URL中提交，绕过成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312285.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312285.png" 
             alt="image-20240517103347816" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="high">High</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Input validation
</span></span></span><span class="line"><span class="cl"><span class="c1">// 使用fnmatch函数检查$file是否匹配模式&#34;file*&#34;
</span></span></span><span class="line"><span class="cl"><span class="c1">// fnmatch用于实现shell风格的通配符匹配，这里的&#34;file*&#34;会匹配以&#34;file&#34;开头的任何字符串。
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="o">!</span><span class="nx">fnmatch</span><span class="p">(</span> <span class="s2">&#34;file*&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;include.php&#34;</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// This isn&#39;t the page we want!
</span></span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;ERROR: File not found!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、使用fnmatch函数函数，虽然只能包含&quot;file&quot;开头的文件，但我们可以使用file伪协议读取到文件。（这个地方需要文件的绝对路径，与Low级别不同，这里的报错信息需要提交以file开头的不存在文件或路径，否则会返回统一错误页面）</p>
<p>构造Payload如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">file:///D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>拼接到URL中提交，包含文件成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312286.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312286.png" 
             alt="image-20240517104929712" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="impossible">Impossible</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Only allow include.php or file{1..3}.php
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;include.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file1.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file2.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file3.php&#34;</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// This isn&#39;t the page we want!
</span></span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;ERROR: File not found!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>网络安全 DVWA通关指南 DVWA DOM Based Cross Site Scripting (DOM型 XSS)</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-dom-based-cross-site-scripting-dom%E5%9E%8B-xss/</link>
      <pubDate>Sun, 29 Sep 2024 12:23:38 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-dom-based-cross-site-scripting-dom%E5%9E%8B-xss/</guid>
      <description>&lt;h2 id=&#34;dvwa-dom-based-cross-site-scripting-dom型-xss&#34;&gt;DVWA DOM Based Cross Site Scripting (DOM型 XSS)&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244123.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244123.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;xss跨站原理&#34;&gt;XSS跨站原理&lt;/h3&gt;
&lt;p&gt;当应用程序发送给浏览器的页面中包含用户提交的数据，但没有经过适当验证或转义时，就会导致跨站脚本漏洞。这个“跨”实际上属于浏览器的特性，而不是缺陷;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-dom-based-cross-site-scripting-dom型-xss">DVWA DOM Based Cross Site Scripting (DOM型 XSS)</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244123.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244123.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<blockquote>
<h3 id="xss跨站原理">XSS跨站原理</h3>
<p>当应用程序发送给浏览器的页面中包含用户提交的数据，但没有经过适当验证或转义时，就会导致跨站脚本漏洞。这个“跨”实际上属于浏览器的特性，而不是缺陷;</p>
<p>浏览器同源策略：只有发布Cookie的网站才能读取Cookie。</p>
<p>会造成Cookie窃取、劫持用户Web行为、结合CSRF进行针对性攻击等危害</p>
<h4 id="dom型">DOM型</h4>
<p>基于文档对象模型(Document Object Model)的一种漏洞；</p>
<p>DOM型与反射型类似，都需要攻击者诱使用户点击专门设计的URL；</p>
<p>Dom型 xss 是通过 url 传入参数去控制触发的；</p>
<p>Dom型返回页面源码中看不到输入的payload， 而是保存在浏览器的DOM中。</p>
</blockquote>
<h3 id="low">Low</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># No protections, anything goes
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">//没有任何防御措施
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244124.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244124.png" 
             alt="image-20240425141612735" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、修改default，在URL拼接Payload</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;script&gt;alert(/XSS/)&lt;/script&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244125.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244125.png" 
             alt="image-20240425141658717" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="medium">Medium</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Is there any input?
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span> <span class="nx">array_key_exists</span><span class="p">(</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span> <span class="nv">$_GET</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">is_null</span> <span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;default&#39;</span> <span class="p">])</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$default</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;default&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="c1"># Do not allow script tags
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="p">(</span><span class="nx">stripos</span> <span class="p">(</span><span class="nv">$default</span><span class="p">,</span> <span class="s2">&#34;&lt;script&#34;</span><span class="p">)</span> <span class="o">!==</span> <span class="k">false</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">header</span> <span class="p">(</span><span class="s2">&#34;location: ?default=English&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>增加对&quot;&lt;script&quot;字符的过滤，查看前端代码</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244126.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244126.png" 
             alt="image-20240425143147799" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、构造闭合&quot;option&quot;和&quot;select&quot;标签，执行弹出&quot;/xss/&ldquo;的语句</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;/optin&gt;&lt;/select&gt;&lt;img src = 1 onerror = alert(/xss/)&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244127.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244127.png" 
             alt="image-20240616160139823" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244128.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244128.png" 
             alt="image-20240616161058852" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="high">High</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Is there any input?
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span> <span class="nx">array_key_exists</span><span class="p">(</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span> <span class="nv">$_GET</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">is_null</span> <span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;default&#39;</span> <span class="p">])</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1"># White list the allowable languages
</span></span></span><span class="line"><span class="cl">	<span class="k">switch</span> <span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;default&#39;</span><span class="p">])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="k">case</span> <span class="s2">&#34;French&#34;</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">		<span class="k">case</span> <span class="s2">&#34;English&#34;</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">		<span class="k">case</span> <span class="s2">&#34;German&#34;</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">		<span class="k">case</span> <span class="s2">&#34;Spanish&#34;</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">			<span class="c1"># ok
</span></span></span><span class="line"><span class="cl">			<span class="k">break</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="k">default</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">			<span class="nx">header</span> <span class="p">(</span><span class="s2">&#34;location: ?default=English&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">			<span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、在注入的 payload 中加入注释符 “#”，注释后边的内容不会发送到服务端，但是会被前端代码所执行。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">(空格)#&lt;script&gt;alert(/xss/)&lt;/script&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244129.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244129.png" 
             alt="image-20240616161314789" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244130.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165244130.png" 
             alt="image-20240616161408461" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="impossible">Impossible</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Don&#39;t need to do anything, protction handled on the client side
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"># 大多数情况下浏览器都会对 URL 中的内容进行编码，这会阻止任何注入的 JavaScript 被执行。
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>网络安全 DVWA通关指南 DVWA Command Injection（命令注入）</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-command-injection%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5/</link>
      <pubDate>Sat, 28 Sep 2024 12:23:57 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-command-injection%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5/</guid>
      <description>&lt;h2 id=&#34;dvwacommand-injection命令注入&#34;&gt;DVWACommand Injection（命令注入）&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229035.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229035.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;low&#34;&gt;Low&lt;/h3&gt;
&lt;p&gt;1、分析网页源代码&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 当表单提交按钮（Submit）被触发时执行以下代码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_POST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Submit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获取用户通过POST方式提交的IP地址数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 注意：此处使用$_REQUEST可能会受到GET和POST两种方式的影响，为了安全性建议明确指定来源（如$_POST）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_REQUEST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ip&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 检查当前服务器的操作系统类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stristr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php_uname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Windows NT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 如果是Windows操作系统，则构建用于执行ping命令的字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 使用单引号包围命令并在末尾添加从用户输入获取的IP地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 注意：这段代码存在命令注入风险，因为未对$user变量进行任何过滤或转义
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;shell_exec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ping &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 否则，认为是类*nix系统（Unix/Linux/Mac OS等）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 构建用于执行ping命令的字符串，&amp;#39;-c 4&amp;#39; 参数表示发送4个ICMP请求包
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 同样，这段代码也存在命令注入风险
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;shell_exec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ping -c 4 &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 将执行命令的结果赋值给 $cmd 变量，并将其作为HTML预格式化的文本显示给用户
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 这里展示了命令执行结果，但也暴露了潜在的安全风险
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;pre&amp;gt;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$cmd&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;/pre&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;2、网页对参数没有任何过滤，可以使用&amp;quot;&amp;amp;“、”&amp;amp;&amp;amp;“、”|“、”||&amp;ldquo;逻辑连接符连接命令，直接执行命令。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwacommand-injection命令注入">DVWACommand Injection（命令注入）</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229035.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229035.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<h3 id="low">Low</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 当表单提交按钮（Submit）被触发时执行以下代码
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;Submit&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取用户通过POST方式提交的IP地址数据
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 注意：此处使用$_REQUEST可能会受到GET和POST两种方式的影响，为了安全性建议明确指定来源（如$_POST）
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">&#39;ip&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 检查当前服务器的操作系统类型
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">stristr</span><span class="p">(</span><span class="nx">php_uname</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="s1">&#39;Windows NT&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果是Windows操作系统，则构建用于执行ping命令的字符串
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 使用单引号包围命令并在末尾添加从用户输入获取的IP地址
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 注意：这段代码存在命令注入风险，因为未对$user变量进行任何过滤或转义
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 否则，认为是类*nix系统（Unix/Linux/Mac OS等）
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 构建用于执行ping命令的字符串，&#39;-c 4&#39; 参数表示发送4个ICMP请求包
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 同样，这段代码也存在命令注入风险
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping -c 4 &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 将执行命令的结果赋值给 $cmd 变量，并将其作为HTML预格式化的文本显示给用户
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 这里展示了命令执行结果，但也暴露了潜在的安全风险
</span></span></span><span class="line"><span class="cl">    <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;</span><span class="si">{</span><span class="nv">$cmd</span><span class="si">}</span><span class="s2">&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、网页对参数没有任何过滤，可以使用&quot;&amp;“、”&amp;&amp;“、”|“、”||&ldquo;逻辑连接符连接命令，直接执行命令。</p>
<blockquote>
<p>连接符左右是否有空格没有影响</p>
<p>注意逻辑连接符的区别</p>
</blockquote>
<table>
  <thead>
      <tr>
          <th style="text-align: center">逻辑运算符</th>
          <th style="text-align: center">逻辑功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">&amp;(并且)</td>
          <td style="text-align: center">有false则false</td>
      </tr>
      <tr>
          <td style="text-align: center"></td>
          <td style="text-align: center">(或者)</td>
      </tr>
      <tr>
          <td style="text-align: center">!(非)</td>
          <td style="text-align: center">非false则true，非true则false</td>
      </tr>
      <tr>
          <td style="text-align: center">^(异或)</td>
          <td style="text-align: center">相同为false，不同为true</td>
      </tr>
      <tr>
          <td style="text-align: center">&amp;&amp;(短路与)</td>
          <td style="text-align: center">有false则false,若&amp;&amp;左边表达式或者值为false则右边不进行计算</td>
      </tr>
      <tr>
          <td style="text-align: center"></td>
          <td style="text-align: center"></td>
      </tr>
  </tbody>
</table>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">192.168.90.127 &amp;&amp; ipconfig
</span></span><span class="line"><span class="cl">192.168.90.127 &amp; ipconfig
</span></span><span class="line"><span class="cl">0.0.0.0 || ipconfig
</span></span><span class="line"><span class="cl">192.168.90.127 | ipconfig
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229036.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229036.png" 
             alt="image-20240429163848470" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、为了消除命令注入风险，需要对用户输入进行严格的过滤或转义。例如，可以使用escapeshellarg()函数对目标IP地址进行转义，如下所示：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="c1">// 对于Windows和*nix系统，都应先对用户输入进行转义
</span></span></span><span class="line"><span class="cl"><span class="nv">$target_sanitized</span> <span class="o">=</span> <span class="nx">escapeshellarg</span><span class="p">(</span><span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 然后构建命令
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">stristr</span><span class="p">(</span><span class="nx">php_uname</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="s1">&#39;Windows NT&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping &#39;</span> <span class="o">.</span> <span class="nv">$target_sanitized</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping -c 4 &#39;</span> <span class="o">.</span> <span class="nv">$target_sanitized</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="medium">Medium</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 当检测到表单已提交（即点击了Submit按钮）时执行以下代码
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;Submit&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取用户通过POST方法提交的IP地址数据
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 注意：这里使用$_REQUEST会同时接收GET和POST数据，若只期望POST数据，应使用$_POST[&#39;ip&#39;]
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">&#39;ip&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 创建黑名单字符数组，其中包含了可能导致命令注入的特殊字符（在这里是逻辑运算符）
</span></span></span><span class="line"><span class="cl">    <span class="nv">$substitutions</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;&amp;&amp;&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="c1">// 去除逻辑与符号，防止连续命令执行
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;;&#39;</span>  <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="c1">// 去除分号，防止多条命令执行
</span></span></span><span class="line"><span class="cl">    <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 使用str_replace函数替换掉用户输入中黑名单内的字符
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 这是一个初级防护措施，但并不能完全阻止所有类型的命令注入攻击
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span><span class="nx">array_keys</span><span class="p">(</span><span class="nv">$substitutions</span><span class="p">),</span> <span class="nv">$substitutions</span><span class="p">,</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 检测当前服务器的操作系统类型
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">stristr</span><span class="p">(</span><span class="nx">php_uname</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="s1">&#39;Windows NT&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果是Windows操作系统，则执行ping命令
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 否则，认为是类*nix系统（Unix/Linux/Mac OS等）
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 执行带有-c参数的ping命令，表示向目标主机发送4个数据包
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping -c 4 &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 将ping命令的输出结果以HTML预格式化的文本形式呈现给用户
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 虽然进行了部分字符过滤，但仍然需要注意此代码仍可能存在命令注入风险
</span></span></span><span class="line"><span class="cl">    <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;</span><span class="si">{</span><span class="nv">$cmd</span><span class="si">}</span><span class="s2">&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、网页将&rdquo;&amp;&amp;&ldquo;连接符过滤了，可以使用其他的逻辑连接符，命令注入成功。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">192.168.90.127 &amp; ipconfig
</span></span><span class="line"><span class="cl">0.0.0.0 || ipconfig
</span></span><span class="line"><span class="cl">192.168.90.127 | ipconfig
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229037.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229037.png" 
             alt="image-20240429171008470" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="high">High</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 当检测到表单已提交（Submit按钮已被点击）时执行以下代码
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;Submit&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取用户提交的IP地址输入，并使用trim函数去除首尾空白字符
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nx">trim</span><span class="p">(</span><span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">&#39;ip&#39;</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 定义一个黑名单字符数组，包含一些可能用于命令注入的特殊字符
</span></span></span><span class="line"><span class="cl">    <span class="nv">$substitutions</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;&amp;&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;&amp;&#34;（逻辑与符号，用于连接多个命令）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;;&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;;&#34;（命令分隔符，用于执行多条命令）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;| &#39;</span>  <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;| &#34;（管道符号，用于命令间通信）！！！我真的没看到这里居然有一个空格！！！
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;-&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;-&#34;（某些命令中的选项标志或组合命令）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;$&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;$&#34;（环境变量引用或bash命令执行）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;(&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;(&#34;（子shell执行或命令组）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;)&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;)&#34;（与&#34;(&#34;配套使用）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;`&#39;</span>   <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;`&#34;（命令替换）
</span></span></span><span class="line"><span class="cl">        <span class="s1">&#39;||&#39;</span>  <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>     <span class="c1">// 空字符替换&#34;||&#34;（逻辑或符号，用于命令执行失败时执行下一条命令）
</span></span></span><span class="line"><span class="cl">    <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 使用str_replace函数，将用户输入中黑名单内所有字符替换为空字符
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 这是一种针对命令注入的基本防御措施，但无法保证完全抵御所有攻击手法
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span><span class="nx">array_keys</span><span class="p">(</span><span class="nv">$substitutions</span><span class="p">),</span> <span class="nv">$substitutions</span><span class="p">,</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 判断当前操作系统类型
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">stristr</span><span class="p">(</span><span class="nx">php_uname</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="s1">&#39;Windows NT&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 若是Windows操作系统，则执行ping命令
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 否则，认为是类*nix系统（Unix/Linux/Mac OS等）
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 执行带有-c参数的ping命令，表示向目标主机发送4个数据包
</span></span></span><span class="line"><span class="cl">        <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping -c 4 &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 将ping命令执行的原始输出反馈给用户，以HTML预格式化的文本形式展示
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 尽管进行了字符过滤，但此代码依然存在命令注入的风险
</span></span></span><span class="line"><span class="cl">    <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;</span><span class="si">{</span><span class="nv">$cmd</span><span class="si">}</span><span class="s2">&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、真没想到黑名单字符数组中，&rsquo;| &lsquo;&lsquo;的后面多了一个空格，所以还是可以使用&rdquo;|&ldquo;连接符进行连接。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">192.168.90.127 |ipconfig
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229038.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165229038.png" 
             alt="image-20240429174030718" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="impossible">Impossible</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 当表单提交按钮（Submit）被触发时执行以下代码
</span></span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;Submit&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 验证Anti-CSRF令牌，防止跨站请求伪造攻击
</span></span></span><span class="line"><span class="cl">    <span class="nx">checkToken</span><span class="p">(</span><span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">&#39;user_token&#39;</span><span class="p">],</span> <span class="nv">$_SESSION</span><span class="p">[</span><span class="s1">&#39;session_token&#39;</span><span class="p">],</span> <span class="s1">&#39;index.php&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取用户输入的IP地址，并使用stripslashes函数去除反斜杠（\）以防止魔术引号攻击
</span></span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">&#39;ip&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span><span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 将IP地址拆分为四个八位字节（点分十进制形式）
</span></span></span><span class="line"><span class="cl">    <span class="nv">$octet</span> <span class="o">=</span> <span class="nx">explode</span><span class="p">(</span><span class="s2">&#34;.&#34;</span><span class="p">,</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 检查每个八位字节是否都是整数
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nx">is_numeric</span><span class="p">(</span><span class="nv">$octet</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nx">is_numeric</span><span class="p">(</span><span class="nv">$octet</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nx">is_numeric</span><span class="p">(</span><span class="nv">$octet</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nx">is_numeric</span><span class="p">(</span><span class="nv">$octet</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nx">sizeof</span><span class="p">(</span><span class="nv">$octet</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果所有四个八位字节均为整数，则重新组合IP地址
</span></span></span><span class="line"><span class="cl">        <span class="nv">$target</span> <span class="o">=</span> <span class="nv">$octet</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;.&#39;</span> <span class="o">.</span> <span class="nv">$octet</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;.&#39;</span> <span class="o">.</span> <span class="nv">$octet</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;.&#39;</span> <span class="o">.</span> <span class="nv">$octet</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 根据操作系统类型执行ping命令
</span></span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">stristr</span><span class="p">(</span><span class="nx">php_uname</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="s1">&#39;Windows NT&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="c1">// 如果是Windows操作系统
</span></span></span><span class="line"><span class="cl">            <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="c1">// 如果是*nix系统（如Unix/Linux/Mac OS）
</span></span></span><span class="line"><span class="cl">            <span class="nv">$cmd</span> <span class="o">=</span> <span class="nx">shell_exec</span><span class="p">(</span><span class="s1">&#39;ping -c 4 &#39;</span> <span class="o">.</span> <span class="nv">$target</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 将ping命令执行结果以HTML预格式化文本的形式返回给用户
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;</span><span class="si">{</span><span class="nv">$cmd</span><span class="si">}</span><span class="s2">&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 用户输入的不是有效的IP地址，显示错误消息
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s1">&#39;&lt;pre&gt;ERROR: You have entered an invalid IP.&lt;/pre&gt;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 生成新的Anti-CSRF令牌并存储到session中
</span></span></span><span class="line"><span class="cl"><span class="nx">generateSessionToken</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">**注释说明：**
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">- 此PHP脚本主要处理用户提交的IP地址，并执行ping命令检查其连通性。
</span></span></span><span class="line"><span class="cl"><span class="err">- 使用`checkToken`函数验证用户提交的Anti-CSRF令牌，确保请求来自合法用户而非第三方恶意伪造。
</span></span></span><span class="line"><span class="cl"><span class="err">- 获取用户输入的IP地址，并通过`stripslashes`函数移除可能存在的反斜杠，以防止SQL注入或其他基于字符串逃逸的攻击。
</span></span></span><span class="line"><span class="cl"><span class="err">- 将IP地址拆分成四个八位字节，然后逐一检查它们是否为数字，确保IP地址格式正确。
</span></span></span><span class="line"><span class="cl"><span class="err">- 根据服务器操作系统类型执行相应的ping命令，并将结果显示给用户。
</span></span></span><span class="line"><span class="cl"><span class="err">- 在脚本末尾调用`generateSessionToken`函数生成新的Anti-CSRF令牌，为后续请求提供保护。
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>网络安全 DVWA通关指南 DVWA Brute Force (爆破)</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-brute-force-%E7%88%86%E7%A0%B4/</link>
      <pubDate>Fri, 27 Sep 2024 12:24:23 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-brute-force-%E7%88%86%E7%A0%B4/</guid>
      <description>&lt;h2 id=&#34;dvwa-brute-force-爆破&#34;&gt;DVWA Brute Force (爆破)&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113338.jpeg&#34;&gt;
        &lt;img src=&#34;https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113338.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;low&#34;&gt;Low&lt;/h3&gt;
&lt;p&gt;1、分析网页源代码&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 检查是否存在&amp;#34;Login&amp;#34; GET 参数，这通常是提交登录表单后触发的动作
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;isset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_GET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Login&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获取POST方式提交的用户名
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_GET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;username&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 注意：这里应当使用 $_POST 而非 $_GET 来获取表单数据，因为登录通常涉及敏感信息，推荐使用 POST 方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获取POST方式提交的密码，并使用md5函数对其进行哈希加密（注意：MD5已经不再安全，应使用更安全的加密算法如bcrypt）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$pass&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_GET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 同上，此处应改为 $_POST[&amp;#39;password&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$pass&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pass&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 这里假设密码在数据库中是以MD5形式存储的
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 创建SQL查询语句，检查数据库中是否存在匹配的用户名和密码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT * FROM `users` WHERE user = &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; AND password = &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$pass&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 执行SQL查询，连接数据库并处理潜在错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;___mysqli_ston&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;die&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;pre&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;___mysqli_ston&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;___mysqli_ston&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$___mysqli_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_connect_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$___mysqli_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;/pre&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 检查查询结果是否成功且只有一条记录匹配（意味着用户名和密码正确）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_num_rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 获取匹配用户的详细信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$row&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_fetch_assoc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 提取用户头像URL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$avatar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avatar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 登录成功，构造欢迎消息并显示用户头像
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;p&amp;gt;Welcome to the password protected area &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;img src=&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$avatar&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; /&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 显示用户的头像图片
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 登录失败，输出错误提示信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;pre&amp;gt;&amp;lt;br /&amp;gt;Username and/or password incorrect.&amp;lt;/pre&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 关闭数据库连接
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$___mysqli_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqli_close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;___mysqli_ston&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$___mysqli_res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 结束 if(isset($_GET[&amp;#39;Login&amp;#39;]))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;2、使用管理员admin登录，密码尝试123，提示错误&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-brute-force-爆破">DVWA Brute Force (爆破)</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113338.jpeg">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113338.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<h3 id="low">Low</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 检查是否存在&#34;Login&#34; GET 参数，这通常是提交登录表单后触发的动作
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Login&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取POST方式提交的用户名
</span></span></span><span class="line"><span class="cl">    <span class="nv">$user</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;username&#39;</span> <span class="p">];</span> <span class="c1">// 注意：这里应当使用 $_POST 而非 $_GET 来获取表单数据，因为登录通常涉及敏感信息，推荐使用 POST 方法
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 获取POST方式提交的密码，并使用md5函数对其进行哈希加密（注意：MD5已经不再安全，应使用更安全的加密算法如bcrypt）
</span></span></span><span class="line"><span class="cl">    <span class="nv">$pass</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password&#39;</span> <span class="p">];</span> <span class="c1">// 同上，此处应改为 $_POST[&#39;password&#39;]
</span></span></span><span class="line"><span class="cl">    <span class="nv">$pass</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span> <span class="c1">// 这里假设密码在数据库中是以MD5形式存储的
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 创建SQL查询语句，检查数据库中是否存在匹配的用户名和密码
</span></span></span><span class="line"><span class="cl">    <span class="nv">$query</span>  <span class="o">=</span> <span class="s2">&#34;SELECT * FROM `users` WHERE user = &#39;</span><span class="si">$user</span><span class="s2">&#39; AND password = &#39;</span><span class="si">$pass</span><span class="s2">&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 执行SQL查询，连接数据库并处理潜在错误
</span></span></span><span class="line"><span class="cl">    <span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$query</span> <span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span> 
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> 
</span></span><span class="line"><span class="cl">        <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> 
</span></span><span class="line"><span class="cl">        <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> 
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;&lt;/pre&gt;&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 检查查询结果是否成功且只有一条记录匹配（意味着用户名和密码正确）
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span><span class="p">(</span> <span class="nv">$result</span> <span class="o">&amp;&amp;</span> <span class="nx">mysqli_num_rows</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 获取匹配用户的详细信息
</span></span></span><span class="line"><span class="cl">        <span class="nv">$row</span> <span class="o">=</span> <span class="nx">mysqli_fetch_assoc</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="c1">// 提取用户头像URL
</span></span></span><span class="line"><span class="cl">        <span class="nv">$avatar</span> <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">&#34;avatar&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 登录成功，构造欢迎消息并显示用户头像
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;Welcome to the password protected area </span><span class="si">{</span><span class="nv">$user</span><span class="si">}</span><span class="s2">&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;img src=</span><span class="se">\&#34;</span><span class="si">{</span><span class="nv">$avatar</span><span class="si">}</span><span class="se">\&#34;</span><span class="s2"> /&gt;&#34;</span><span class="p">;</span> <span class="c1">// 显示用户的头像图片
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 登录失败，输出错误提示信息
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;&lt;br /&gt;Username and/or password incorrect.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 关闭数据库连接
</span></span></span><span class="line"><span class="cl">    <span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="c1">// 结束 if(isset($_GET[&#39;Login&#39;]))
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、使用管理员admin登录，密码尝试123，提示错误</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113339.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113339.png" 
             alt="image-20240516161258388" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用Burp Suite抓包，将数据包发给Intruder（测试器），选择Sniper（狙击手）模式，选择password为有效载荷。</p>
<blockquote>
<p><strong>单字典(只有一个字典)</strong>
1.Sniper：按顺序一个一个参数依次遍历。
2.Battering ram：每个参数同时遍历同一个字典，两个参数的值相同。</p>
<p><strong>多字典(有多少参数就有多少字典）</strong>
1.Pitchfork：多个参数同时进行遍历，只是一个选字典1，一个选字典2（相当于50m赛跑同时出发，只是赛道不同，互不干扰。爆破次数取决于最短的字典长度）
2.Cluster bomb：有点像两个嵌套的for循环，参数i和参数j，i=0，然后j要从0-10全部跑完，然后i=1，然后j再从0-10跑完，一对多，多次遍历</p>
</blockquote>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113340.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113340.png" 
             alt="image-20240516161616103" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113341.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113341.png" 
             alt="image-20240430155738815" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用字典进行爆破，字典可以自己制作，也可以网上直接下载，等待片刻爆破完成，使用爆破出的密码就能登录。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113342.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113342.png" 
             alt="image-20240516173612338" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113343.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113343.png" 
             alt="image-20240516173933317" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="medium">Medium</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Login&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise username input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;username&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$user</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise password input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check the database
</span></span></span><span class="line"><span class="cl">	<span class="nv">$query</span>  <span class="o">=</span> <span class="s2">&#34;SELECT * FROM `users` WHERE user = &#39;</span><span class="si">$user</span><span class="s2">&#39; AND password = &#39;</span><span class="si">$pass</span><span class="s2">&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$query</span> <span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span> <span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&lt;/pre&gt;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="nv">$result</span> <span class="o">&amp;&amp;</span> <span class="nx">mysqli_num_rows</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Get users details
</span></span></span><span class="line"><span class="cl">		<span class="nv">$row</span>    <span class="o">=</span> <span class="nx">mysqli_fetch_assoc</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$avatar</span> <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">&#34;avatar&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Login successful
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;Welcome to the password protected area </span><span class="si">{</span><span class="nv">$user</span><span class="si">}</span><span class="s2">&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;img src=</span><span class="se">\&#34;</span><span class="si">{</span><span class="nv">$avatar</span><span class="si">}</span><span class="se">\&#34;</span><span class="s2"> /&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Login failed
</span></span></span><span class="line"><span class="cl">		<span class="nx">sleep</span><span class="p">(</span> <span class="mi">2</span> <span class="p">);</span> <span class="c1">// 当登录验证失败时界面将睡眠 2 秒
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;&lt;br /&gt;Username and/or password incorrect.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、密码验证方面，增加验证失败睡眠两秒的限制，这会加大爆破所需要的时间。但只要时间充足，爆破出密码不是问题。</p>
<p>试了一下，果然很慢。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113344.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113344.png" 
             alt="image-20240516174443533" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="high">High</h3>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Login&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Check Anti-CSRF token
</span></span></span><span class="line"><span class="cl">	<span class="nx">checkToken</span><span class="p">(</span> <span class="nv">$_REQUEST</span><span class="p">[</span> <span class="s1">&#39;user_token&#39;</span> <span class="p">],</span> <span class="nv">$_SESSION</span><span class="p">[</span> <span class="s1">&#39;session_token&#39;</span> <span class="p">],</span> <span class="s1">&#39;index.php&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise username input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;username&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$user</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$user</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise password input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check database
</span></span></span><span class="line"><span class="cl">	<span class="nv">$query</span>  <span class="o">=</span> <span class="s2">&#34;SELECT * FROM `users` WHERE user = &#39;</span><span class="si">$user</span><span class="s2">&#39; AND password = &#39;</span><span class="si">$pass</span><span class="s2">&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$query</span> <span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span> <span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&lt;/pre&gt;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="nv">$result</span> <span class="o">&amp;&amp;</span> <span class="nx">mysqli_num_rows</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Get users details
</span></span></span><span class="line"><span class="cl">		<span class="nv">$row</span>    <span class="o">=</span> <span class="nx">mysqli_fetch_assoc</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$avatar</span> <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span><span class="s2">&#34;avatar&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Login successful
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;Welcome to the password protected area </span><span class="si">{</span><span class="nv">$user</span><span class="si">}</span><span class="s2">&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;img src=</span><span class="se">\&#34;</span><span class="si">{</span><span class="nv">$avatar</span><span class="si">}</span><span class="se">\&#34;</span><span class="s2"> /&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Login failed
</span></span></span><span class="line"><span class="cl">		<span class="nx">sleep</span><span class="p">(</span> <span class="nx">rand</span><span class="p">(</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3</span> <span class="p">)</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;&lt;br /&gt;Username and/or password incorrect.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Generate Anti-CSRF token
</span></span></span><span class="line"><span class="cl"><span class="nx">generateSessionToken</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、进入Position模块，选择Attacktype为Pitchfork模式，选择password和user_token为爆破对象</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113345.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113345.png" 
             alt="image-20240605111002633" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>进入Resource Pool模块，</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113346.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113346.png" 
             alt="image-20240605111117373" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>进入Options模块，找到Grep - Extract选项卡，添加一个正则表达式匹配返回的user_token</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113347.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113347.png" 
             alt="image-20240605111153105" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>点击Refetch response，从response中找到user_token并选中</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113348.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113348.png" 
             alt="image-20240605111312704" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113349.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113349.png" 
             alt="image-20240605111501473" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>载入字典</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113350.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113350.png" 
             alt="image-20240605111405891" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>第二个参数&quot;token&quot;选择从返回包匹配，填入当前token</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113351.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113351.png" 
             alt="image-20240605111547847" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>爆破成功，登录成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113352.png">
        <img src="https://raw.githubusercontent.com/yuexuan521/image/main/20251225165113352.png" 
             alt="image-20240605110902881" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="impossible">Impossible</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span><span class="lnt">72
</span><span class="lnt">73
</span><span class="lnt">74
</span><span class="lnt">75
</span><span class="lnt">76
</span><span class="lnt">77
</span><span class="lnt">78
</span><span class="lnt">79
</span><span class="lnt">80
</span><span class="lnt">81
</span><span class="lnt">82
</span><span class="lnt">83
</span><span class="lnt">84
</span><span class="lnt">85
</span><span class="lnt">86
</span><span class="lnt">87
</span><span class="lnt">88
</span><span class="lnt">89
</span><span class="lnt">90
</span><span class="lnt">91
</span><span class="lnt">92
</span><span class="lnt">93
</span><span class="lnt">94
</span><span class="lnt">95
</span><span class="lnt">96
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span> <span class="s1">&#39;Login&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Check Anti-CSRF token
</span></span></span><span class="line"><span class="cl">	<span class="nx">checkToken</span><span class="p">(</span> <span class="nv">$_REQUEST</span><span class="p">[</span> <span class="s1">&#39;user_token&#39;</span> <span class="p">],</span> <span class="nv">$_SESSION</span><span class="p">[</span> <span class="s1">&#39;session_token&#39;</span> <span class="p">],</span> <span class="s1">&#39;index.php&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise username input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="nv">$_POST</span><span class="p">[</span> <span class="s1">&#39;username&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$user</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$user</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$user</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise password input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nv">$_POST</span><span class="p">[</span> <span class="s1">&#39;password&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Default values
</span></span></span><span class="line"><span class="cl">	<span class="nv">$total_failed_login</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$lockout_time</span>       <span class="o">=</span> <span class="mi">15</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$account_locked</span>     <span class="o">=</span> <span class="k">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check the database (Check user information)
</span></span></span><span class="line"><span class="cl">	<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;SELECT failed_login, last_login FROM users WHERE user = (:user) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$row</span> <span class="o">=</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">fetch</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check to see if the user has been locked out.
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">rowCount</span><span class="p">()</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span> <span class="nv">$row</span><span class="p">[</span> <span class="s1">&#39;failed_login&#39;</span> <span class="p">]</span> <span class="o">&gt;=</span> <span class="nv">$total_failed_login</span> <span class="p">)</span> <span class="p">)</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// User locked out.  Note, using this method would allow for user enumeration!
</span></span></span><span class="line"><span class="cl">		<span class="c1">//$html .= &#34;&lt;pre&gt;&lt;br /&gt;This account has been locked due to too many incorrect logins.&lt;/pre&gt;&#34;;
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Calculate when the user would be allowed to login again
</span></span></span><span class="line"><span class="cl">		<span class="nv">$last_login</span> <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span> <span class="s1">&#39;last_login&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$last_login</span> <span class="o">=</span> <span class="nx">strtotime</span><span class="p">(</span> <span class="nv">$last_login</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$timeout</span>    <span class="o">=</span> <span class="nx">strtotime</span><span class="p">(</span> <span class="s2">&#34;</span><span class="si">{</span><span class="nv">$last_login</span><span class="si">}</span><span class="s2"> +</span><span class="si">{</span><span class="nv">$lockout_time</span><span class="si">}</span><span class="s2"> minutes&#34;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$timenow</span>    <span class="o">=</span> <span class="nx">strtotime</span><span class="p">(</span> <span class="s2">&#34;now&#34;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Check to see if enough time has passed, if it hasn&#39;t locked the account
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nv">$timenow</span> <span class="o">&gt;</span> <span class="nv">$timeout</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$account_locked</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check the database (if username matches the password)
</span></span></span><span class="line"><span class="cl">	<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;SELECT * FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:password&#39;</span><span class="p">,</span> <span class="nv">$pass</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$row</span> <span class="o">=</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">fetch</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// If its a valid login...
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">rowCount</span><span class="p">()</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span> <span class="nv">$account_locked</span> <span class="o">==</span> <span class="k">false</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Get users details
</span></span></span><span class="line"><span class="cl">		<span class="nv">$avatar</span>       <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span> <span class="s1">&#39;avatar&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$failed_login</span> <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span> <span class="s1">&#39;failed_login&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$last_login</span>   <span class="o">=</span> <span class="nv">$row</span><span class="p">[</span> <span class="s1">&#39;last_login&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Login successful
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;Welcome to the password protected area &lt;em&gt;</span><span class="si">{</span><span class="nv">$user</span><span class="si">}</span><span class="s2">&lt;/em&gt;&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;img src=</span><span class="se">\&#34;</span><span class="si">{</span><span class="nv">$avatar</span><span class="si">}</span><span class="se">\&#34;</span><span class="s2"> /&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Had the account been locked out since last login?
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nv">$failed_login</span> <span class="o">&gt;=</span> <span class="nv">$total_failed_login</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;&lt;em&gt;Warning&lt;/em&gt;: Someone might of been brute forcing your account.&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;p&gt;Number of login attempts: &lt;em&gt;</span><span class="si">{</span><span class="nv">$failed_login</span><span class="si">}</span><span class="s2">&lt;/em&gt;.&lt;br /&gt;Last login attempt was at: &lt;em&gt;</span><span class="si">${</span><span class="nv">last_login</span><span class="si">}</span><span class="s2">&lt;/em&gt;.&lt;/p&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Reset bad login count
</span></span></span><span class="line"><span class="cl">		<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;UPDATE users SET failed_login = &#34;0&#34; WHERE user = (:user) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Login failed
</span></span></span><span class="line"><span class="cl">		<span class="nx">sleep</span><span class="p">(</span> <span class="nx">rand</span><span class="p">(</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span> <span class="p">)</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Give the user some feedback
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;&lt;br /&gt;Username and/or password incorrect.&lt;br /&gt;&lt;br/&gt;Alternative, the account has been locked because of too many failed logins.&lt;br /&gt;If this is the case, &lt;em&gt;please try again in </span><span class="si">{</span><span class="nv">$lockout_time</span><span class="si">}</span><span class="s2"> minutes&lt;/em&gt;.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Update bad login count
</span></span></span><span class="line"><span class="cl">		<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;UPDATE users SET failed_login = (failed_login + 1) WHERE user = (:user) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Set the last login time
</span></span></span><span class="line"><span class="cl">	<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;UPDATE users SET last_login = now() WHERE user = (:user) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Generate Anti-CSRF token
</span></span></span><span class="line"><span class="cl"><span class="nx">generateSessionToken</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>网络安全 DVWA通关指南 Cross Site Request Forgery (CSRF)</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-cross-site-request-forgery-csrf/</link>
      <pubDate>Thu, 26 Sep 2024 12:24:47 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-cross-site-request-forgery-csrf/</guid>
      <description>&lt;h2 id=&#34;dvwa-cross-site-request-forgery-csrf&#34;&gt;DVWA Cross Site Request Forgery (CSRF)&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959091.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959091.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;CSRF是跨站请求伪造攻击，由客户端发起，是由于没有在执行关键操作时，进行 &lt;code&gt;是否由用户自愿发起的&lt;/code&gt; 确认攻击者通过用户的浏览器来注入额外的网络请求，来破坏一个网站会话的完整性。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-cross-site-request-forgery-csrf">DVWA Cross Site Request Forgery (CSRF)</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959091.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959091.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<blockquote>
<p>CSRF是跨站请求伪造攻击，由客户端发起，是由于没有在执行关键操作时，进行 <code>是否由用户自愿发起的</code> 确认攻击者通过用户的浏览器来注入额外的网络请求，来破坏一个网站会话的完整性。</p>
<p>比如某网站 <strong>用户信息修改</strong> 功能，没有验证Referer也没添加Token，攻击者可以用HTML构造恶意代码提交POST请求，诱骗已经登陆的受害者点击，可以直接修改用户信息</p>
<p><strong>修复建议</strong></p>
<blockquote>
<ul>
<li>
<p>验证Referer</p>
</li>
<li>
<p>添加token</p>
</li>
</ul>
</blockquote>
</blockquote>
<h3 id="dvwa-low-级别-csrf">DVWA Low 级别 CSRF</h3>
<p>0、分析网页源代码（路径：“D:\phpstudy_pro\DVWA-master\vulnerabilities\csrf\source\low.php”）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;Change&#39;</span><span class="p">]))</span> <span class="p">{</span> <span class="c1">// 检查是否有请求更改密码的动作
</span></span></span><span class="line"><span class="cl">    <span class="c1">// 获取用户输入的新密码和确认密码
</span></span></span><span class="line"><span class="cl">    <span class="nv">$pass_new</span>  <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;password_new&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$pass_conf</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;password_conf&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 检查两次输入的密码是否匹配
</span></span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nv">$pass_new</span> <span class="o">==</span> <span class="nv">$pass_conf</span><span class="p">)</span> <span class="p">{</span> 
</span></span><span class="line"><span class="cl">        <span class="c1">// 密码匹配
</span></span></span><span class="line"><span class="cl">        <span class="c1">// 防止SQL注入，转义新密码字符串
</span></span></span><span class="line"><span class="cl">        <span class="nv">$pass_new</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span> <span class="nv">$pass_new</span><span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="c1">// 对新密码进行MD5哈希加密（注意：MD5加密在此处已经过时，不建议用于存储密码）
</span></span></span><span class="line"><span class="cl">        <span class="nv">$pass_new</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span><span class="nv">$pass_new</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 构造SQL更新语句，更新当前登录用户（由dvwaCurrentUser()函数获取）的密码
</span></span></span><span class="line"><span class="cl">        <span class="nv">$insert</span> <span class="o">=</span> <span class="s2">&#34;UPDATE `users` SET password = &#39;</span><span class="si">$pass_new</span><span class="s2">&#39; WHERE user = &#39;&#34;</span> <span class="o">.</span> <span class="nx">dvwaCurrentUser</span><span class="p">()</span> <span class="o">.</span> <span class="s2">&#34;&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 执行SQL查询
</span></span></span><span class="line"><span class="cl">        <span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span> <span class="nv">$insert</span><span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span><span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&lt;/pre&gt;&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果密码成功更改，则反馈给用户
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Password Changed.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果两次输入的密码不匹配，则反馈错误信息
</span></span></span><span class="line"><span class="cl">        <span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Passwords did not match.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 关闭数据库连接
</span></span></span><span class="line"><span class="cl">    <span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>1、选择DVWA的CSRF，修改密码为111，提交后观察到网站链接发生变化</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">http://dvwa/vulnerabilities/csrf/?password_new=111&amp;password_conf=111&amp;Change=Change#
</span></span></code></pre></td></tr></table>
</div>
</div><p>观察链接，认为使用get方式提交修改密码参数，只要三个参数符合就可以执行密码修改的操作</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959092.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959092.png" 
             alt="image-20240415193519864" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、打开一个新标签页，在地址栏输入 <code>http://dvwa/vulnerabilities/csrf/?password_new=111&amp;password_conf=111&amp;Change=Change#</code> ，回车后，进入DVWA中并提示Password Changed，修改密码成功。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959093.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959093.png" 
             alt="image-20240415194631245" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959095.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959095.png" 
             alt="image-20240415194532633" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、可以通过将长连接转换为短链接的方法，诱使用户点击链接，通过 <a href="https://uutool.cn/dwz/"target="_blank" rel="noopener noreferrer">在线工具</a> 转换</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959096.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959096.png" 
             alt="image-20240415194928196" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="dvwa-medium-级别-csrf">DVWA Medium 级别 CSRF</h3>
<p>0、分析网页源代码（路径：“D:\phpstudy_pro\DVWA-master\vulnerabilities\csrf\source\medium.php”）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Change&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Checks to see where the request came from
</span></span></span><span class="line"><span class="cl">    <span class="c1">//检查$_SERVER[&#39;HTTP_REFERER&#39;]，看看请求是否来自包含当前服务器名称$_SERVER[&#39;SERVER_NAME&#39;]的地址。stripos函数用于查找HTTP_REFERER是否包含服务器名
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="nx">stripos</span><span class="p">(</span> <span class="nv">$_SERVER</span><span class="p">[</span> <span class="s1">&#39;HTTP_REFERER&#39;</span> <span class="p">]</span> <span class="p">,</span><span class="nv">$_SERVER</span><span class="p">[</span> <span class="s1">&#39;SERVER_NAME&#39;</span> <span class="p">])</span> <span class="o">!==</span> <span class="k">false</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Get input
</span></span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span>  <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_new&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$pass_conf</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_conf&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Do the passwords match?
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="o">==</span> <span class="nv">$pass_conf</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// They do!
</span></span></span><span class="line"><span class="cl">			<span class="nv">$pass_new</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass_new</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$pass_new</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">			<span class="c1">// Update the database
</span></span></span><span class="line"><span class="cl">			<span class="nv">$insert</span> <span class="o">=</span> <span class="s2">&#34;UPDATE `users` SET password = &#39;</span><span class="si">$pass_new</span><span class="s2">&#39; WHERE user = &#39;&#34;</span> <span class="o">.</span> <span class="nx">dvwaCurrentUser</span><span class="p">()</span> <span class="o">.</span> <span class="s2">&#34;&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$insert</span> <span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span> <span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&lt;/pre&gt;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">			<span class="c1">// Feedback for the user
</span></span></span><span class="line"><span class="cl">			<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Password Changed.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">		<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// Issue with passwords matching
</span></span></span><span class="line"><span class="cl">			<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Passwords did not match.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Didn&#39;t come from a trusted source
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;That request didn&#39;t look correct.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>1、尝试修改密码为222，修改成功，得到链接</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">http://dvwa/vulnerabilities/csrf/?password_new=222&amp;password_conf=222&amp;Change=Change#
</span></span></code></pre></td></tr></table>
</div>
</div><p>2、打开新的标签页，使用上面的地址，出现错误提示，密码修改错误</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959097.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959097.png" 
             alt="image-20240417080206278" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、打开计算机代理，修改电脑代理服务器IP设置为127.0.0.1，端口设置为8888，BurpSuite调整代理参数与电脑代理一致</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959098.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959098.png" 
             alt="image-20240412094734133" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959099.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959099.png" 
             alt="image-20240412095237028" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959100.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959100.png" 
             alt="image-20240412094536046" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、正常修改密码的网页，使用BurpSuitePro捕获流量包，发现多出Referer属性信息</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959101.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959101.png" 
             alt="image-20240418165344132" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>5、而直接粘贴链接修改密码失败的报文缺少Referer属性信息，右键选择Send to Repeater</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959102.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959102.png" 
             alt="image-20240418170054026" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959103.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959103.png" 
             alt="image-20240418170418876" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>5、打开Repeater选项卡，给Request请求中添加Referer信息，Referer需要包括&quot;dvwa&quot;字段（需要符合同源策略），点击Send发送，修改密码成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959104.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959104.png" 
             alt="image-20240418172052977" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959105.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959105.png" 
             alt="image-20240418172120333" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="dvwa-high-级别-csrf">DVWA High 级别 CSRF</h3>
<p>0、分析网页源代码（路径：“D:\phpstudy_pro\DVWA-master\vulnerabilities\csrf\source\high.php”）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Change&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Check Anti-CSRF token
</span></span></span><span class="line"><span class="cl">	<span class="nx">checkToken</span><span class="p">(</span> <span class="nv">$_REQUEST</span><span class="p">[</span> <span class="s1">&#39;user_token&#39;</span> <span class="p">],</span> <span class="nv">$_SESSION</span><span class="p">[</span> <span class="s1">&#39;session_token&#39;</span> <span class="p">],</span> <span class="s1">&#39;index.php&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Get input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass_new</span>  <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_new&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass_conf</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_conf&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Do the passwords match?
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="o">==</span> <span class="nv">$pass_conf</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// They do!
</span></span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass_new</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Update the database
</span></span></span><span class="line"><span class="cl">		<span class="nv">$insert</span> <span class="o">=</span> <span class="s2">&#34;UPDATE `users` SET password = &#39;</span><span class="si">$pass_new</span><span class="s2">&#39; WHERE user = &#39;&#34;</span> <span class="o">.</span> <span class="nx">dvwaCurrentUser</span><span class="p">()</span> <span class="o">.</span> <span class="s2">&#34;&#39;;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$result</span> <span class="o">=</span> <span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$insert</span> <span class="p">)</span> <span class="k">or</span> <span class="k">die</span><span class="p">(</span> <span class="s1">&#39;&lt;pre&gt;&#39;</span> <span class="o">.</span> <span class="p">((</span><span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_error</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">:</span> <span class="p">((</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_connect_error</span><span class="p">())</span> <span class="o">?</span> <span class="nv">$___mysqli_res</span> <span class="o">:</span> <span class="k">false</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&lt;/pre&gt;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Feedback for the user
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Password Changed.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Issue with passwords matching
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Passwords did not match.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="p">((</span><span class="nx">is_null</span><span class="p">(</span><span class="nv">$___mysqli_res</span> <span class="o">=</span> <span class="nx">mysqli_close</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])))</span> <span class="o">?</span> <span class="k">false</span> <span class="o">:</span> <span class="nv">$___mysqli_res</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Generate Anti-CSRF token
</span></span></span><span class="line"><span class="cl"><span class="nx">generateSessionToken</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>1、正常修改密码并成功，使用BurpSuitePro捕获流量包，发现仍使用get提交方式，但多了验证参数token</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959106.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959106.png" 
             alt="image-20240418174557916" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、直接将链接复制粘贴修改密码肯定失败，提示token不正确</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959107.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959107.png" 
             alt="image-20240418180900000" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>有两种方法可以获得token值</p>
<p>方法一：利用DVWA中储存型XSS漏洞获得网页token</p>
<p>1、修改储存型XSS的网页脚本&quot;D:\phpstudy_pro\DVWA-master\vulnerabilities\xss_s\index.php&quot;，加入下面两行代码（修改文件之前做好备份）</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;div&gt;Name:test&lt;br/&gt;Message:this is a test comment.&lt;br/&gt;&lt;/div&gt;
</span></span><span class="line"><span class="cl">&lt;div&gt;Name:&lt;iframe src=&#39;../csrf&#39; οnlοad=alert(frames[0].document.getElementsByName(&#39;user_token&#39;)[0].value)&gt;&lt;br/&gt;Message:1&lt;br/&gt;&lt;/div&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959108.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959108.png" 
             alt="屏幕截图 2024-04-18 190045" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、保存文件，打开DVWA High级别下的储存型XSS页面，得到token值</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959109.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959109.png" 
             alt="image-20240418190907301" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、将得到的token替换，BurpSuitePro捕获流量包中原有的token</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959110.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959110.png" 
             alt="image-20240418190836711" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、发送构造好的数据包，得到响应，密码修改成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959111.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959111.png" 
             alt="image-20240418191317461" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>方法二：在BurpSuite安装插件，获取token</p>
<p>1、安装CSRF Token Tracker插件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959112.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959112.png" 
             alt="image-20240418184201655" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、添加一条CSRF Token Tracker规则并勾选，再勾选&quot;根据规则同步requests&quot;</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959113.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959113.png" 
             alt="image-20240615214659621" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、截获修改密码请求包</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959114.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959114.png" 
             alt="屏幕截图 2024-06-15 215508" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、将抓到的包Send to Repeater，在Repeater页面修改&quot;password_new&quot;和&quot;password_conf&quot;参数，Send后发现token值发生变化，修改密码成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959115.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225164959115.png" 
             alt="image-20240615215423256" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="dvwa-impossible-级别-csrf">DVWA Impossible 级别 CSRF</h3>
<p>0、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;Change&#39;</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Check Anti-CSRF token
</span></span></span><span class="line"><span class="cl">	<span class="nx">checkToken</span><span class="p">(</span> <span class="nv">$_REQUEST</span><span class="p">[</span> <span class="s1">&#39;user_token&#39;</span> <span class="p">],</span> <span class="nv">$_SESSION</span><span class="p">[</span> <span class="s1">&#39;session_token&#39;</span> <span class="p">],</span> <span class="s1">&#39;index.php&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Get input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass_curr</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_current&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass_new</span>  <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_new&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass_conf</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;password_conf&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Sanitise current password input
</span></span></span><span class="line"><span class="cl">	<span class="nv">$pass_curr</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$pass_curr</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass_curr</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass_curr</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$pass_curr</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass_curr</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Check that the current password is correct
</span></span></span><span class="line"><span class="cl">	<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nx">dvwaCurrentUser</span><span class="p">(),</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:password&#39;</span><span class="p">,</span> <span class="nv">$pass_curr</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Do both new passwords match and does the current password match the user?
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="p">(</span> <span class="nv">$pass_new</span> <span class="o">==</span> <span class="nv">$pass_conf</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">rowCount</span><span class="p">()</span> <span class="o">==</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// It does!
</span></span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span> <span class="o">=</span> <span class="nx">stripslashes</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span> <span class="o">=</span> <span class="p">((</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">is_object</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">]))</span> <span class="o">?</span> <span class="nx">mysqli_real_escape_string</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s2">&#34;___mysqli_ston&#34;</span><span class="p">],</span>  <span class="nv">$pass_new</span> <span class="p">)</span> <span class="o">:</span> <span class="p">((</span><span class="nx">trigger_error</span><span class="p">(</span><span class="s2">&#34;[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.&#34;</span><span class="p">,</span> <span class="nx">E_USER_ERROR</span><span class="p">))</span> <span class="o">?</span> <span class="s2">&#34;&#34;</span> <span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$pass_new</span> <span class="o">=</span> <span class="nx">md5</span><span class="p">(</span> <span class="nv">$pass_new</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Update database with new password
</span></span></span><span class="line"><span class="cl">		<span class="nv">$data</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">prepare</span><span class="p">(</span> <span class="s1">&#39;UPDATE users SET password = (:password) WHERE user = (:user);&#39;</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:password&#39;</span><span class="p">,</span> <span class="nv">$pass_new</span><span class="p">,</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">bindParam</span><span class="p">(</span> <span class="s1">&#39;:user&#39;</span><span class="p">,</span> <span class="nx">dvwaCurrentUser</span><span class="p">(),</span> <span class="nx">PDO</span><span class="o">::</span><span class="na">PARAM_STR</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="nv">$data</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Feedback for the user
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Password Changed.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Issue with passwords matching
</span></span></span><span class="line"><span class="cl">		<span class="nv">$html</span> <span class="o">.=</span> <span class="s2">&#34;&lt;pre&gt;Passwords did not match or current password incorrect.&lt;/pre&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Generate Anti-CSRF token
</span></span></span><span class="line"><span class="cl"><span class="nx">generateSessionToken</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>BUUCTF 凯撒？替换？呵呵!</title>
      <link>https://yuexuan521.github.io/zh/posts/buuctf-%E5%87%AF%E6%92%92%E6%9B%BF%E6%8D%A2%E5%91%B5%E5%91%B5/</link>
      <pubDate>Wed, 25 Sep 2024 21:49:16 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/buuctf-%E5%87%AF%E6%92%92%E6%9B%BF%E6%8D%A2%E5%91%B5%E5%91%B5/</guid>
      <description>&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205018780.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205018780.png&#34; 
             alt=&#34;&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BUUCTF: &lt;a href=&#34;https://buuoj.cn/challenges&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://buuoj.cn/challenges&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;相关阅读
&lt;a href=&#34;https://ctf-wiki.org/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CTF Wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205020932.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205020932.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;题目描述&#34;&gt;题目描述：&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h3 id=&#34;解题步骤&#34;&gt;解题步骤：&lt;/h3&gt;
&lt;p&gt;1、根据题目提示与密文特征，猜测为凯撒加密。尝试后，发现不是普通的凯撒加密。&lt;/p&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205022593.png&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205022593.png&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;2、经过分析发现没有规律，尝试暴力破解。首先，可以肯定MTHJ的明文为flag，利用在线工具 &lt;a href=&#34;https://quipqiup.com/&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;quipqiup&lt;/a&gt; ，破解所有的可能。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205018780.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205018780.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p><strong>BUUCTF: <a href="https://buuoj.cn/challenges"target="_blank" rel="noopener noreferrer">https://buuoj.cn/challenges</a></strong></p>
<hr>
<p>相关阅读
<a href="https://ctf-wiki.org/"target="_blank" rel="noopener noreferrer">CTF Wiki</a></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205020932.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205020932.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h3 id="题目描述">题目描述：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h3 id="解题步骤">解题步骤：</h3>
<p>1、根据题目提示与密文特征，猜测为凯撒加密。尝试后，发现不是普通的凯撒加密。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205022593.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205022593.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、经过分析发现没有规律，尝试暴力破解。首先，可以肯定MTHJ的明文为flag，利用在线工具 <a href="https://quipqiup.com/"target="_blank" rel="noopener noreferrer">quipqiup</a> ，破解所有的可能。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205025102.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205025102.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、
第一步：输入密文（MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}）
第二步：输入提示（MTHJ=flag）
第三步：点击Solve按钮，开始破解。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205027179.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251228205027179.png" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>4、选择第一个结果，去除空格，加上花括号，作为flag。</p>
<h3 id="flag">flag：</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>结束</strong></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
