首页 > 编程知识 正文

php远程文件执行漏洞(php远程文件执行漏洞怎么办)

时间:2023-12-02 00:20:20 阅读:311155 作者:RNLE

本文目录一览:

  • 1、php 远程代码执行漏洞 怎么修复
  • 2、关于php的一个漏洞
  • 3、网上有兄弟说PHP又有漏洞了.现在是5.2.17p1还用升级吗
  • 4、PHP 网络开发详解之远程文件包含漏洞
  • 5、如何对php中常见漏洞进行攻击与防护翻译

php 远程代码执行漏洞 怎么修复

一般来说,不用管。kb2502786 excel远程代码执行漏洞属于Microft office的漏洞,主要是Excel的漏洞,会攻击你的Excel文件或者程序,你如果经常使用就Excel书写文件或者工作,就补上这个漏洞,如果不经常使用Excel就不用管它了每次检查都出现,不是很正常,你用安全360查一遍漏洞,补上这个漏洞,然后立刻重启,就可以完全修复好这个漏洞。谢谢,望采纳

关于php的一个漏洞

extract() 例子

?php

$size = "large";

$var_array = array("color" = "blue",

"size" = "medium",

"shape" = "sphere");

extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_sizen";

?

上例将输出:

blue, large, sphere, medium

EXTR_OVERWRITE

如果有冲突,覆盖已有的变量。

EXTR_SKIP

如果有冲突,不覆盖已有的变量。

EXTR_PREFIX_SAME

如果有冲突,在变量名前加上前缀 prefix。

EXTR_PREFIX_ALL

给所有变量名加上前缀 prefix。自 PHP 4.0.5 起这也包括了对数字索引的处理。

EXTR_PREFIX_INVALID

仅在非法/数字的变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。

EXTR_IF_EXISTS

仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。

EXTR_PREFIX_IF_EXISTS

仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。

EXTR_REFS

将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。

如果没有指定 extract_type,则被假定为 EXTR_OVERWRITE。

在语句前 加上 “@”可以屏蔽当前输出的错误 比如 这里$MOD出错了 本来是应该显示错误或者程序终止的 就跳过不显示错误并且继续执行了

这里的template函数应该是一个模板处理的 到底会不会出现文件包含漏洞还要具体分析这个函数 以及服务器的php配置参数

这里看这个地方漏洞几乎是不可能的 因为这里$MOD你不可能通过外部赋值 除了register_global=on是可能的 如果template函数里面对于文件路径的检查不严格 比如直接用mod 除非同时服务器允许包含远程文件的俄设置为on 这两个配置条件+template检测不严格同时满足的话或许能是个漏洞 但是这种情况的概率极其低

网上有兄弟说PHP又有漏洞了.现在是5.2.17p1还用升级吗

你好,不用的,没事。

日前,PHP 5.3.9被H客发现存在严重的安全漏洞,远程攻击者可以直接利用此漏洞执行任意PHP代码,安全风险非常高。该漏洞(CVE-2012-0830)是由于PHP官方为解决多语言hash漏洞引入了新的机制产生的新的安全漏洞。

PHP官方强烈建议用户尽快更新到PHP 5.3.10。

PHP 网络开发详解之远程文件包含漏洞

以下代码(Code)实现了根据浏览器地址栏参数的文件名称包含不同文件的功能。

复制代码

代码如下:

?php

$file_name

=

$_GET["filename"];

//获得当前文件名

include("$file_name

");

//包含文件

//一些其他操作

?

这时,通过在地址栏上指定不同的文件名就可以实现包含不同文件并执行的功能。例如,通过在浏览器上访问就可以在代码(Code)中包含并执行myinc.php文件。

由于上面的代码(Code)没有进行任何错误处理,在浏览器上不加参数运行,所以将得到以下运行结果。

Warning:

include(.php)

[function.include]:

failed

to

open

stream:

No

such

file

or

directory

in

C:Program

FilesxampphtdocsBugstest6.php

on

line

3

Warning:

include()

[function.include]:

Failed

opening

'.php'

for

inclusion

(include_path='.;C:Program

Filesxamppphppear')

in

C:Program

FilesxampphtdocsBugstest6.php

on

line

3

访问者通过读取这段错误信息,可以得知当前的操作是一个文件包含操作。这时,可以在自己的服务器上放置一个相应的脚本代码。需要注意的是PHP在获取远程文件时获得的是远程服务器的最终输出结果,而不是文件本身。该脚本代码位于192.168.0.1服务器上,文件名为hello.txt,脚本代码(Code)如下所示。

复制代码

代码如下:

?php

echo

"hello

world!";

?

这时,通过在浏览器中访问就可以运行hello.txt中的脚本了。

为了解决这个问题,一种方式是完善代码的错误信息,使访问者无法知道当前脚本正在包含参数中指定的文件。修改后的代码(Code)如下所示。

复制代码

代码如下:

?php

$file_name

=

$_GET["filename"];

//获得当前文件名

if(!@include("$file_name.php"))

//包含文件

{

die("页面在浏览过程中出现错误");

}

//一些其他操作

?

修改后,如果在被包含的文件无法找到时将出现“页面在浏览过程中出现错误”的错误信息,访问者将无法获得当前页面的具体操作信息。

第二种方式可以更加有效地防止远程文件包含攻击。方式是替换地址栏参数中的斜线“/”。这样,在地址栏参数中输入远程文件地址时,代码将无法正确地获得参数。修改后的代码(Code)如下所示。

复制代码

代码如下:

?php

$file_name

=

str_replace('/',

'',

$_GET["filename"]);

//获得当前文件名

if(!@include("$file_name.php"))

//包含文件

{

die("页面在浏览过程中出现错误");

}

//一些其他操作

?

这样,在浏览器中访问

时,实际上PHP代码(Code)获得的包含文件名称是http:192.168.0.1bugstest6_test。页面将不会包含远程文件,并显示相应的错误信息。

如何对php中常见漏洞进行攻击与防护翻译

[全局变量]

PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,它们会根据上下文环境自动确定。从程序员的角度来看,这无疑是一种极其方便的处理方法。很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次创建时,他们是空的。

很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

例如:

FORM METHOD="GET" ACTION="test.php"

INPUT TYPE="TEXT" NAME="hello"

INPUT TYPE="SUBMIT"

/FORM

很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输入来调用“test.php”,而是直接在浏览器地址栏输入;setup=no,那么,不止是“$hello”被创建,“$setup”也被创建了。

译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。

下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:

?php

if ($pass == "hello")

$auth = 1;

...

if ($auth == 1)

echo "some important information";

?

上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。

表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局变量并赋值,通过类似“”的方法,我们完全可以欺骗这段代码,使它相信我们是已经认证过的。

因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的变量很多的话,这可是一项非常艰巨的任务。

一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提交的变量就可以在全局变量和上面提到的数组中获得。

但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入。HTTP_GET_VARS数组用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。

[远程文件]

PHP是一种具有丰富特性的语言,提供了大量的函数,使编程者实现某个功能很容易。但是从安全的角度来看,功能越多,要保证它的安全性就越难,远程文件就是说明这个问题的一个很好的例子:

?php

if (!($fd = fopen("$filename", "r"))

echo("Could not open file: $filenameBRn");

?

上面的脚本试图打开文件“$filename”,如果失败就显示错误信息。很明显,如果我们能够指定“$filename”的话,就能利用这个脚本浏览系统中的任何文件。但是,这个脚本还存在一个不太明显的特性,那就是它可以从任何其它WEB或FTP站点读取文件。实际上,PHP的大多数文件处理函数对远程文件的处理是透明的。

例如:

如果指定“$filename”为“”

则上面的代码实际上是利用主机target上的unicode漏洞,执行了dir命令。

这使得支持远程文件的include(),require(),include_once()和require_once()在上下文环境中变得更有趣。这些函数主要功能是包含指定文件的内容,并且把它们按照PHP代码解释,主要是用在库文件上。

例如:

?php

include($libdir . "/languages.php");

?

上例中“$libdir”一般是一个在执行代码前已经设置好的路径,如果攻击者能够使得“$libdir”没有被设置的话,那么他就可以改变这个路径。但是攻击者并不能做任何事情,因为他们只能在他们指定的路径中访问文件languages.php(perl中的“Poison null byte”攻击对PHP没有作用)。但是由于有了对远程文件的支持,攻击者就可以做任何事情。例如,攻击者可以在某台服务器上放一个文件languages.php,包含如下内容:

?php

passthru("/bin/ls /etc");

?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。