借鉴博客
[SWPUCTF 2021 新生赛]easy_md5_青少年ctf easymd5-CSDN博客
我们直接看见源码
<?php highlight_file(__FILE__);include 'flag2.php';if (isset($_GET['name']) && isset($_POST['password'])){$name = $_GET['name'];$password = $_POST['password'];if ($name != $password && md5($name) == md5($password)){echo $flag;}else {echo "wrong!";}}
else {echo 'wrong!';
}
?>
就是一个很简单的相等
然后php的弱比较
PHP两种比较:
a.‘==’弱类型比较:
‘123’==‘123’---->true
‘123’==‘123abc....’---->true
注:只取字符串开头整数部分,特别注意*e*(科学计数法)开头的字符串取科学计数法的数值,如:
‘1e3’==‘1e3’ ---->true
‘1e3ctf’==‘1e3ctf’ ---->true
‘1e3’==‘1e4’ ---->false
‘1e3ctf’==‘1e4ctf’ ---->false
知道了这个是若比较,并且是md5
我们有两方式
1.数组绕过
原理:PHP md5函数接收的参数为string(字符串型),如果传入arry(数组型)就无法计算其md5值,但不会报错,导致数组md5值都相等.
两个null 肯定相等
2弱比较
PHP在进行“==”(弱类型比较)时,会先转换字符串类型,再进行字符串比较,而进行md5后以0e开头的都会被PHP识别为科学计数法,即0e*被视作0的*次方,结果都为0,故我们只需找到md5后为0e*的字符串,常用md5后为0e*的有:
240610708 0e462097431906509019562988736854
QLTHNDT 0e405967825401955372549139051580
QNKCDZO 0e830400451993494058024219903391
PJNPDWY 0e291529052894702774557631701704
NWWKITQ 0e763082070976038347657360817689
NOOPCJF 0e818888003657176127862245791911
MMHUWUV 0e701732711630150438129209816536
MAUXXQC 0e478478466848439040434801845361