本文和大家分享的主要是由php offset特征造成的繞過漏洞相關(guān)內(nèi)容,一起來看看吧,希望對大家學習php有所幫助。
php中的字符串存在一個非常有趣的特性,php中的字符串也可以像數(shù)組一樣進行取值。
$test = "hello world";echo $test[0];
最后的結(jié)果就是h。
但是上述的這種特性有時會有意想不到的效果,看下面這段代碼
$mystr = "hello world";echo $mystr["pass"];
上述的代碼的輸出結(jié)果是h.這是為什么呢?其實很簡單,和很多其他的語言一樣,字符串在php中也像數(shù)組一樣可以使用下標取值。 $mystr["pass"] 中pass會被進行隱性類型轉(zhuǎn)換為0,這樣$mystr[0] 的輸出結(jié)果就是首字母h.
同樣地,如果嘗試如下的代碼:
$mystr = "hello world";echo $mystr["1pass"];
輸出結(jié)果就是e.因為1pass會被隱性類型轉(zhuǎn)換為1,$mystr[1]的輸出結(jié)果就是第二個字母e.
字符特性造成的漏洞
下面這段代碼是在在phpspy2006中用于判斷登錄時所使用的代碼。
$admin['check'] = "1";
$admin['pass'] = "angel";
......if($admin['check'] == "1") {
....
}
這樣的驗證邏輯如果利用上述的特性就很容易地就可以被繞過。$admin沒有被初始定義為數(shù)組類型,那么當我們用字符串提交時phpsyp.php?admin=1abc時,php會取字符串1xxx的第一位,成功繞過if的條件判斷。
上面那段代碼是一個代碼片段,接下來的這段代碼是一段完整的邏輯代碼,來自于php4fun中第5題,比較有意思。
來源:乘物游心