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