是否可以使用扩展名file.php.jpg执行PHP?

Joh*_*hnA 10 php security

站点合法文件image_upload.php用于上传文件89471928047.php.jpg这是将tmp文件复制到同一图像文件夹的简单文件上传表单.他们如何设法执行它并通过它上传其他文件.有人知道这有可能吗? PHP version was 5.1.6正好在一小时前更新,或者按照主机的时间表更新5.3.8......真是巧合?

Sam*_*son 15

检查.htaccess文件

使用AddType您的.htaccess文件,你可以添加从PHP可以运行许多其他的扩展.这通常是如何.html在仍然使用PHP的情况下使用扩展.所以,是的,这是可能的:

AddType application/x-httpd-php .jpg
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以测试一下.

  1. 创建一个包含两个文件的目录:.htaccess和test.php.jpg
  2. 将.htaccess的内容设置为 AddType application-x-httpd-php .jpg
  3. 将test.php.jpg的内容设置为 <?php echo 'foo'; ?>
  4. 通过localhost访问test.php.jpg

如果一切按计划进行,"foo"将输出到您的屏幕./tmp如果你愿意,你可以扩展它来移动文件.

绝对是你想要非常小心的东西.

检查公开的include/require调用

另一种方法是通过调用require()或include()(或任何_once()方法)黑客能够加载他的badfile.php.jpg文件,该文件是以无辜图像为幌子上传的:

<?php

  include $_GET["file"];

?>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中(简化示例),黑客可以将路径传递给他的.php.jpg文件并将其内容加载并作为PHP代码处理.

其他(可怕的)想法

Require,Include及其相关方法并不是处理外部脚本的唯一方法 - 不幸的是,您也可以使用eval()它们.我希望你没有这样做.如果您的服务器上有任何脚本使用任何一个文件函数来读取另一个脚本的内容,然后eval()将该内容评估为PHP,这也可能会在您的网站中提供一个巨大的安全漏洞.


sti*_*vlo 8

你image_upload.php的不安全,请检查以下内容:

  1. 它只允许图像扩展吗?否则,可以直接上传PHP文件.(我认为你已被这个覆盖,但要仔细检查).
  2. 它检查上传的文件确实是一个图像?这里的答案是否定的,它不会检查内容.添加此支票!通过这一步,您将关闭最初的违规行为.

要检查它是否是图像,您可以在文件上运行getimagesize,如果它不是图像,则返回FALSE.

怎么可能执行该文件?首先,你怎么知道它已被执行?你看到副作用了吗?

  1. 一种方法是他们可以篡改其他文件
  2. 第二种方式,也许更可能是他们使用脚本中未经过处理的输入来包含或评估代码.在这种情况下,您只能通过查看日志找到证据.

如何查看日志?

检查上传文件的日期和时间,并开始在那里查看可疑活动(查看奇怪的url参数).一旦你找到一个或多个IP地址,做坏事,就可以查看那些(那些)IP的日志,看看整个故事.

另一个需要了解的重要信息是,您是编写网站还是使用CMS或类似网站?在这种情况下,它是什么版本以及版本是什么?您需要检查已发布的漏洞并进行升级以防万一.


ion*_*iel 7

问题是由您的服务器使用默认的/etc/httpd/conf.d/php.conf引起的:

rpm -ql php-5.1.6-39.el5_8
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5-zts.so
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
Run Code Online (Sandbox Code Playgroud)

/etc/httpd/conf.d/php.conf的内容是:

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  # Use of the "ZTS" build with worker is experimental, and no shared
  # modules are supported.
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php
Run Code Online (Sandbox Code Playgroud)

请注意最后一行AddHandler php5-script .php.这导致了这个问题,需要用更安全的配置替换

您可以在此处详细了解它以及如何应用修复程序(请参阅最后的回复):

http://core.trac.wordpress.org/ticket/11122

也看到了这个:

https://bugzilla.redhat.com/show_bug.cgi?id=885839