会话变量如何触发php代码执行_会话变量触发php代码执行方法【实例】

PHP会话变量不当使用可导致任意代码执行,包括:一、session_decode反序列化触发魔术方法;二、$_SESSION值直传eval等函数;三、会话变量控制include路径引发文件包含;四、自定义session处理器中执行用户输入;五、旧版PHP中preg_replace的/e修饰符执行会话内容。

会话变量如何触发php代码执行_会话变量触发php代码执行方法【实例】

如果在PHP应用中,会话变量被不当使用或与动态代码执行函数结合,可能导致任意PHP代码被执行。以下是几种实际存在的触发方式:

一、通过session_decode配合unserialize反序列化

当会话数据以序列化格式存储且未严格校验时,攻击者可构造恶意序列化字符串,利用session_decode解析后触发__wakeup或__destruct魔术方法中的危险操作。

1、在PHP配置中启用session.serialize_handler=php_serialize,确保会话以serialize格式写入。

2、在用户可控输入点(如Cookie中的PHPSESSID)注入恶意序列化字符串,例如:O:8:”BadClass”:1:{s:4:”code”;s:16:”system(‘id’);”;}

立即学习PHP免费学习笔记(深入)”;

3、在服务端调用session_start()后立即执行session_decode($_COOKIE[‘PHPSESSID’]),导致反序列化触发代码执行。

二、会话变量直接拼接进eval函数

当开发者将$_SESSION中的值未经过滤直接传入eval、assert或create_function等动态执行函数时,会话变量内容会被当作PHP代码解析执行。

1、设置会话变量:$_SESSION[‘payload’] = ‘phpinfo();’;

2、在后续逻辑中存在类似代码:eval(‘echo ‘ . $_SESSION[‘payload’]);

3、会话恢复后,该eval语句执行phpinfo()函数。

三、会话变量控制include路径

若会话变量用于动态包含文件路径且未限制目录范围或白名单校验,可导致远程或本地文件包含进而执行PHP代码。

1、设置会话变量:$_SESSION[‘module’] = ‘../shell.php’;


通义灵码

通义灵码

阿里云出品的一款基于通义大模型的智能编码辅助工具,提供代码智能生成、研发智能问答能力

通义灵码
304


查看详情
通义灵码

2、服务端存在类似逻辑:include $_SESSION[‘module’] . ‘.inc’;

3、当shell.php存在于Web根目录下且包含PHP代码,该代码将在包含时执行。

四、通过session_set_save_handler自定义处理器执行代码

当使用session_set_save_handler注册自定义会话处理器,并在open、read、write等方法中引入用户可控的会话键名或值时,可能在会话生命周期中触发执行逻辑。

1、定义一个类,其read方法中对$key参数进行eval:eval($key);

2、调用session_set_save_handler(new CustomHandler())并启用会话。

3、通过伪造Session ID使$key参数落入攻击者控制范围,例如ID为’a”;phpinfo();//’,在read中被拼接执行。

五、会话变量影响preg_replace的/e修饰符(PHP5.4以下)

在旧版PHP中,若会话变量被用作preg_replace第三个参数且正则使用/e修饰符,其内容将被当作PHP代码执行。

1、设置会话变量:$_SESSION[‘pattern’] = ‘.*’;

2、服务端存在类似调用:preg_replace(‘/’ . $_SESSION[‘pattern’] . ‘/e’, ‘system(“ls”)’, ‘test’);

3、该正则表达式在匹配时执行system(“ls”)命令。

以上就是会话变量如何触发php代码执行_会话变量触发php代码执行方法【实例】的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/1880170.html

发表回复

Your email address will not be published. Required fields are marked *