变量覆盖漏洞
变量覆盖
变量覆盖就是字面意思。。不解释了
函数:
- extract()
将数组中的值导入当前符号集
1 |
|
这里将一道简单的 CTF 题目(稍有改编)
1 |
|
如果上面第三行写的是 $gift = $_GET['gift']
,应该容易理解,但是它使用了 extract
函数,要了解这点,我们需要深入了解 $_GET
这种以 $_ 开头的变量都叫做超全局变量,均为数组,我们可以用 var_dump
查看一下
1 |
|
所以可以利用 extract
函数将这些数组导入当前符号集,也就是说直接使用他的键值对作为当前的变量
对于那道CTF,我们只需要传入 ?$gift = X47US3C
,即可,不需要考虑传给了谁,因为它会被自动导入符号集
- $$
这个举个例子就能看懂:
1 |
|
同样引入一道 CTF
1 |
|
foreach(array('_COOKIE', '_POST', '_GET') as $_request)
数组遍历,相当于将每个键值对拿出来赋给$_request
数组foreach($$_request as $_key => $_value)
键值分离,将这个数组的键和值分别拿出来赋给变量$key
和$value
$$_key = addslashes($_value); 调用魔术引号的函数
SESSION
Cookie => 一段随机值,代表身份(与 Session 对应)
Session => 校验 Cookie (看作一个数据库,与 Cookie 有对应关系)
Token => 只校验请求是否有用户本人发起(防止CSRF,与权限无关)
有时候 XSS 打到了 Cookie ,但是 Session 被注销掉,就不存在对应关系
靶场
Duomicms
POC:interface/comment.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin
打开源码,搜索 \$\$
(开启正则)
小技巧:像这种 admin
目录下的文件一般都需要权限验证,可以先不审
找到一个可利用的点,但它前面代码存在 exit
(die
也要分析),先分析这段代码
1 | foreach($_REQUEST as $_k=>$_v) |
foreach($_REQUEST as $_k=>$_v)
键值分离(GET、POST)strlen($_k)>0
键长度大于 0!isset($_COOKIE[$_k])
当存在同名参数时会返回 false
所以只要 GET 传参的同时 Cookie 中也有此键就不会进去,就不存在退出的情况
现在可以分析刚才那段存在利用点的代码
1 | foreach(Array('_GET','_POST','_COOKIE') as $_request) |
要使用 Session ,就要存在 session_start()
,在全局搜索包含这个文件的且开启了 Session 的
找到一个满足条件的文件,那么可以在这里随意创建 Session
在本地搭一个相同的 CMS,然后在 index.php
中写入 die(var_dump($_SESSION))
以获取管理员(CMS 管理员的Session时相同的)
现在我们复刻一下 Session 就好
poc:interface/comment.php?_SESSION[duomi_ckstr]=dqmw&_SESSION[duomi_ckstr_last]=&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin
注意点:对于加不加引号的问题,原Session是 ["duomi_ckstr"]
,这种就可以不加,千万不能加单引号
访问 admin
页面
传入poc 再访问
成功进入后台
- 标题: 变量覆盖漏洞
- 作者: Itachi
- 创建于 : 2021-12-30 15:23:27
- 更新于 : 2021-12-30 18:09:54
- 链接: https://blog.tarchi.top/web/变量覆盖漏洞/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。