strcmp函数绕过

strcmp() 函数漏洞

注:这一个漏洞适用与5.3之前版本的php

题目代码:

 
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) {
if (strcmp($_GET['a'], $flag) == 0) 
die('Flag: '.$flag);
else
print 'No';
}
?>
 

使用GET方法获取参数a,使用strcmp()函数比较$flag与用户输入的值。

传入的期望类型是字符串类型的数据 ,但是这个函数当接受到不符合字符串类型的参数就会发生错误,并返回0

所以我们只需要提交一个非字符串类型的参数即可使得判断条件成立,比如使用数组类型

解题方法:

GET请求:?a[]=2

因为strcmp()无法比较数组,则报错并返回0,0==0成立,则输出flag。