if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}else if(isset($_POST['password'])){
sleep(1);// do not brute force!
if (strcmp($_POST['password'],$password) ==0) {
echo"Congratulations! Flag is ".auth_code("strcmp") ."";
exit();
} else {
echo"Wrong password..";
}
}
strcmp 当参数有一个是数组时,会返回0.
因此提交 password[]=1 通关。
---------------------------------------------------------------------------------------------------------------
md5_compare 题目
if (!ctype_alpha($v1)) {$chk=false;}
if (!is_numeric($v2) ) {$chk=false;}
if (md5($v1) !=md5($v2)) {$chk=false;}
if ($chk){
include("../lib.php");
echo"Congratulations! FLAG is : ".auth_code("md5_compare");
} else {
echo"Wrong...";
}
看源码要求,变量1需要为字母类型、变量2需要为数字类型,并且两者MD5值需要相同。答案:240610708 和 QNKCDZO md5值类型相似,但并不相同,在“==”相等操作符的运算下,结果返回了true。那在php中这段操作是如何进行的:类似0e462097431906509019562988736854 这种形式 0e[0-9].*的字符串会被PHP解析器默认解析为 numerical strings类型。在“==”表达式进行字符串比较时,首先会判断类型,如果属于numerical strings 则先强转转换为数字。0e462097431906509019562988736854 =0×10【462097431906509019562988736854】次方 =0
0e83040045199349405802421990339 =0×10【83040045199349405802421990339】次方 =0
最终判断两者相等。
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');
网友评论