web安全的学习之路(十一)

实验吧 天网管理系统


打开这道题,这是一道传说中的简单题目
进入题目,两个输入框,上面白纸黑字的写着用户名和密码(你觉得我会相信你吗?。。。好吧我相信了)
尝试一下username 和password 都是admin。。(明显不行)
那就查看一下源代码,在源代码中发现了一句话:

<!-- $test=$_GET['username']; $test=md5($test); if($test=='0') -->

这句话表示,用户名要是一个MD5加密之后是0的值,所以在网上找到一字符串,输入之后出现了一个网址,访问这个网址。
我得到了如下的提示:

$unserialize_str = $_POST['password']; $data_unserialize = unserialize($unserialize_str); if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') { print_r($flag); } 伟大的科学家php方言道:成也布尔,败也布尔。 回去吧骚年 

根据这句话,我得到几个信息
1.首先是构造一个字符串,作为密码,它需要被反序列化
2.这个字符串的序列化的值被导入数组,user部分应该等于“???”,pass
部分也应该等于“???”
3.这个知识点和bool类型的值有关
于是我查询了资料,找到了解题原理:
在php中 “==”的判断是不严谨的,也就是说,如果有一个字符串是“3kjahkfafaj” ,和数字3比较大小,在
“=="的判断条件下,这两个值是相等的,它省略了字符串“3”后面的字符,并且把字符类型转换成了数字类型
而特殊情况是:ture针对所有类型的值都在“==”的情况下相等,无论后面是“???”还是什么其他的字符串,
都可以相等,所以我们就得到了密码:

a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}

输入密码,得到flag

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值