自学内容网 自学内容网

php代码审计 -动态调试-变量覆盖挖掘

动态调试-变量覆盖挖掘

搜索关键字$$挖掘

看懂下面执行就明白变量覆盖的定义了

在这里插入图片描述

多米cms 变量覆盖导致未授权登录后台

https://down10.zol.com.cn/20190909/151117414994564.zip

搜索$$

在这里插入图片描述

来到duomiphp/common.php文件

在$$存在的这行打上断点
在这里插入图片描述

访问url:http://127.0.0.1:8091/search.php?searchword=qdy

在这里插入图片描述

$_request = "_GET"
$$_request = $_GET
//而收到的ge请求searchword参数就变成了变量$$_request的值也就是$_k的值

发现

$$_request是一个数组,那么var_dump一下

在这里插入图片描述

在这里插入图片描述

这里的就是循环$$_request

键值分别复制给$_k 和 $_v

下一步寻找可利用的点,比如鉴权的地方,判定某个变量必须等于某个值,我们就可以使得变量覆盖导致未授权

寻找包含了这个文件的文件

在这里插入图片描述

发现有个login.php看起来是涉及登录的文件,应该可以利用

打开admin/login.php文件,发现同时包含了check.admin.php的文件,可能是鉴权文件

在这里插入图片描述

打下断点,不断跟踪代码,发现登录检测代码段

在这里插入图片描述

要想成功到达成功登录,必须经过4个if

在这里插入图片描述

访问/admin

断点发现变量$dopost居然为空,那么利用变量覆盖漏洞更改

在这里插入图片描述

变量覆盖dopost变量

http://127.0.0.1:8091/admin/login.php?dopost=login

在这里插入图片描述

成功

在这里插入图片描述

防止进入验证码错误的代码段,必须使得 s v a l i = = svali== svali==validate

上面代码可以看出来svali会被重新赋值,而validate可以变量覆盖,所以得根据以下代码构造validate

$svali = strtolower(GetCkVdValue());

在这里插入图片描述

只是判断是否设置了

$_SESSION[‘duomi_ckstr’]

若设置了,则返回$_SESSION[‘duomi_ckstr’]

先动态调试登录admin成功的session的生成代码

在这里插入图片描述

发现好像和uid、gid等有关

在这里插入图片描述

以下是admin用户的session

在这里插入图片描述

数据库内

在这里插入图片描述

那么直接构造url

_SESSION[duomi_ckstr]=abcd&_SESSION[duomi_ckstr_last]=&_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=admin

但是需要找到session_start()代码在包含/duomiphp/common.php文件前的文件

因为session_start()会重新覆盖session值

在这里插入图片描述

找到interface/comment.php文件是这样,构造url生成session:

http://127.0.0.1:8091/interface/comment.php?_SESSION[duomi_ckstr]=abcd&_SESSION[duomi_ckstr_last]=&_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=admin

在这里插入图片描述

再访问需要鉴权的网页/admin

在这里插入图片描述

成功登录


原文地址:https://blog.csdn.net/weixin_67289581/article/details/143897990

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!