1、安全開發-原生PHP-弱類型脆弱
2、安全開發-原生PHP-函數&數據類型
3、安全開發-原生PHP-代碼審計案例
1、== 和 ===
兩個等號==是弱比較,使用==進行對比的時候,php解析器就會做隱式類型轉換,如果兩個值的類型不相等就會把兩個值的類型轉為同一類型進行對比。
2、MD5對比缺陷
進行hash加密出來的字符串如存在0e開頭進行弱比較的話會直接判定為true,
即MD5(QNKCDZO)==MD5(240610708)進行“==”若比較時,返回的結果會為真,因為md5值都是0e開頭
QNKCDZO
MD5:0e830400451993494058024219903391
240610708
MD5:0e462097431906509019562988736854
s878926199a
MD5:0e545993274517709034328855841020
s155964671a
MD5:0e342768416822451524974117254469
s214587387a
MD5:0e848240448830537924465865611904
s214587387a
MD5:0e848240448830537924465865611904
s878926199a
MD5:0e545993274517709034328855841020
s1091221200a
MD5:0e940624217856561557816327384675
s1885207154a
MD5:0e509367213418206700842008763514
3?、函數strcmp類型比較缺陷
低版本php的strcmp()函數比較的是字符串類型,如果強行傳入其他類型參數,會出錯,出錯后返回值0,正是利用這點進行繞過
4、函數Bool類型比較缺陷
在使用 json_decode() 函數或 unserialize() 函數時,部分結構被解釋成 bool 類型,只有true和false也會造成缺陷,運行結果超出研發人員的預期
正常驗證思路
繞過思路
正常驗證思路
繞過思路
5、函數switch 類型比較缺陷
當在switch中使用case判斷數字時,switch會將參數轉換為int類型(整數)計算
6、函數in_array數組比較缺陷
當使用in_array()或array_search()函數時,如果第三個參數沒有設置為true,則in_array()或array_search()將使用松散比較(弱比較)來判斷
7、===數組比較缺陷
注意此時遇到的是 “===” ,這個是強比較,先比較類型,再比較數值;不過也不是代表無從下手,也是存在繞過的可能性的,在md5()函數傳入數組時會報錯返回NULL,當變量都導致報錯返回NULL時就能使使得條件成立。
二、案例:
CTF題目:
https://ctf.bugku.com/challenges/detail/id/72.html
https://ctf.bugku.com/challenges/detail/id/94.html
三、代碼審CMS:
https://mp.weixin.qq.com/s/k1hRg7cmRwwJJyyX04Ipmg