web安全 變數覆蓋漏洞

2021-07-02 20:08:26 字數 2280 閱讀 5927

一、全域性變數覆蓋

當register_global=on時,變數**可能是各個不同的地方,比如頁面的表單,cookie等。

<?php

echo "register_globals: ".(int)ini_get("register_globals")."

";if ($auth)

?>

當register_globals=off時,這段**不會出問題。

但是當register_globals=on時,提交請求url:變數$auth將自動得到賦值。得到的結果為

register_globals:1

private!

小記:如果上面的**中,已經對變數$auth賦了初始值,比如$auth=0,那麼即使在url中有/test.php?auth=1,也不會將變數覆蓋,也就是說不會列印出private!

通過$globals獲取的變數,也可能導致變數覆蓋。

<?php

echo "register_globals:".(int)ini_get("register_globals")."

";if (ini_get('register_globals')) foreach($_request as $k=>$v) unset($);

print $a;

print $_get[b];

?>

變數$a未初始化,在register_globals=on時,再嘗試控制「$a」的值(會因為這段**而出錯。

而當嘗試注入「globals[a]」以覆蓋全域性變數時(則可以成功控制變數「$a」的值。這是因為unset()預設只會銷毀區域性變數,要銷毀全域性變數必須使用$globals。

而在register_globals=off時,則無法覆蓋到全域性變數。

小記:register_globals的意思是註冊為全域性變數,所以當on的時候,傳遞過來的值會被直接註冊為全域性變數而直接使用,當為off的時候,就需要到特定的陣列中去得到它。unset用於釋放給定的變數

二、extract()變數覆蓋

<?php

$auth = '0';

extract($_get);

if($auth==1)else

?>

介面上會列印出private!

安全的做法是確定register_globals=off後,在呼叫extract()時使用extr_skip保證已有變數不會被覆蓋。

小記:php extract() 函式從陣列中把變數匯入到當前的符號表中。對於陣列中的每個元素,鍵名用於變數名,鍵值用於變數值。

三、遍歷初始化變數

常見的一些以遍歷的方式釋放變數的**,可能會導致變數覆蓋。

<?

$chs = '';

if($_post && $charset != 'utf-8')

unset($chs);

}?>

若提交引數chs,則可覆蓋變數"$chs"的值。

小記:在**審計時需要注意類似「$$k」的變數賦值方式有可能覆蓋已有的變數,從而導致一些不可控制的結果。

四、import_request_variables變數覆蓋

<?php

$auth = '0';

import_request_variables('g');

if($auth == 1)else

?>

當使用者輸入時,網頁上會輸出private!

import_request_variables('g')指定匯入get請求中的變數,從而導致變數覆蓋。

小記:import_request_variables — 將 get/post/cookie 變數匯入到全域性作用域中。如果你禁止了 register_globals,但又想用到一些全域性變數,那麼此函式就很有用。

五、parse_str()變數覆蓋

$var='init';

parse_str($_server['query_string']);

print $var;

與parse_str()類似的函式還有mb_parse_str()

小記:parse_str — 將字串解析成多個變數,如果引數str是url傳遞入的查詢字串(query string),則將它解析為變數並設定到當前作用域。

web安全 變數覆蓋

在demo 傳送 兩個 及 遍歷初始化變數時,可能會導致變數被覆蓋 沒用過 demo1.php 為什麼會使用 迴圈賦值 我的認為是 這樣就可以迴圈賦值達到 pass 123 word 222 直接賦值的效果,但是沒有過濾。可能如果只是比較的化就不需要過濾吧 參考 不正確的使用 extract 函式 ...

變數覆蓋漏洞

變數覆蓋指的是可以用我們自定義的引數值替換程式原有的變數值 經常引發變數覆蓋漏洞的函式有 extract parse str 和import request variables 函式 一 使用函式不當 1.extract 函式 該函式有三種情況會覆蓋掉已有變數 第一種情況是第二個引數為extr ov...

PHP 變數覆蓋漏洞

php中的變數覆蓋漏洞 變數覆蓋 自定義的引數值替換原有變數值的情況稱為變數覆蓋漏洞 經常導致變數覆蓋漏洞場景有 開啟了全域性變數註冊 使用不當 extract 函式使用不當 parse str 函式使用不當 import request variables 使用不當等。在 php5.3 之前,預設...