代码审计--变量覆盖

简介: 代码审计--变量覆盖

1.变量覆盖定义


变量覆盖指的是可以用我们的传参值替换程序原有的变量值


2.风险


变量覆盖漏洞有的时候可以直接让我们获取Webshell,拿到服务器的权限


3.寻找变量覆盖


经常导致变量覆盖漏洞场景有:

1. $$使用不当
2. extract()函数使用不当,
3. parse_str()函数使用不当
4. import_request_variables()使用不当,开启了全局变量注册等

3.1.经常引发变量覆盖漏洞的函数


extract()
parse_str()
import_request_variables()


3.1.1.extract()函数


3.1.1.1.作用


从数组中将变量导入到当前的符号表

将数组中的内容转化为变量


3.1.1.2.实例


$a = "1";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>

运行结果:


$a = Cat; $b = Dog; $c = Horse


3.1.1.3.CTF举例


3.1.2.parse_str()


3.1.2.1.作用


将查询字符串解析到变量中


3.1.2.2.实例


<?php
parse_str("name=zkaq&&age=60");
echo $name."<br>";
echo $age;
?>

parse_str("name=Bill&age=60") 相当于完成了$name ='zkaq'和$age ='60'


3.1.2.3.


如果在parse_str中可以直接传参,也可以覆盖变量


3.1.3.$$


不仅仅是函数会导致变量覆盖,有些特殊符号的特殊搭配也会引起变量覆盖漏洞,比如$$


3.1.3.1.代码实例



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

4.本地测试


DuomiCMS


4.1.本地搭建环境


4.1.1.将源码放入WWW目录



4.1.2.安装



4.2.Seay代码审计系统

4.2.1.开启数据库监控



4.2.2.登录后台




4.2.3.更新数据库监控



4.2.4.规则管理



4.3.审计


4.3.1.添加一个匹配$$的规则


([^\$"]|$)\$\{?\$或者简单点\$\$



4.3.2.开始



4.3.3.发现一个存在变量覆盖的地方


duomiphp\common.php文件



4.3.4.定位函数



4.3.5.


get_magic_quotes_gpc()

判断是否开启魔术引号


4.3.6.变量覆盖需满足的条件


1.有传参

2.键名没有有cfg_和GLOBALS

3.COOKIE传参中没有$_k


同时满足会进入exit函数,那三条只要有一条不满足,就会产生变量覆盖漏洞




4.3.7.包含common.php文件的地方


admin目录下的login.php文件中包含了common.php文件

这个页面还调用了check.admin.php



4.3.8.check.admin.php


输出常量duomi_INC,exit(duomi_INC)

发现为常量duomi_INC的值为duomiphp,在该目录下找到check.admin.php文件

该文件为控制session的,可以通过common.php进行一个伪造session



4.3.8.1.session


Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。


Cookie为什么有权限 -> 使用了session,访问网页,留一个空间,里面可以通过代码 例如session里有admin=1,可以判断为管理员


4.3.9.session的值


设置session值进行赋值来获得权限,groupid是权限的意思,全局搜索,发现groupid为1的时候,为管理员


4.4.本地测试攻击


4.4.1.退出admin账号



4.4.2.构造攻击


interface/comment.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin



4.4.3.再次访问admin目录


自动登录上了,因为session已经和当前用户cookie配对了



相关文章
|
存储 安全 数据管理
阿里云OSS图床搭建
阿里云OSS图床搭建
9980 3
|
存储 Java 网络安全
SpringCloud GateWay配置(TLS 和 SSL、Http超时配置)—官方原版
SpringCloud GateWay配置(TLS 和 SSL、Http超时配置)—官方原版
2736 0
|
网络协议 Linux
nmcli命令详解
【4月更文挑战第9天】`nmcli`是Red Hat 7及CentOS 7后的网络管理命令,用于配置网卡并持久化设置。它可以显示网络连接信息(如`connection show`、`dev status`),控制网卡状态(启用、停用、删除连接),以及修改配置(如IP地址、DNS)。其他功能包括检查NetworkManager状态、开关网络连接和查看系统网络状态。要了解全部详情和高级用法,建议查阅相关文档。
2449 1
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
10月前
|
关系型数据库 MySQL PHP
0 基础建站?PageAdmin CMS 10 分钟搞定,源码免费拿!
PageAdmin CMS 为无编程基础用户提供高效建站方案。步骤包括:准备服务器、域名及源码;上传源码并配置数据库;通过安装向导完成基础设置;在后台创建栏目、填充内容;测试功能后上线。全程无需编程,简单操作即可搭建独立网站,支持后续维护与扩展。
1090 1
|
机器学习/深度学习 人工智能 PyTorch
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
779 11
200行python代码实现从Bigram模型到LLM
|
人工智能 并行计算 语音技术
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
Open-LLM-VTuber 是一个开源的跨平台语音交互 AI 伴侣项目,支持实时语音对话、视觉感知和生动的 Live2D 动态形象,完全离线运行,保护用户隐私。
3087 10
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
|
存储 算法 文件存储
详细解读7z文件格式及其源码的分析(三)
详细解读7z文件格式及其源码的分析(三)
1534 0
|
存储 安全 JavaScript
文件上传漏洞(一)一句话木ma
文件上传漏洞(一)一句话木ma

热门文章

最新文章