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

变量覆盖

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

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

$$使用不当;

extract()函数使用不当;

parse_str()函数使用不当;

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

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

例如:


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

靶场

duomicms-v2.0

本地测试

安装

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第1张图片

审计

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

image-20210512110027794

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

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第2张图片

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

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

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第3张图片

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第4张图片

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

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第5张图片

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第6张图片

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第7张图片

是一个登录判断的功能。登录成功之后会保存用户的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;

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第8张图片

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

$_SESSION[duomi_admin_id]=userID

$_SESSION[duomi_group_id]=groupid

$_SESSION[duomi_admin_name]=userName

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

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

那groupid是什么呢?

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第9张图片

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()的地方。

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第10张图片

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

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第11张图片

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

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第12张图片

拿到flag:

[zkaq靶场]变量覆盖--duomi cms通杀漏洞_第13张图片

你可能感兴趣的:(zkaq靶场,php,变量覆盖,duomicms,代码审计,渗透测试)