CTF学习(入门):Bugku--web篇--矛盾

CTF学习(入门):Bugku–web篇–矛盾

题目位置:http://123.206.87.240:8002/get/index1.php
涉及操作:PHP黑魔法、特殊情况下的=号判定

进入目标网站:

CTF学习(入门):Bugku--web篇--矛盾_第1张图片
解读代码:
get一个num,
若num不是数字,
出一次num的值,后若num=1
出flag;
若num为数字则不进行任何操作

所以要输出flag,首先要num不是数字,然后又要num=1
这显然是矛盾的。
单纯使num=1或=a结果如下:CTF学习(入门):Bugku--web篇--矛盾_第2张图片

CTF学习(入门):Bugku--web篇--矛盾_第3张图片

这就只能用PHP的一个特性:
对1加一个字符,如“1a”、“1-”,判断该整体是否等于1时,判别式值为True
如“1b==1”,其值会是True

由此我们可以给num任意一个“1+字符”的值

如图给了num等于1b,它就给出了flag:CTF学习(入门):Bugku--web篇--矛盾_第4张图片
由此得到flag。

之后可对该判断方式做进一步测试,以进一步熟悉它的性质:

CTF学习(入门):Bugku--web篇--矛盾_第5张图片

CTF学习(入门):Bugku--web篇--矛盾_第6张图片

CTF学习(入门):Bugku--web篇--矛盾_第7张图片
CTF学习(入门):Bugku--web篇--矛盾_第8张图片
CTF学习(入门):Bugku--web篇--矛盾_第9张图片
CTF学习(入门):Bugku--web篇--矛盾_第10张图片

可见123a不是数字且不等于1;123是数字;1.23是数字;1.2aa3不是数字且不等于1;a1a1不是数字且不等于1;1.a23不是数字且等于1

可推测其在做“=1”的判定时,应是取了第一个字符之前的数字的整体,而与1进行比较的。

没了,结束。

你可能感兴趣的:(BugkuCTF,wep)