九、漏洞挖掘与代码审计(2)变量覆盖漏洞

一、变量覆盖

用我们的传参值替换程序原有的变量值。

1、常见场景

(1)$$使用不当

(2)extract()函数使用不当

(3)parse_str()函数使用不当

(4)import_request_variables()使用不当

2、函数解析

(1)extract()

将数组中变量导入当前符号表中。把数组中键和值分开,键是变量名,值是变量值。

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第1张图片

(2)parse_str()

将查询字符串解析到变量中

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第2张图片

 

(3)$$

$a =1;

$b =2;

echo $$a;

输出的结果是2.

常见的$$利用存在变量覆盖的代码:

$_value)
		{
			$$_key=addslasheds($_value);
		}
	}
	echo $a;
?>

 遍历cookie,post,get,传入request中,利用$$_request把键值分离,最后把值用魔术引号处理,赋予$$_key

二、代码审计

找到可以利用变量覆盖的代码段

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第3张图片

追踪函数_RunMagicQuetes,发现这是一个调用魔术引号的函数

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第4张图片

但我们不知道哪里会执行foreach,可以在代码段中添加die(phpinfo());来定位

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第5张图片

我们发现在duomi首页刷新就可以出现phpinfo,说明common.php在网站首页就被调用

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第6张图片

再在foreach代码段实验,再次刷新,还是出现phpinfo页面,说明首页就会调用foreach。

也可以使用burp的爬虫功能,查看返回包中有没有phpinfo,来定位哪里被调用

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第7张图片

找到login.php中的用户登录成功界面,在用户登录成功后,会用keepuser来保持用户连接

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第8张图片

定位keepuser函数发现这里设定了session,session里有userid,groupid,username。权限是由session决定,通过这里我们可以设定session。

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第9张图片

查找groupid,发现1为系统管理员,2为网站编辑员。当我们$_SESSION['groupid']=1时,就相当于获得系统管理员权限

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第10张图片

session调用必须使用session_start(),于是我们在全局搜索,找到在gbook.php中,有调用我们之前找到的存在变量覆盖的文件名common.php

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第11张图片

我们在gbook.php传参session,发现并不能成功登陆后台,于是我们查看一下我们此时的sessioin值

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第12张图片

我们此时还需要正确的session格式,我们在check.admin.php中添加die(var_dump($_SESSION))输出session格式

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第13张图片

 

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

发现成功登陆后台

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第14张图片

把穿擦那种duomi_admin_name删除后也可达到同样的效果,说明传参只有duomi_group_id和duomi_admin_id决定

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第15张图片

三、靶场

在url中传参interface/gbook.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1就可以成功登陆后台,找到flag

九、漏洞挖掘与代码审计(2)变量覆盖漏洞_第16张图片

你可能感兴趣的:(漏洞挖掘与代码审计,信息安全)