九漏洞挖掘与代码审计变量覆盖漏洞
Posted 玛卡巴卡巴巴亚卡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了九漏洞挖掘与代码审计变量覆盖漏洞相关的知识,希望对你有一定的参考价值。
一、变量覆盖
用我们的传参值替换程序原有的变量值。
1、常见场景
(1)$$使用不当
(2)extract()函数使用不当
(3)parse_str()函数使用不当
(4)import_request_variables()使用不当
2、函数解析
(1)extract()
将数组中变量导入当前符号表中。把数组中键和值分开,键是变量名,值是变量值。
(2)parse_str()
将查询字符串解析到变量中
(3)$$
$a =1;
$b =2;
echo $$a;
输出的结果是2.
常见的$$利用存在变量覆盖的代码:
<?php
$a = 1;
foreach(array('_COOKIE','_POST','_GET')as $_request)
{
foreach($$_request as $_key=>$_value)
{
$$_key=addslasheds($_value);
}
}
echo $a;
?>
遍历cookie,post,get,传入request中,利用$$_request把键值分离,最后把值用魔术引号处理,赋予$$_key
二、代码审计
找到可以利用变量覆盖的代码段
追踪函数_RunMagicQuetes,发现这是一个调用魔术引号的函数
但我们不知道哪里会执行foreach,可以在代码段中添加die(phpinfo());来定位
我们发现在duomi首页刷新就可以出现phpinfo,说明common.php在网站首页就被调用
再在foreach代码段实验,再次刷新,还是出现phpinfo页面,说明首页就会调用foreach。
也可以使用burp的爬虫功能,查看返回包中有没有phpinfo,来定位哪里被调用
找到login.php中的用户登录成功界面,在用户登录成功后,会用keepuser来保持用户连接
定位keepuser函数发现这里设定了session,session里有userid,groupid,username。权限是由session决定,通过这里我们可以设定session。
查找groupid,发现1为系统管理员,2为网站编辑员。当我们$_SESSION['groupid']=1时,就相当于获得系统管理员权限
session调用必须使用session_start(),于是我们在全局搜索,找到在gbook.php中,有调用我们之前找到的存在变量覆盖的文件名common.php
我们在gbook.php传参session,发现并不能成功登陆后台,于是我们查看一下我们此时的sessioin值
我们此时还需要正确的session格式,我们在check.admin.php中添加die(var_dump($_SESSION))输出session格式
array(5) { ["duomi_ckstr"]=> string(4) "ghkg" ["duomi_ckstr_last"]=> string(0) "" ["duomi_admin_id"]=> string(1) "1" ["duomi_group_id"]=> string(1) "1" ["duomi_admin_name"]=> string(5) "admin" }
正确session格式:
["duomi_ckstr"]=> string(4) "ghkg" ["duomi_ckstr_last"]=> string(0) "" ["duomi_admin_id"]=> string(1) "1" ["duomi_group_id"]=> string(1) "1" ["duomi_admin_name"]=> string(5) "admin"
修改后url传参:
http://127.0.0.1/duomi/upload/interface/gbook.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin
发现成功登陆后台
把穿擦那种duomi_admin_name删除后也可达到同样的效果,说明传参只有duomi_group_id和duomi_admin_id决定
三、靶场
在url中传参interface/gbook.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1就可以成功登陆后台,找到flag
以上是关于九漏洞挖掘与代码审计变量覆盖漏洞的主要内容,如果未能解决你的问题,请参考以下文章