正则表达式如何触发php代码执行_正则表达式触发php代码执行方法【教程】

admin 百科 15
PHP正则表达式存在四大代码执行风险:一、旧版e修饰符;二、create_function动态构造函数;三、preg_replace_callback回调注入;四、PCRE回溯绕过配合eval/assert。

正则表达式如何触发php代码执行_正则表达式触发php代码执行方法【教程】-第1张图片-佛山资讯网

如果您在PHP中使用正则表达式处理用户输入时未加严格过滤,可能意外触发PHP代码执行,造成严重安全风险。以下是几种已知可导致PHP代码执行的正则表达式相关方法:

一、使用e修饰符(PHP 5.4.0及以前版本)

在旧版PHP中,preg_replace函数支持e修饰符,允许将匹配结果作为PHP代码执行。该行为已被废弃并移除,但在遗留系统中仍需警惕。

1、构造包含PHP代码的替换字符串,例如:"system('id')"。

2、调用preg_replace函数,并在模式末尾添加e修饰符,如:/pattern/e。

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

3、传入恶意字符串作为subject参数,使preg_replace解析并执行内嵌代码。

4、注意:PHP 5.5.0起完全移除e修饰符,使用此方法需目标环境为PHP ≤ 5.4.x

二、利用create_function动态构造回调函数

create_function函数接受字符串形式的参数列表和函数体,并返回可调用的匿名函数。若正则匹配结果被拼接到其第二个参数中,即可执行任意PHP代码。

1、从preg_match或preg_replace获取用户可控的子串,例如捕获组内容。

2、将该子串拼接进create_function的function_body参数,如:"return " . $user_input . ";"。

3、调用返回的函数对象,触发代码执行。

4、注意:create_function在PHP 7.2.0中已弃用,PHP 8.0.0中彻底移除

标签: php 正则表达式 回调函数 php正则表达式

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~