首先看题目,简单php进入场景如下图
看不懂,直接查了攻防世界题目:simple_php 详细思路_彼岸花苏陌的博客-CSDN博客这个回答超级详细直接懂得了。
PHP的弱类型总结攻防世界题目:simple_php 详细思路_彼岸花苏陌的博客-CSDN博客这个回答也特别详细
这里自己总结一下过程
题目第一个if说如果a=0并且$a指a必须为真得到flag1
第二个if说如果b为数字就会exit关闭
第三个if说b大于1234得到flag2
第一个if中
if($a==0 and $a){
echo $flag1;
}
有两个==是弱类型,当比较符两边的类型不同时它会转化成相同的,看题,get得到的是一个字符串类型,而0是一个数字类型,那我们就在URL后加/?a=0.0出现下图
0.0是字符串,在==转型时会变成0,故成功得到第一个flag
接下来看b
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
不可以是数字又要大于1234故尝试b=12345a这样既大于1234又不是数字。12345a是字符串,为什么12345a会大于1234呢,做出的解释是这是php类型转化的一个特性,它在转化时会从里到外转化的。提交后如下图