昨天群里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 = "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变量覆盖漏洞整理的更多相关文章

  1. ctf变量覆盖漏洞:

    1.变量覆盖: ①:针对extract函数的变量覆盖漏洞: <?php @error_reporting(E_ALL^E_NOTICE); require('config.php'); if($ ...

  2. PHP代码审计笔记--变量覆盖漏洞

    变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...

  3. 变量覆盖漏洞学习及在webshell中的运用

    一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...

  4. 7. 由一道ctf学习变量覆盖漏洞

    0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导 ...

  5. php之变量覆盖漏洞讲解

    1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $up ...

  6. Web安全之变量覆盖漏洞

    通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_reques ...

  7. 代码审计-MetInfo CMS变量覆盖漏洞

    0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...

  8. CTF——代码审计之变量覆盖漏洞writeup【2】

    题目: 基础: 所需基础知识见变量覆盖漏洞[1]  分析: 现在的$a=’hi’,而下面的函数需满足$a=’jaivy’才可以输出flag,那么需要做的事就是想办法覆盖掉$a原来的值. 那么出现的提示 ...

  9. 2020/2/1 PHP代码审计之变量覆盖漏洞

    0x00 变量覆盖简介 变量覆盖是指变量未被初始化,我们自定义的参数值可以替换程序原有的变量值. 0x01 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...

随机推荐

  1. 小程序之app.json not found

    起因 最近在部署几款小程序时,发现ext.json文件会被忽略不上传,查了一下资料发现原来是需要升级开发者工具了. 没想到升级以后,再开发项目时,就报错 app.json not found 解决方法 ...

  2. SpringMVC(2)经典的HelloWorld实现

    我机器的开发环境为: Ubuntu12.04(不同操作系统对本系列项目没有影响): 开发工具:Eclipse For JavaEE: 数据库:MySql5.5.35; 运行环境:TomCat V7.0 ...

  3. ollvm混淆的某apk题目的逆向分析

    打开jadx,就发现了我们的老朋友数字壳 典型的类抽取壳,直接上fart脱就完事了,我这里使用的是fart的frida脚本,省去了刷机的步骤 这里的脱壳脚本,自行去github的寒冰大佬那边clone ...

  4. Acunetix敏感的数据泄露–泄露如何发生

    术语"敏感数据暴露"是指允许未授权方访问存储或传输的敏感信息,例如信用卡号或密码.全球范围内大多数重大安全漏洞都会导致某种敏感的数据泄露. Acunetix利用攻击漏洞(例如Web ...

  5. JUnit5参数化测试的几种方式

    参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量.用户参数.CSV文件.函数助手,那么JUnit5有哪些参数化测试的方式呢? 依赖 JUnit5需要添加junit ...

  6. kong插件Prometheus+grafana图形化展示

    目录 1. 准备工作 3. 为kong添加 prometheus插件 4. 打开kong的metrics支持 4. 配置prometheus.yml添加kong提供的数据信息 5. 在 Grafana ...

  7. lua环境搭建

    前言: Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文介绍Linux 系统上,lua5.3.0版本安装步骤: ↓ 1. Linux 系统上安装 ...

  8. java基础---设计模式(1)

    出处:https://blog.csdn.net/zhangerqing/article/details/8194653 java的设计模式分为三大类 创建型模式: 工厂方法模式.抽象工厂模式.单例模 ...

  9. Linux常用命令 day day up系列2

    一.alias--设置别名二.du--统计目录及文件空间占用情况三.mkdir--创建新目录四.touch--创建空文件五.ln--创建链接文件1.链接文件类型六.cp--复制文件或目录七.rm--删 ...

  10. RPC远程协议之Thrift入门

    在上一篇文章<RPC远程协议之原理分析>中,我介绍了RPC的工作原理及欲实现RPC框架功能应该做哪些事情,因为要做的事情太多,完全由开发人员研发实现,不是很现实,所以市面上出现了诸多RPC ...