變量覆蓋 | 代碼審計

變量覆蓋--代碼審計php

這是個薄弱地方,因此此次學習一下,總結一下。html

 

變量覆蓋漏洞:自定義的參數值替換原有變量值的狀況稱爲變量覆蓋漏洞數組

常常致使變量覆蓋漏洞場景有:$$ 使用不當,extract() 函數使用不當,parse_str() 函數使用不當,import_request_variables() 使用不當,開啓了全局變量註冊函數

 

 

$$致使的變量覆蓋學習

$$介紹
$$這種寫法稱爲可變變量
一個可變變量獲取了一個普通變量的值做爲這個可變變量的變量名。spa

 

<?php 
$a = "hello";
echo "$a"; //輸出hello
$a="world";
echo "$a"; //輸出hello
echo "$$a"; //輸出word
echo "$a ${$a}"; //輸出hello world
echo "$a $hello"; //輸出hello world
?>

 

漏洞產生
使用 foreach 來遍歷數組中的值,而後再將獲取到的數組鍵名做爲變量,數組中的鍵值做爲變量的值。所以就產生了變量覆蓋漏洞。code

 

<?php
foreach ($_GET as $key => $value) {
${$key} = $value;
}
echo $a;
?>

 

get獲得的數據$key和$value,關鍵第3行,${$key}用get傳進來的$key作爲新的變量,將get傳進來的$value賦值給它。
get ?a=1 第3行會解析爲$a=1。就形成了變量覆蓋。htm

 

 

extract()函數致使的變量覆蓋blog

extract() 該函數使用數組鍵名做爲變量名,使用數組鍵值做爲變量值。針對數組中的每一個元素,將在當前符號表中建立對應的一個變量。 字符串

extract()的用法參考:http://www.runoob.com/php/func-array-extract.html

 

 

 

parse_str函數致使的變量覆蓋

parse_str() 函數用於把查詢字符串解析到變量中,若是沒有array 參數,則由該函數設置的變量將覆蓋已存在的同名變量。

相關文章
相關標籤/搜索