php+exec安全问题_安全模式下exec等函数安全隐患

本文详细探讨了PHP在安全模式下,exec()、system()、passthru()等函数存在的安全隐患,特别是在safe_mode_exec_dir未设置时,如何通过特定路径(如dir)在Windows环境下执行命令。尽管PHP尝试修复此问题,但仍存在绕过方法。文章提供了代码分析、PoC测试和实际利用案例。
摘要由CSDN通过智能技术生成

author: 80vul-B

team:http://www.80vul.com

date:2009-05-27

updata:2009-6-19

—————–updata—————————————

昨天php5.2.10出来了,fix了PCH-006里提到的bug:

Fixed bug #45997 (safe_mode bypass with exec/system/passthru (windows only))

然而遗憾的是还有问题,看看php是咋fix这个的:

b = strrchr(cmd, PHP_DIR_SEPARATOR);

#ifdef PHP_WIN32

if (b && *b == ‘\\’ && b == cmd) {

// 注意标红的代码:p

php_error_docref(NULL TSRMLS_CC, E_WARNING, “Invalid absolute path.”);

goto err;

}

#endif

恩,fix后执行exec(‘\dir’)会报错,但是exec(’80vul\b\dir’)依旧会执行:)

PoC:

—————————————————————–

一 前言

就在昨天milw0rm上公布了一个非常有意思的漏洞:PHP <= 5.2.9 Local Safemod Bypass Exploit (win32).作者看到公告后,在php源代码基础上分析了下这个问题的根本原因,于是就有本文.

二 描叙

在php手册了有一节: 给出了受安全模式影响的一些函数如:

backtick operator 本函数在安全模式下被禁用。

shell_exec()(在功能上和 backticks 函数相同) 本函数在安全模式下被禁用。

exec() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

system() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

passthru() 只能在 safe_mode_exec_dir 设置的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值