變數覆蓋漏洞

2021-08-07 01:32:02 字數 1279 閱讀 6667

變數覆蓋指的是可以用我們自定義的引數值替換程式原有的變數值

經常引發變數覆蓋漏洞的函式有:extract(),parse_str()和import_request_variables()函式

一、使用函式不當

1.extract()函式

該函式有三種情況會覆蓋掉已有變數:

第一種情況是第二個引數為extr_overwrite, 表示如果有衝突,則覆蓋已有的變數。

第二種情況是只傳入第乙個引數,這時候預設為extr_overwrite模式。

第三種情況是第二個引數為extr_if_exists, 表示僅在當前符號表中已有同名變數時覆蓋它們的值。

payload:

<?php $b=1; $a=array('b'=>'1'); extract($a); print_r($b); ?>

2.parse_str()函式

parse_str()函式的作用是解析字串並且註冊成變數。parse_str()函式有兩個引數,第乙個引數是必須的,代表要解析註冊成變數的字串。第二個引數是乙個陣列,註冊的變數會放到這個陣列裡。

payload:

<?php $b=1; parse_str('b=2'); print_r($b);?>

3.import_request_variables函式

import_request_variables()函式的作用是把get,post和cookie的引數註冊成變數,用在register_globals被禁止的時候,不過這個函式在php5.4之後就被取消了。

import_request_variables函式有兩個引數,第乙個引數代表要註冊的變數,gpc分別代表get,post,cookie;第二個引數為要註冊的變數字首

payload:

<?php $b=1; import_request_variables('gp'); print_r($b);?>

請求1.php?b=2

二、$$變數覆蓋

payload:

<?php $a=1; 

foreach(array('_cookie','_post','_get') as $_request)

echo $a; ?>

請求:1.php?a=2

三、漏洞防範

1.使用原始變數陣列

建議直接用原始的變數陣列,如$_post,$_get等陣列變數進行操作,避免使用變數註冊

2.驗證變數是否存在

註冊變數前先判斷變數是否存在,使用extract()函式則可以配置第二個引數為extr_skip,自行申明的變數一定要初始化。

PHP 變數覆蓋漏洞

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

web安全 變數覆蓋漏洞

一 全域性變數覆蓋 當register global on時,變數 可能是各個不同的地方,比如頁面的表單,cookie等。echo register globals int ini get register globals if auth 當register globals off時,這段 不會出問...

Discuz DCACHE陣列變數覆蓋漏洞

discuz dcache陣列變數覆蓋漏洞 author ryat at url www.wolvez.org url team url 由於discuz 的wap index.php呼叫chinese類裡convert方法在處理post資料時不當忽視對陣列的處理,可使陣列被覆蓋為null.當覆蓋 ...