ctf常见php弱类型分析

1. 布尔反序列化

1 $unserialize_str = $_POST[‘password‘]; 
2 $data_unserialize = unserialize($unserialize_str); 
3 if($data_unserialize[‘user‘]==‘???‘&&$data_unserialize[‘pass‘]==‘???‘) 4 { print_r($flag); }

反序列化后得到的值的user和pass都为不知道的,但是这里是两个==,根据php弱类型,bool值和任何字符串都为相等,即可以构造user和pass的值为bool

2.php引用赋值

 1 <?php 
 2 class just4fun { 
 3 
 4 var $enter; 
 5 var $secret; 
 6 } 
 7 
 8 if (isset($_GET[‘pass‘])) {
 9 
10  $pass = $_GET[‘pass‘];
11 
12  if(get_magic_quotes_gpc()){ 
13 $pass=stripslashes($pass); 
14 }
15  $o = unserialize($pass); 
16 if ($o) 
17 { $o->secret = "*"; 
18 if ($o->secret === $o->enter) 
19 echo "Congratulation! Here is my secret: ".$o->secret; 
20 else echo "Oh no... You can‘t fool me"; }
21  else echo "are you trolling?"; } ?>

这道题虽然不涉及弱类型,但是涉及到语言中的引用赋值,也是一个点,要使解序列化后的 (secret===enter)

这里是三个等号,要使这两个变量相等,且secret已经被赋值,所以用引用赋值的方式,$a=&$b,则变量a和b指向同一个数据,两个值一定相等

 

转载于:https://www.cnblogs.com/wfzWebSecuity/p/7485153.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值