【攻防世界】web新手练习007 simple_php

本文详细介绍了攻防世界Web新手练习007simple_php的解题过程,涉及PHP的弱类型比较。通过分析PHP代码,得出获取flag1和flag2的条件,最终成功组合完整flag。文章强调了理解PHP弱类型转换在解决此类问题中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【攻防世界】web新手练习007 simple_php

难度系数:1
题目描述:

小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

题目场景:

http://111.200.241.244:55838/在这里插入图片描述

解题思路
  1. 遇见web题目,习惯性F12看一下控制台。
    嗯,网页结构就是一串php代码在这里插入图片描述

  2. 思考题目提示simple_php随手设置的密码
    很明显,网页中的代码是php语言编写的。
    因此,按照php语言去理解:
    (1)a和b是两个变量,这两个变量可以通过get的方式去传参。
    (2)flag由两部分组成,flag1和flag2。
    (3)需要把两个逻辑判断都为真才能得到两部分flag。

  3. flag1的获得

if($a==0 and $a){
    echo $flag1;
}

(1)需要同时满足两个条件:
条件1:变量$a==0
条件2:$a$a
条件1php弱类型的等于判定,也就是说$a与0,可以数据类型不相等,只要$a的最后结果是0就可以。比如:$a的值是字符串"hello",那么"hello"0==操作比较时,会先把字符串转换成数字0所相同的数据类型,所有字符串转换成数字类型之后,都是数字0 。因此,a可以是0,也可以是任意字符串。
条件2$a为真,也就是说$a不能是0
综上所述,a只能是除了“1"之外的任意字符串。
(2)在地址栏加入?a=“hell0”
注: 此处a可以是任意字符串
得到了flag1:
Cyberpeace{647E37C7627CC3E401
在这里插入图片描述

4.flag2的获得

if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
}

(1)需要同时满足两个条件
条件1$b 不能是数字类型
条件2$b 要大于数字1234
注:is_numeric() 函数会判断如果是数字和数字字符串则返回 TRUE,否则返回 FALSE。
由于php的弱类型转化,要同时满足 条件1和条件2,则需要使得$b 的值为大于1234再拼接任意字符串,如:“9999hahahah”.
(2)在地址栏加入?9999hahahah
注: 此处b可以是大于1234再拼接任意字符串*的字符串
得到了flag2:
9EC69324F66C7C}
在这里插入图片描述
5. 结合flag1和flag2
(1) 方法1:可以根据刚刚得到的flag1和flag2直接拼接
(2)方法2:可以根据上述拼接的地址,直接在地址栏中输入,得到完整的flag
在这里插入图片描述

答案

Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

思考

php的弱类型比较。


如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值