渗透培训笔记:bool比较缺陷

admin 2023年12月23日01:50:19评论26 views字数 1008阅读3分21秒阅读模式

在使用json_decode()函数或unserialize()函数时,部分结构被解释称bool类型,也会造成缺陷,运行结果超出研发人员的预期。

json_decond示例代码如下。

<?php    $str = '{"user":true,"pass":true}';    $data = json_decode($str,true);    if($data['user'] == 'root' && $data['pass'] == 'myPass'){        print_r('登录成功!'."n");    }else{        print_r('登录成功!'."n");    }

执行结果为:登录成功

unserialize示例代码如下。

<?php    $str = 'a:2:{s:4:"user";b:1;s:4:{pass};b:1;}';    $data = unserialize{$str};    if($data['user'] == 'root' && $data['pass'] == 'myPass'){        print_r('登录成功!'."n");    }else{        print_r('登录失败!'."n");    }

执行结果为:登录成功!

比较容易出现问题的做法就是将数据系列化后放入了浏览器的Cookie中,将用户信息保存在Cookie中是一种及其不安全的做法(后面公众号会继续对此类漏洞详解)。避免bool比较隐患的做法是,严格判断数据是否相等的时候使用绝对相等——三个等号(===)。代码修改如下。

<?php    $str = '{"user":true,"pass":true}';    $data = json_decode{$str,true};    //修改为绝对相等    if($data['user'] === 'root' && $data['pass'] === 'myPass'){        print_r('登录成功!'."n");    }else{        print_r('登录成功!'."n");    }

执行结果为:登录失败!

<?php    $str = 'a:2:{s:4:"user";b:1;s:4:{pass};b:1;}';    $data = unserialize{$str};    if($data['user'] === 'root' && $data['pass'] === 'myPass'){        print_r('登录成功!'."n");    }else{        print_r('登录失败!'."n");    }

执行结果为:登录失败!

原文始发于微信公众号(衡阳信安):渗透培训笔记:bool比较缺陷

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月23日01:50:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透培训笔记:bool比较缺陷http://cn-sec.com/archives/2236378.html

发表评论

匿名网友 填写信息