theKingOfNight's Blog

CTF-Web-Bugku-代码审计

字数统计: 801阅读时长: 3 min
2019/01/19 Share

extract变量覆盖

image

第一次遇到extract()函数,百度一波含义(回到家后google被ban了):

image

这样就简单了,直接构造payload:?shiyan=&flag,得到flag.

strcmp比较字符串

image

做的时候这道题目崩了,不过既然提到了strcmp,那么一定会用到数组绕过,随便丢了一个a[]进去,flag出来了???

urldecode二次编码绕过

image

百度一波相关函数:

    eregi()函数在一个字符串搜索指定的模式的字符串。搜索不区分大小写。

这样题目就简单了:

    第一关:id不能等于hackerDJ

    第二关:$_GET[id] = urldecode($_GET[id]);

    第三关 :if($_GET[id] == "hackerDJ")

这道题很丰富了我的见识,让我感觉到一直以来我对GET函数了解的还不是很深刻。

刚开始我做这道题的时候,直接将id赋值为hackerDJ的一次url编码,然后扑街了好久,最后多亏了题目的提示二次编码绕过将id赋值为hackerDJ的二次url编码,才得到flag,之后我又对题目进行了分析:

image

好题,好题。

md5()函数

image

这道题就是使username!=password && md5(username)===md5(password)

这样就很简单了,直接将240610708和QNKCDZO分别对上述赋值即可。

另外一种比较简单的方法就是md5()方法无法处理数组,直接构造payload:

username[]=1&password[]=2即可

数组返回NULL绕过

image

遇到 了熟悉的ereg函数,直接用%00截断。

还有熟悉的strpos函数,直接用数组截断。

构造如下payload:http://120.24.86.145:9009/19.php?password[]=%00

sha()函数比较绕过

image

比较长的一道题目,emmmmm。

需要对name和password进行赋值,而且需要他们的值不等,但是sha1的值相等。

sha1()函数无法处理数组,直接构造如下payload:

http://120.24.86.145:9009/7.php?name[]=1&password[]=2

md5加密相等绕过

image

这道题上面已经说过了,两个md5加密相等的值为240610708和QNKCDZO,这里需要将a赋值为240610708直接得到flag,payload:

http://120.24.86.145:9009/13.php?a=240610708

十六进制与数字比较

image

又是一道老长老长的题目,浏览一遍程序,最后需要number==temp是才可以输出flag ,然后我们可以对password赋值,根据题目提示,直接将password赋值为number的十六进制,然后flag出来了??(0x表示16进制)

payload:http://120.24.86.145:9009/20.php?password=0xdeadc0de

ereg正则%00截断

image

题目需要对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数组绕过

image

对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
CATALOG
  1. 1. extract变量覆盖
  2. 2. strcmp比较字符串
  3. 3. urldecode二次编码绕过
  4. 4. md5()函数
  5. 5. 数组返回NULL绕过
  6. 6. sha()函数比较绕过
  7. 7. md5加密相等绕过
  8. 8. 十六进制与数字比较
  9. 9. ereg正则%00截断
  10. 10. strpos数组绕过