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