1、点击链接,页面显示如下:
2、结合hint1,首先打开控制台尝试寻找
3、访问code.txt,代码来啦
<?php
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;
}
}
}
?>
4、分析代码,拿到flag的关键在于
-
v1、v2数值不同,但MD5相同
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。
以下值在md5加密后以0E开头:
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s878926199a
0e545993274517709034328855841020
QNKCDZO
0e830400451993494058024219903391
s155964671a
0e342768416822451524974117254469
……
- v3的值与flag不相等
//strcmp() 函数比较两个字符串。
//strcmp() 函数是二进制安全的,且对大小写敏感。
strcmp(string1,string2)
strcmp()要求传入字符串。如果传入非字符串呢?
结果函数报错!但是函数返回0 。 虽然报错了但函数的判断却是 相等
所以我将v3以数组方式传递
5、成功拿到flag