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