Exp1[SWPUCTF 2021 新生赛]easy_md5
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
确定是php语言,看关键句,这个语句的意思是前者不能等于后者,但两者的MD5的哈希码是相等的,确定是php弱类型。
php弱类型:
在PHP中,弱类型比较是指使用相等运算符(==)进行比较时,会进行弱类型转换。这意味着在进行比较之前,PHP会尝试将操作数转换为相同的类型,然后再进行比较。
特点:
1.(若字符型值开头为数字,转为数字;
若开头不为数字,为 null 弱比较与 0 相等。)
''abc123''==123 => false
''abc123''==0 => true
"123abc"==123 => true
2.布尔值true和任意字符串和数值比较
布尔值true和任意字符串和数值比较都弱相等,除了0和false,因为0也认为是bool false,true是不等于false的
var_dump(true=="hyuf") //true
var_dump(True == 0); //bool(false)
var_dump(True == 'False'); //bool(true)
var_dump(True == 2); //bool(true)
这个题主要在于要MD5的值相同,那就不能但用上面的来解决,必须用MD5值相同的
可以理解为MD5碰撞。
md5碰撞是运用了php弱类型比较的漏洞。比如:从变量得到两个值,两个变量的值不同,但最后md5加密过后的值相同。
栗子:
240610708
0e462097431906509019562988736854
aabg7XSs
0e087386482136013740957780965295
QNKCDZO
0e830400451993494058024219903391
第一种方法利用php的弱匹配
输入?name=240610708
然后发送数据password=NOOPCJF
第二种强类型:
往里面传数组