PHP变量覆盖漏洞整理
昨天群里HW的大佬们都在传某某服终端检测响应平台edr存在大量RCE的洞
官网上关于EDR的介绍是这么写的
终端检测响应平台EDR,围绕终端资产安全生命周期,通过预防、防御、检测、响应赋予终端更为细致的隔离策略、更为精准的查杀能力、更为持续的检测能力、更为快速的处置能力。在应对高级威胁的同时,通过云网端联动协同、威胁情报共享、多层级响应机制,帮助用户快速处置终端安全问题,构建轻量级、智能化、响应快的下一代终端安全系统
存在这种级别的漏洞,确实危害极大
根据已知消息存在PHP变量覆盖漏洞
部分代码如下
- /**
- * 显示表单
- * @param array $params 请求参数
- * @return
- */
- $show_form = function($params) use(&$strip_slashes, &$show_input) {
- extract($params);
- $host = isset($host) ? $strip_slashes($host) : "127.0.0.1";
- $main = function($argv) {
- extract($argv);
- if (!isset($code)){
- return;
- }
- eval($code);
- };
借此机会回顾整理一下变量覆盖漏洞的一些知识
既然叫变量覆盖,顾名思义,就是我们能自定义某些参数变量,来替换掉原有的变量
常见的可能出现变量覆盖的场景有$$ extract() parse_str() import_request_variables() 开启了全局变量注册
0x01 $$
$$为可变变量,举例子来说
// 引用变量
$$var = "PHP中文网";
// 输出$var的值
echo $var . "
";
// 输出$$var的值
echo $$var . "
";
// 输出$PHP的值
echo "$PHP";
---------------------
本文著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
来源地址:https://www.php.cn/php-weizijiaocheng-415613.html
来源:php中文网(www.php.cn)
版权声明:转载请附上原文链接!
$var="php";
$$var="jsp";
echo $var; php
echo $$var; jsp
echo "$php"; jsp
很清晰很明了
此符号常常与foreach一起出现,foreach遍历数组的名字,又把数组键名做变量,数组键值做变量值,导致值被覆盖
$name="lcx";
foreach ($_GET as $key => $value) 数组 as 键=>值
$$key = $value;
。。。。。。
echo $name;
碰巧用到name参数
你get方式传参数xxx.php?name=lcxlcxlcx
按照代码写法,$name(即$$key)=lcxlcx(即$value)
最后echo出来的$name值都变成lcxlcx了,不是原来的lcx了,$name被你的输入覆盖了
怎么办?
别这么写就完了
0x02 extract()
extract() 函数从数组中将变量导入到当前的符号表
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量
extract(array,extract_rules,prefix)
举个例子,你要是知道对面代码怎么写的,就可以构造相应的传递参数,进行覆盖
<?php
$id=1;
extract($_GET);
echo $id;
?>
我传递了?id=1234 则$id被覆盖成1234了
怎么办?
- extract($_GET,EXTR_SKIP);
用上EXTR_SKIP参数,有冲突不覆盖原有变量
0x03 parse_str()
parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量
parse_str(string,array)
如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量
<?php
$name="lll";
$age="12";
parse_str("name=lcx&age=18");
echo $name;
echo $age;
?>
$name与$age已经被覆盖了
这是很危险的,按照代码构造参数,进行绕过过滤
0x04 import_request_variables()
在 register_global = off 时,把 GET/POST/Cookie 变量导入全局作用域中
<?php
import_request_variables("g", "get_");
echo $get_id;
?>
0x05 全局变量注册
register_globals用来注册全局变量
当register_globals全局变量设置开启时,传递过来的值会被直接注册为全局变量而使用,这会造成全局变量覆盖
要么关了,要么用新版本PHP吧,新版本没有这个东西了
随便转载,请标明作者出处
PHP变量覆盖漏洞整理的更多相关文章
- ctf变量覆盖漏洞:
1.变量覆盖: ①:针对extract函数的变量覆盖漏洞: <?php @error_reporting(E_ALL^E_NOTICE); require('config.php'); if($ ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
- 变量覆盖漏洞学习及在webshell中的运用
一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...
- 7. 由一道ctf学习变量覆盖漏洞
0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导 ...
- php之变量覆盖漏洞讲解
1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $up ...
- Web安全之变量覆盖漏洞
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_reques ...
- 代码审计-MetInfo CMS变量覆盖漏洞
0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...
- CTF——代码审计之变量覆盖漏洞writeup【2】
题目: 基础: 所需基础知识见变量覆盖漏洞[1] 分析: 现在的$a=’hi’,而下面的函数需满足$a=’jaivy’才可以输出flag,那么需要做的事就是想办法覆盖掉$a原来的值. 那么出现的提示 ...
- 2020/2/1 PHP代码审计之变量覆盖漏洞
0x00 变量覆盖简介 变量覆盖是指变量未被初始化,我们自定义的参数值可以替换程序原有的变量值. 0x01 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- ARM汇编指令-STM32单片机启动
EQU 给数字常量取一个符号名,相当于c中的define. AREA 告诉汇编器汇编一个新的代码段. SPACE 分配内存空间. PRESERVE 当前文件堆栈按照8字节对齐. EXPORT 声 ...
- Python实现 利用朴素贝叶斯模型(NBC)进行问句意图分类
目录 朴素贝叶斯分类(NBC) 程序简介 分类流程 字典(dict)构造:用于jieba分词和槽值替换 数据集构建 代码分析 另外:点击右下角魔法阵上的[显示目录],可以导航~~ 朴素贝叶斯分类(NB ...
- SEO入门一篇就够-SEO教程
大家口中的SEO(Search Engine Optimization),中文翻译为"搜索引擎优化",从本质上来说,其实就是如何迎合搜索引擎的规则,使得网站在搜索结果中能有更好的排 ...
- mongodb oplog详解和格式分析
1. 基本概念 oplog使用固定大小集合记录了数据库中所有修改操作的操作日志(新增.修改和删除,无查询),mongodb收到修改请求后,先在主节点(Primary)执行请求,再把操作日志保存到opl ...
- 开源的负载测试/压力测试工具 NBomber
负载测试和压力测试对于确保 web 应用的性能和可缩放性非常重要. 尽管它们的某些测试是相同的,但目标不同. 负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标. 应用在正常 ...
- 建立属于自己的scrapy crawl模板
本人安装PYTHON3.7安装位置:D:\Python\Python37模板位置:D:\Python\Python37\Lib\site-packages\scrapy\templates\spide ...
- 数据库里的回车字符导致取过来的json字符串不规范的问题
转发:https://bbs.csdn.net/topics/380192638 你可以报保存数据库之前,进行 替换 str = str.Replace("\r\n"," ...
- [001] - JavaSE面试题(一):面向对象
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [001] - JavaSE面试题(一):面向对象 第1问:面向对象和面向过程的区别? 面向过程 ...
- 医疗器械软件产品经理必读的法规及标准-YY/T0664(二)
上节主要讲了软件开发策划.软件需求分析.软件系统结构设计三个阶段,这节来分析以下几个阶段. 1.软件单元实现 2.软件集成和集成测试 3.软件系统测试 软件开发过程由若干个活动组成,主要包括软件开发策 ...
- java类与对象基础篇
java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...