01 md5加密漏洞比較哈希字符串的時候,,php程序把每一個以“0x”開頭的哈希值都解釋為科學計數(shù)法0的多少次方,恒為0,。 所以如果兩個不同的密碼經過哈希以后,,其哈希值都是以“0e”開頭的,那么php將會認為他們相同,。 另外md5加密是有幾率兩個字符串不同,,但是加密后的值是相同的情況,這種情況稱為哈希碰撞,。 <?php$str1 = 's878926199a';$str2 = 's214587387a'; echo json_encode([ 'md5_str1' => md5($str1), 'md5_str2' => md5($str2), 'bool' => md5($str1) == md5($str2)]); 結果兩個值加密后竟然相等,。 缺點你懂的,如果一個網站的某個用戶密碼加密后剛好是0e開頭的,,這個時候黑客過來破解,,很容易就攻入了。
02 is_numeric漏洞會忽視0x這種十六進制的數(shù) 容易引發(fā)sql注入操作,,暴露敏感信息 echo json_encode([ is_numeric(233333), is_numeric('233333'), is_numeric(0x233333), is_numeric('0x233333'), is_numeric('233333abc'),]); 結果如下: 16進制數(shù)0x61646D696EASII碼對應的值是admin,。 如果我們執(zhí)行了后面這條命令的話:SELECT * FROM tp_user where username=0x61646D696E,結果不言而喻
03 in_array漏洞in_array中是先將類型轉為整形,,再進行判斷,。 PHP作為弱類型語言,類型轉換的時候,,會有很大漏洞,。 轉換的時候,,如果將字符串轉換為整形,從字符串非整形的地方截止轉換,,如果無法轉換,,將會返回0。 <?phpvar_dump(in_array('2%20and%20%', [0,2,3])); 結果如下:
04 switch漏洞switch中是先將類型轉為整形,,再進行判斷,。 PHP作為弱類型語言,類型轉換的時候,,會有很大漏洞,。 轉換的時候,如果將字符串轉換為整形,,從字符串非整形的地方截止轉換,,如果無法轉換,將會返回0,。 <?php$i ='abc';switch ($i) { case 0: case 1: case 2: echo 'i是比3小的數(shù)'; break; case 3: echo 'i等于3';} 結果如下: i是比3小的數(shù),。 05 intval強轉漏洞PHP作為弱類型語言,類型轉換的時候,,會有很大漏洞。 轉換的時候,,如果將字符串轉換為整形,,從字符串非整形的地方截止轉換,如果無法轉換,,將會返回0,。
|
|
來自: Fengsq501u81r4 > 《計算機》