bugku-代码审计wp

1.extract变量覆盖

bugku-代码审计wp_第1张图片
解题方法: GET请求?flag=&shiyan=,extract()会将$flag和$gift的值覆盖了,将变量的值设置为空或者不存在的文件就满足$gift == $content

2.strcmp比较字符串


bugku-代码审计wp_第2张图片
                         PHP的strcmp()函数在PHP5.3版本之前使用数组可以绕过验证                                   

strcmp()用法参考:

      函数期望传入的类型是字符串类型的数据,要是我们传入非字符串类型的数据的话,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 。也就是说虽然报了错,但却判定其相等了,也就绕过了判断。

3.urldecode二次编码绕过


bugku-代码审计wp_第3张图片
eregi()是不区分大小写的正则匹配,进行两次url编码即可。

4.md5()函数


bugku-代码审计wp_第4张图片
显然我们得构造username和password的值不相等,但是它们的md5的值相等才能得到flag 因为md5不能处理数组,可以使用数组绕过,md5(数组)会返回null,这样可以实现username!=password,但是md5(username)===md5(password)

md5()参考:http://www.w3school.com.cn/php/func_string_md5.asp

5.数组返回NULL绕过


bugku-代码审计wp_第5张图片
ereg只能处理字符,而password是数组,所以返回的是null,三个等号的时候不会进行类型转换。所以null!==false。 strpos的参数同样不能够是数组,所以返回的依旧是null,null!==false也是正确。

6.弱类型整数大小比较绕过



bugku-代码审计wp_第6张图片
解题思路:is_numeric()函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对于第一个空格字符会跳过空格字符判断,接着后面的判断

7.sha()函数比较绕过


bugku-代码审计wp_第7张图片
第一处if ($_GET['name'] == $_GET['password'])判断时两数组确实是不同的,但在第二处else if (sha1($_GET['name']) === sha1($_GET['password']))判断时由于sha1()函数无法处理数组类型,将报错并返回false,false === false条件成立,这样就绕过了sha()函数获得flag

8.md5加密相等绕过


bugku-代码审计wp_第8张图片
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

9.十六进制与数字比较


bugku-代码审计wp_第9张图片
将3735929054进行十六进制转换,得到deadc0de,在转换得到的字符前加上0x,使用0xdeadc0de来进行绕过

10.ereg正则%00截断


bugku-代码审计wp_第10张图片
使用数组绕过

11.strpos数组绕过


bugku-代码审计wp_第11张图片
使用数组进行绕过

12.数字验证正则绕过

不会。

你可能感兴趣的:(bugku-代码审计wp)