php安全特性
1-is_numeric()類型的轉換缺陷 驗證函數是否為數字的函數
缺陷:當不是數字的字符串與數字互相比較,is_numeric()會自動的先把非數字型的數轉換成數字,在進行比較。
利用:在現在數字之后,如果使用該函數,則可以通過把數字改寫成字符串便可
2-Hash的比較缺陷
md5解密之后,得到0e開頭的字符串之后,但是MD5的值會直接吧0e當做科學計數法,看成了0e的多少次冪,但是依舊為0 。因此以此繞過MD5驗證
0e開頭的MD5值匯總
QNKCDZO 0e830400451993494058024219903391
240610708 0e462097431906509019562988736854
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s214587387a 0e848240448830537924465865611904
s1091221200a 0e940624217856561557816327384675
sha1加密后以0e開頭的字符串
sha1(‘aaroZmOk’)
sha1(‘aaK1STfY’)
sha1(‘aaO8zKZF’)
sha1(‘aa3OFF9m’)
3-parse_str()覆蓋缺陷 作用是解析字符串并注冊成變量,但是在注冊之前不會在意變量是否已經存在,而是直接覆蓋掉已經有了的變量
利用:直接將已經有的變量覆蓋成可控的內容
4-switch繞過 結合代碼分析,需要執行switch里面的某個分支,如果switch是整數型的case的判斷時,switch會自動將參數轉化成為int型
5-extract()變量覆蓋
函數從數組中將變量導入到當前的符號中,該函數使用數組鍵名作為變量名,使用數組作為變量值。針對數組中的每個元素,將在當前符號表中創建的對應變量,這個函數就會成功返回設置的變量數。
6-strcmp()比較字符串
strcmp是字符串的比較,str1<str2 則<0 str1>str2 則>0 str1=str2時 等于0
但是如果是數組比較的話,會直接返回NULL。if判斷使用的是==,所以if(strcmp($pattern,$))。NULL的布爾值為0 。注意邏輯表達
7-sha1數組繞過
===數據和類型完全相同,sha1默認的參數輸入為字符串,所以當輸入的數據為數組時,返回false,sha1(name[]=1)==false=sha2(password[]=2)
8-進制繞過
已經整數比較相等,轉換進制后與原數相比較
9-ereg() strpos()函數繞過
ereg()函數可以繞過姿勢-00截斷
數組繞過
10-X-forword-for
ip偽造
11-偽協議
file://
php://
zip:// bzip://
data://
http:// https://
12-變量覆蓋漏洞
extract()函數使用不當
parse_str()函數使用不當
import_request_variables()使用不當
$$使用不當
開啟了全局變量注冊






