md5
绕过
($a != $b && md5($a) == md5($b))的绕过
传参a=s1885207154a,b=s1836677006a
MD5值:
md5("s1885207154a") => 0e509367213418206700842008763514
md5("s1836677006a") => 0e481036490867661113260034900752
在PHP中 0e开头表示为科学计数法 0e
后面的字母 会被当作零处理
双md5碰撞绕过
if ($a != $b && md5($a) == md5(md5($b))
使md5($a)==md5(md5($b))
的值为0e
,只要使md5($b)
的值也为0e
,就绕过
找一个 值为0e开头,md5值也为0e开头的
md5("V5VDSHva7fjyJoJ33IQl") => 0e18bb6e1d5c2e19b63898aeed6b37ea
a=s1885207154a,b=V5VDSHva7fjyJoJ33IQl即可绕过if判断
双md5结果仍为0e开头字符串
MD5大全:
CbDLytmyGm2xQyaLNhWn
md5(CbDLytmyGm2xQyaLNhWn) => 0ec20b7c66cafbcc7d8e8481f0653d18
md5(md5(CbDLytmyGm2xQyaLNhWn)) => 0e3a5f2a80db371d4610b8f940d296af
770hQgrBOjrcqftrlaZk
md5(770hQgrBOjrcqftrlaZk) => 0e689b4f703bdc753be7e27b45cb3625
md5(md5(770hQgrBOjrcqftrlaZk)) => 0e2756da68ef740fd8f5a5c26cc45064
7r4lGXCH2Ksu2JNT3BYM
md5(7r4lGXCH2Ksu2JNT3BYM) => 0e269ab12da27d79a6626d91f34ae849
md5(md5(7r4lGXCH2Ksu2JNT3BYM)) => 0e48d320b2a97ab295f5c4694759889f
QLTHNDT:0e405967825401955372549139051580
>QNKCDZO:0e830400451993494058024219903391
>PJNPDWY:0e291529052894702774557631701704
>NWWKITQ:0e763082070976038347657360817689
>NOOPCJF:0e818888003657176127862245791911
>MMHUWUV:0e701732711630150438129209816536
>MAUXXQC:0e478478466848439040434801845361
md5弱类型比较
if (md5($_GET['a']) == md5($__GET['b']))
同理0e绕过
md5强类型比较
if(md5((string)$_GET['a'])===md5((string)$__GET['b']))
可以利用数组绕过
var_dump(md5([1,2,3])==md5([4,5,6]));
var_dump(md5($_GET['a'])==md5($_GET['b']));
?a[]=1&b[]
md5中需要的是一个string参数,但是当你传入一个array(数组)是,md5()是不会报错的,只是无法求出array的md5的值,这样就会导致任意的2个array的md5的值都会相等
md5碰撞
if($_GET['a']!$_GET['b'] && md5($_GET['a'])=md5($__GET['b']))
真实md5碰撞,因为此时不能输入数组了,只能输入字符串
a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
标签:__,string,GET,0e,绕过,md5
From: https://www.cnblogs.com/Yolololo/p/18158811