打开源代码,出现code.txt
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
if($v1 != $v2 && md5($v1) == md5($v2)){
if(!strcmp($v3, $flag)){
echo $flag;
}
}
}
?>
- isset()函数用于检测变量是否已设置并且非NULL.
- strcmp() 函数比较两个字符串.
如果两个字符串相等,返回0
如果 string1 小于 string2,返回<0
如果 string1 大于 string2,返回>0
根据v2 && md5(v2):
- 姿势1:v1,v2 找到两个开头为0的md5值,例如:v1=s878926199a&&v2=s155964671a
- 姿势2:根据md5函数特性,用两个值不同但不可md5的数据类型,例如:
v1[]=1&&v2[]=2
根据 if(!strcmp(flag))
需要v3和flag值相同才返回flag的值。此处依旧利用函数特性,strcmp函数如果出错,其返回也是0,不可比较时出错,传入数组,例如:
v3[]=8.
综上,构造:
?v1=s878926199a&&v2=s155964671a&&v3[]=8
可得到flag