strcmp比较字符串
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) {
if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。
//比较两个字符串(区分大小写)
die('Flag: '.$flag);
else
print 'No';
}
?>
- strcmp()
1.strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1e<str2,则返回负数;若str1>str2,则返回正数。
2.strcmp()函数是通过两个字bai符串一个一个字符比较的(du最多比较次数为第二zhi个参数的长度+1)
例如daostrcmp(“hello”,“here”);
首先比较第一个字符’h’= ‘h’相等
接着比较第二个字符’e’= 'e’相等
.接着比较第三个字符 ‘l’>‘e’,返回一个正值
如果字符串完全相等会回0 - die()
输出一条消息,并退出当前脚本
该函数是exit()函数的别名。
解法:
为什么不可以直接赋值a=0?
if (strcmp($_GET['a'], $flag) == 0)
此时的$flag) == 0)
指的不是flag的值为数字0,此时的0是布尔值,而flag的值早在$flag = "flag{xxxxx}";
就被定下来了,所以此时直接利用下面这个strcmp()的漏洞,就可以
这里strcmp有一个bug就是如果比较的是数组的话,直接返回一个0。
构造payload:?a[]=1