[zkaq靶场]变量覆盖--duomi cms通杀漏洞

变量覆盖

变量覆盖:值我们可以用我们的传参值去替换程序原有的变量值。

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

$$使用不当;

extract()函数使用不当;

parse_str()函数使用不当;

import_request_variables()使用不当,开启了全局变量注册等。

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

例如:

<?php
$a = 1;
foreach(array('_COOKIE','_POST','_GET') as $_request) {
foreach($$_request as $_key=>$_value) 
{$$_key=addslashes($_value);}}
echo $a;
?>
// $a 完全可以由传参决定。

靶场

duomicms-v2.0

本地测试

安装

image-20210512105258471

审计

发现这个地方可能存在变量覆盖:/duomiphp/common.php

image-20210512110027794

跟我们上面提到的结构很相像。

我们可以自己构造变量去覆盖原有的变量。

image-20210512110425357

这段代码不在任何条件当中,正常往下的流程就会执行到这里。

那么,我们需要找到哪里使用到这个文件和这段代码。

查看包含了common.php的地方:

image-20210512113632638

先看看后台登录的地方,调用了common.php。

image-20210512111958924

login.php查看了一下,没有可以构造变量的地方。

但是login.php包含了check.admin.php。

image-20210512121910689

check.admin.php中的keepUser方法在login.php被使用了

image-20210512122025402

image-20210512122117500

是一个登录判断的功能。登录成功之后会保存用户的session。

我们的漏洞点就是构造$_SESSION变量,成功登录到管理员后台。

而$_SESSION变量我们可以进行变量覆盖。

为了能成功登录到管理员后台,我们需要知道session中包含哪些东西。

check.admin.php:

_ S E S S I O N [ \_SESSION[ _SESSION[this->keepUserIDTag] = $this->userID;
_ S E S S I O N [ \_SESSION[ _SESSION[this->keepgroupidTag] = $this->groupid;
S E S S I O N [ _SESSION[ SESSION[this->keepUserNameTag] = $this->userName;

image-20210512122920935

显然,我们需要构造的有:

$_SESSION[duomi_admin_id]=userID

$_SESSION[duomi_group_id]=groupid

$_SESSION[duomi_admin_name]=userName

那么让这些值等于什么才能是管理员权限呢?

userID与userName 好理解,就是用户id与用户名嘛。

那groupid是什么呢?

全文搜索一下:/admin/admin_manager.php

image-20210512123638152

groupid=1即为系统管理员。

经过搜索,userID与userName是可以任意构造的。

那么我们的payload也就形成了:

_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=666

其实构造userID与groupid就行了。

那么构造好了payload需要在哪里使用呢?

既然与session有关,那必然要使用session_start()。

所以需要找到同时包含common.php与使用session_start()的地方。

image-20210512124512751

interface/gbook.php:下可以成功执行。

http://192.168.17.144/Duomicms_X2.0/upload/interface/gbook.php?_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=666

成功登录到后台,无需账户与密码。

image-20210512125003201

interface/comment.php

interface/comment.php/api/index.php

interface/comment.php/api/send.php

member/cpwd.php

member/exchange.php

member/exit.php

…等等这些路径下也可以执行,没有全部测试。但是应该大部分都可以。

靶场:

_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=123

image-20210512115145305

拿到flag:

image-20210512115234814

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值