PHP多个函数绕过safe_mode安全限制漏洞

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

BUGTRAQ ID: 35435 PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。 在安全模式下,PHP没有禁用exec()、system()、passthru()和popen()这四个函数,只是在 safe_mode_exec_dir目录下执行。但当safe_mode=on且safe_mode_exec_dir为空时(默认),PHP在处理这一过程中存在安全隐患,在windows下exec()/system()/passthru()可以通过引入“\”来执行程序。 以exec()函数为例分析源码: // exec.c PHP_FUNCTION(exec) { php_exec_ex(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } // system(),passthru()函数也是调用的php_exec_ex但popen()不是 ... static void php_exec_ex(INTERNAL_FUNCTION_PARAMETERS, int mode) { char *cmd; int cmd_len; zval *ret_code=NULL, *ret_array=NULL; int ret; ... if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/z/", &cmd, &cmd_len, &ret_array, &ret_code) == FAILURE) { RETURN_FALSE; } ... if (!ret_array) { ret = php_exec(mode, cmd, NULL, return_value TSRMLS_CC); ... int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC) { ... if (PG(safe_mode)) { if ((c = strchr(cmd, ' '))) { *c = '\0'; c++; } // 取cmd中的参数部分 if (strstr(cmd, "..")) {...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息