能否执行带有扩展名file.php.jpg的PHP文件?

15 浏览
0 Comments

能否执行带有扩展名file.php.jpg的PHP文件?

网站合法文件image_upload.php被用于上传文件89471928047.php.jpg。这是一个简单的文件上传表单,将临时文件复制到相同的图片文件夹中。

他们是如何成功执行并通过它上传其他文件的?有人知道这是如何可能的吗?

PHP版本为5.1.6,在一小时前或之后通过主机计划更新到5.3.8...真是一个巧合?

0
0 Comments

文章标题:如何执行扩展名为.php.jpg的PHP文件?

检查.htaccess文件

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

AddType application/x-httpd-php .jpg

您可以测试一下。

1.创建一个包含两个文件的目录:.htaccess和test.php.jpg

2.将.htaccess的内容设置为`AddType application-x-httpd-php .jpg`

3.将test.php.jpg的内容设置为``

4.通过localhost访问test.php.jpg

如果一切按计划进行,"foo"将输出到屏幕上。您还可以扩展此操作以在喜欢的情况下移动/tmp文件。

绝对是一件需要非常小心处理的事情。

检查暴露的include/require调用

通过调用require()或include()(或任何_once()方法)可以以加载他的badfile.php.jpg文件的方式来执行此操作,而该文件以一个无害的图像的伪装方式上传:


在上述情况中(简化示例),黑客可以传入一个路径参数来加载他的.php.jpg文件,并将其内容作为PHP代码进行处理。

其他(可怕的)想法

Require、Include及其相关方法并不是处理外部脚本的唯一方法-不幸的是,您还可以使用eval()。但我希望您的服务器上没有这些东西。如果您的服务器上有任何使用文件函数读取另一个脚本的内容,然后使用eval()将该内容作为PHP代码进行评估的脚本,那么这也可能会给您的网站带来严重的安全漏洞。

我认为他问的是黑客如何做到这一点,而不是他如何做到的。此外,如果映射.jpg,所有的jpg文件都将由PHP执行,这几乎不是一个好主意。但也许,是的,他可以检查他的.htaccess文件是否被篡改。我认为我们需要更多的信息。

在网站上没有.htaccess文件,他们以某种方式溢出了网站,并使其将jpg处理为php...网站上根本没有.htaccess。

我只是展示了黑客可以使用的一种方法。一个小小的修正,受影响的.htaccess文件目录中的所有.jpg文件将被处理为PHP。希望这能帮助楼主找到问题。

是的,实际上我添加了"也许,是的,他可以检查他的.htaccess文件是否被篡改"。

include也是我想到的第二种方法。

您应该检查您的网站,就像stivlo所说的那样,检查是否存在危险的include、require、include_once和require_once,这些函数接受用户可能篡改的输入。

"AddType"控制Apache对于给定文件类型的响应的MIME类型。"AddHandler"使Apache使用PHP来处理.php文件的请求。

0
0 Comments

问题的原因是服务器使用了默认的/etc/httpd/conf.d/php.conf配置文件,其中有一行AddHandler php5-script .php,这会导致以.php为扩展名的文件被PHP解释器处理。这个问题可以通过替换更安全的配置来解决。

解决方法可以参考以下链接:

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

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

为什么AddHandler php5-script .php会被利用来处理.php.jpg文件?原因是文件名中有.php这个字符串,而PHP解释器只解析以.php结尾的文件,忽略后面的内容。这是mod_mime的一个特性,它会在文件名中匹配任意位置的.php。

参考链接:http://httpd.apache.org/docs/2.2/mod/mod_mime.html#multipleext

0
0 Comments

在这个问题中,问题的出现原因是因为image_upload.php文件的不安全性,具体表现在以下几个方面:

1. 是否只允许上传图像文件类型的扩展名?

2. 是否检查上传的文件确实是一个图像文件?

解决方法如下:

1. 确保只允许上传图像文件类型的扩展名。

2. 检查上传的文件是否真的是一个图像文件,可以使用getimagesize函数进行检查。

为了检查文件是否为图像文件,可以使用getimagesize函数,如果返回值为FALSE,则说明文件不是一个图像文件。

那么如何执行这个文件呢?首先,你是怎么知道它已经被执行了呢?有没有看到任何副作用?

有两种可能的方式:

1. 他们可能篡改了其他文件。

2. 他们可能利用你的脚本中未经过滤的输入来包含或执行代码。在这种情况下,只能通过查看日志来找到证据。

如何查看日志呢?

检查上传文件的日期和时间,然后开始查找该时间点周围的可疑活动(查看奇怪的URL参数)。一旦找到一个或多个IP地址进行恶意操作,在日志中使用grep命令搜索这些IP地址,以查看完整的故事。

另一个重要的信息是,你是自己编写的网站还是使用了CMS等类似系统,如果是的话,请确定是哪个版本。你需要检查已发布的漏洞并进行升级。

JPG文件中的嵌入式注释仍然可以绕过getimagesize()函数的检查。它会被解析为合法的JPG文件,但仍然包含代码。

使用getimagesize()函数来确定文件是否为图像文件真的是一个坏主意,因为一个人可以很容易地在一个看似良好的图像中嵌入危险的代码。查看这个链接,可以展示php脚本如何嵌入到图像中。

正如你所链接的文章中所解释的那样,之所以会执行图像中的代码,是因为使用了不正确的require来显示图像,而不是因为getimagesize()函数的问题。

你是对的,这是在使用require/include等时被利用的,但是假设你有一个名为index.php的页面,它通过使用require($_GET['page'])来加载参数中传递的页面,例如:index.php?page=page/aboutus.php。在这种情况下,如果有人上传了一个名为upload/bad.jpg的恶意图像,并请求服务器执行index.php?page=upload/bad.jpg,那么可能会发生很糟糕的事情,不是吗?

首先,你不应该这样使用require,问题就出在这里。但是如果你不使用getimagesize()进行检查,那么一个扩展名为jpg的纯php脚本将会被接受,这比不检查更糟糕。那么你建议做更多的检查呢?

0