不安全JSON解析在PHP中可导致代码执行,主要方式包括:一、eval动态执行;二、unserialize反序列化漏洞;三、键名反射调用函数;四、preg_replace /e修饰符注入;五、自动加载机制触发恶意类执行。

如果JSON数据在PHP环境中被不安全地解析,可能导致意外的代码执行。以下是实现JSON数据解析并触发PHP代码执行的几种方法:
该方法将JSON中预设的PHP代码字符串提取后,通过eval直接执行。此方式绕过常规JSON解码逻辑,直接将字段内容作为PHP指令运行。
1、构造包含PHP代码字符串的JSON,例如:{"cmd":"echo 'Hello'; system('id');"}。
2、使用json_decode解析JSON,获取cmd字段值。
立即学习“PHP免费学习笔记(深入)”;
3、对cmd字段内容进行基础校验(如白名单关键词过滤)后,用eval('?>' . $cmd)执行。
当JSON数据被错误地转换为PHP序列化格式并调用unserialize时,若存在可利用的魔术方法类,可能触发任意代码执行。
1、构造JSON数据,其值模拟序列化字符串结构,例如:{"data":"O:8:\"EvilClass\":1:{s:4:\"code\";s:12:\"system('ls');\";}"}。
2、将data字段值取出,替换JSON双引号与转义符,拼接为合法序列化字符串。
3、调用unserialize($malicious_str),触发__wakeup或__destruct中的危险操作。
该方法利用JSON对象键名作为函数名,值作为参数,结合call_user_func_array实现反射式执行。
1、构造JSON,例如:{"function_name":"exec","args":["whoami"]}。
2、使用json_decode解析为关联数组,提取function_name和args字段。
3、检查function_name是否在允许函数白名单内,确认后执行:call_user_func_array($func, $args)。
在旧版PHP中,若JSON中包含正则表达式模式与替换字符串,且解析后传入preg_replace并启用/e修饰符,可导致代码执行。
1、构造JSON,例如:{"pattern":"/.*/e","replacement":"phpinfo()"}。
2、解析JSON后取出pattern和replacement字段。
3、执行preg_replace($pattern, $replacement, 'test'),触发replacement中PHP代码解释执行。
当JSON解码为对象且属性被访问时,若存在__get或__set等魔术方法,并配合自动加载未定义类,可能触发恶意类文件包含与执行。
1、构造JSON,例如:{"class":"MaliciousPayload","param":"/tmp/shell.php"}。
2、使用json_decode($json, false)生成stdClass对象。
3、对该对象属性赋值或读取,触发自动加载机制,加载并实例化MaliciousPayload类,其构造函数中执行include $this->param。
以上就是JSON数据怎样解析触发php代码执行_JSON数据解析触发php代码执行方法【解析】的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号