攻防世界题目:simple_php 详细思路

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

点开,发现如下代码
攻防世界题目:simple_php 详细思路_第1张图片
没学过php怎么办…
不着急,一行一行分析百度得知是构成完整php语句,跳过

下一行:show_source(FILE);通过百度得知是个函数
攻防世界题目:simple_php 详细思路_第2张图片
攻防世界题目:simple_php 详细思路_第3张图片
就是让图中的代码五颜六色嘛(瞎猜的,意思差不多),按f12也体现出来了

下一行:include(“config.php”)
试了下在地址后面加上/config.php,结果没效果
百度后得知:是php的一个框架,可略过

下两行:根据所学过的c,c++猜测到是get一个a的值和b的值
查资料后发现差不多是这样
那网页上怎么get呢?
地址后面直接加/?a=*** &b=***传参即可

三个判断语句
第一个if:a==0 and $a
查得php中两个等于为宽松比较(csdn贴两次等于字体就变黄了,所以用语言形式说明)
三个等于为严格比较(类型不同即使一样也返回false)

举个例:两个等于情况下“0”=0返回true,而三个等于则返回false
攻防世界题目:simple_php 详细思路_第4张图片
攻防世界题目:simple_php 详细思路_第5张图片
所以把a赋值的时候保证第一位数是字母即可
$a:a必须为真

echo:就是c语言中的printf
攻防世界题目:simple_php 详细思路_第6张图片
第二个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
攻防世界题目:simple_php 详细思路_第7张图片

附上网上找的PHP逻辑运算符类型转换规则,感兴趣可以学习http://blog.sina.com.cn/s/blog_e4bd46a00102y87a.html

你可能感兴趣的:(ctf,攻防世界)