CTF学习(入门):Bugku–web篇–矛盾
题目位置:http://123.206.87.240:8002/get/index1.php
涉及操作:PHP黑魔法、特殊情况下的=号判定
进入目标网站:
解读代码:
get一个num,
若num不是数字,
出一次num的值,后若num=1
出flag;
若num为数字则不进行任何操作
所以要输出flag,首先要num不是数字,然后又要num=1
这显然是矛盾的。
单纯使num=1或=a结果如下:
这就只能用PHP的一个特性:
对1加一个字符,如“1a”、“1-”,判断该整体是否等于1时,判别式值为True
如“1b==1”,其值会是True
由此我们可以给num任意一个“1+字符”的值
如图给了num等于1b,它就给出了flag:
由此得到flag。
之后可对该判断方式做进一步测试,以进一步熟悉它的性质:
可见123a不是数字且不等于1;123是数字;1.23是数字;1.2aa3不是数字且不等于1;a1a1不是数字且不等于1;1.a23不是数字且等于1
可推测其在做“=1”的判定时,应是取了第一个字符之前的数字的整体,而与1进行比较的。
没了,结束。