新银报到,多多指教,如有错误,多谢指出
extract变量覆盖
第一次遇到extract()函数,百度一波含义(回到家后google被ban了):
这样就简单了,直接构造payload:?shiyan=&flag,得到flag.
strcmp比较字符串
做的时候这道题目崩了,不过既然提到了strcmp,那么一定会用到数组绕过,随便丢了一个a[]进去,flag出来了???
urldecode二次编码绕过
百度一波相关函数:
eregi()函数在一个字符串搜索指定的模式的字符串。搜索不区分大小写。
这样题目就简单了:
第一关:id不能等于hackerDJ
第二关:$_GET[id] = urldecode($_GET[id]);
第三关 :if($_GET[id] == "hackerDJ")
这道题很丰富了我的见识,让我感觉到一直以来我对GET函数了解的还不是很深刻。
刚开始我做这道题的时候,直接将id赋值为hackerDJ的一次url编码,然后扑街了好久,最后多亏了题目的提示二次编码绕过将id赋值为hackerDJ的二次url编码,才得到flag,之后我又对题目进行了分析:
好题,好题。
md5()函数
这道题就是使username!=password && md5(username)===md5(password)
这样就很简单了,直接将240610708和QNKCDZO分别对上述赋值即可。
另外一种比较简单的方法就是md5()方法无法处理数组,直接构造payload:
username[]=1&password[]=2即可
数组返回NULL绕过
遇到 了熟悉的ereg函数,直接用%00截断。
还有熟悉的strpos函数,直接用数组截断。
构造如下payload:http://120.24.86.145:9009/19.php?password[]=%00
sha()函数比较绕过
比较长的一道题目,emmmmm。
需要对name和password进行赋值,而且需要他们的值不等,但是sha1的值相等。
sha1()函数无法处理数组,直接构造如下payload:
http://120.24.86.145:9009/7.php?name[]=1&password[]=2
md5加密相等绕过
这道题上面已经说过了,两个md5加密相等的值为240610708和QNKCDZO,这里需要将a赋值为240610708直接得到flag,payload:
http://120.24.86.145:9009/13.php?a=240610708
十六进制与数字比较
又是一道老长老长的题目,浏览一遍程序,最后需要number==temp是才可以输出flag ,然后我们可以对password赋值,根据题目提示,直接将password赋值为number的十六进制,然后flag出来了??(0x表示16进制)
payload:http://120.24.86.145:9009/20.php?password=0xdeadc0de
ereg正则%00截断
题目需要对password赋值
关卡1:if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) %00截断
关卡2:strlen($_GET['password']) < 8 && $_GET['password'] > 9999999
可以用数组绕过,并且这里为&&,前面可以用数组截断(True),后面数组中有字母以及%,无法解析(true)。
关卡3:strpos ($_GET['password'], '-') !== FALSE) 也可以用数组绕过
最终我的payload:
http://120.24.86.145:9009/5.php?password[]=1%00
strpos数组绕过
对ctf进行赋值
关卡1:if (@ereg ("^[1-9]+$", $_GET['ctf']) === FALSE) 用%00截断
关卡2:else if (strpos ($_GET['ctf'], '#biubiubiu') !== FALSE) 用数组截断
最终我的payload:
http://120.24.86.145:9009/15.php?ctf[]=1%00