攻防世界题目:simple_php 详细思路
题目:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
点开,发现如下代码
没学过php怎么办…
不着急,一行一行分析<?php ?>百度得知是构成完整php语句,跳过
下一行:show_source(FILE);通过百度得知是个函数
就是让图中的代码五颜六色嘛(瞎猜的,意思差不多),按f12也体现出来了
下一行:include(“config.php”)
试了下在地址后面加上/config.php,结果没效果
百度后得知:是php的一个框架,可略过
下两行:根据所学过的c,c++猜测到是get一个a的值和b的值
查资料后发现差不多是这样
那网页上怎么get呢?
地址后面直接加/?a=*** &b=***传参即可
三个判断语句:
第一个if:a==0 and $a
查得php中两个等于为宽松比较(****贴两次等于字体就变黄了,所以用语言形式说明)
三个等于为严格比较(类型不同即使一样也返回false)
举个例:两个等于情况下“0”=0返回true,而三个等于则返回false
所以把a赋值的时候保证第一位数是字母即可
$a:a必须为真
echo:就是c语言中的printf
第二个if:is_numeric($b)
百度得知numeric为一个函数,用来判断是否只由数字组成
那b则不是数字或者数字字符串
第三个if,很明显得出结论
最后得到:
get a和b的值
如果a和0比较返回为true而且a为真
而且b不是纯数字
而且b要大于1234
满足这些条件则返回flag
根据分析,a可以=abcd(以0开头会认为是八进制数字)
因为b不能是纯数字而且要大于1234(很明显提醒你了,可以在数字后面加字母表示非纯数字)
则b可以=9999c
然后把a=abcd,b=9999c写进去即可
成功拿到flag
附上网上找的PHP逻辑运算符类型转换规则,感兴趣可以学习http://blog.sina.com.cn/s/blog_e4bd46a00102y87a.html