这位师傅已经写得很好了,强烈推荐 https://www.cnblogs.com/yesec/p/12535534.html
记录知识点
1.md5()的用法
2.MySQL的特性
总数据表
sql1
select * from users where username='admin' OR '1'
sql2
select * from users where username='admin' OR '1xxx'
sql3 总结:只要’or’后面的字符串为一个非零的数字开头都会返回True
3.PHP弱类型比较
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b))
{}
0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。 0的多少次方都是0,所以0==0,没毛病 这里可能会有人和我有一样的疑惑 同样是0的n次方这个却显示不出flag 自己动手,丰衣足食 既然md5后是字符串 那就是字符串之间的比较了
$md5_1 = "0e111111111";
$md5_2 = "0e222222222";
if ($md5_1==$md5_2){
echo "纯数字比较正确";
}else{
echo "纯数字比较错误";
}
echo PHP_EOL;
$md5_3 = "0eaaaaaaaaa";
$md5_4 = "0ebbbbbbbbb";
if ($md5_3==$md5_4){
echo "纯字母比较正确";
}else{
echo "纯字母比较错误";
}
echo PHP_EOL;
$md5_5 = "0e1111aaaaaa";
$md5_6 = "0e2222bbbbb";
if ($md5_5==$md5_6){
echo "数字+字母比较正确";
}else{
echo "数字+字母比较错误";
}
这下就简洁明了了
4.数组绕过md5
null===null,没毛病
然而本地数组绕过md5复现失败 是我php版本太高了?
本地搭建环境测试 在以下环境只有php8.0.2是不会显示flag的 其他版本都可以显示flag
|