php遠程文件執行漏洞(php遠程文件執行漏洞怎麼辦)

本文目錄一覽:

php 遠程代碼執行漏洞 怎麼修復

一般來說,不用管。kb2502786 excel遠程代碼執行漏洞屬於Microft office的漏洞,主要是Excel的漏洞,會攻擊你的Excel文件或者程序,你如果經常使用就Excel書寫文件或者工作,就補上這個漏洞,如果不經常使用Excel就不用管它了每次檢查都出現,不是很正常,你用安全360查一遍漏洞,補上這個漏洞,然後立刻重啟,就可以完全修復好這個漏洞。謝謝,望採納

關於php的一個漏洞

extract() 例子

?php

$size = “large”;

$var_array = array(“color” = “blue”,

“size” = “medium”,

“shape” = “sphere”);

extract($var_array, EXTR_PREFIX_SAME, “wddx”);

echo “$color, $size, $shape, $wddx_size\n”;

?

上例將輸出:

blue, large, sphere, medium

EXTR_OVERWRITE

如果有衝突,覆蓋已有的變量。

EXTR_SKIP

如果有衝突,不覆蓋已有的變量。

EXTR_PREFIX_SAME

如果有衝突,在變量名前加上前綴 prefix。

EXTR_PREFIX_ALL

給所有變量名加上前綴 prefix。自 PHP 4.0.5 起這也包括了對數字索引的處理。

EXTR_PREFIX_INVALID

僅在非法/數字的變量名前加上前綴 prefix。本標記是 PHP 4.0.5 新加的。

EXTR_IF_EXISTS

僅在當前符號表中已有同名變量時,覆蓋它們的值。其它的都不處理。可以用在已經定義了一組合法的變量,然後要從一個數組例如 $_REQUEST 中提取值覆蓋這些變量的場合。本標記是 PHP 4.2.0 新加的。

EXTR_PREFIX_IF_EXISTS

僅在當前符號表中已有同名變量時,建立附加了前綴的變量名,其它的都不處理。本標記是 PHP 4.2.0 新加的。

EXTR_REFS

將變量作為引用提取。這有力地表明了導入的變量仍然引用了 var_array 參數的值。可以單獨使用這個標誌或者在 extract_type 中用 OR 與其它任何標誌結合使用。本標記是 PHP 4.3.0 新加的。

如果沒有指定 extract_type,則被假定為 EXTR_OVERWRITE。

在語句前 加上 “@”可以屏蔽當前輸出的錯誤 比如 這裡$MOD出錯了 本來是應該顯示錯誤或者程序終止的 就跳過不顯示錯誤並且繼續執行了

這裡的template函數應該是一個模板處理的 到底會不會出現文件包含漏洞還要具體分析這個函數 以及服務器的php配置參數

這裡看這個地方漏洞幾乎是不可能的 因為這裡$MOD你不可能通過外部賦值 除了register_global=on是可能的 如果template函數裡面對於文件路徑的檢查不嚴格 比如直接用mod 除非同時服務器允許包含遠程文件的俄設置為on 這兩個配置條件+template檢測不嚴格同時滿足的話或許能是個漏洞 但是這種情況的概率極其低

網上有兄弟說PHP又有漏洞了.現在是5.2.17p1還用升級嗎

你好,不用的,沒事。

日前,PHP 5.3.9被H客發現存在嚴重的安全漏洞,遠程攻擊者可以直接利用此漏洞執行任意PHP代碼,安全風險非常高。該漏洞(CVE-2012-0830)是由於PHP官方為解決多語言hash漏洞引入了新的機制產生的新的安全漏洞。

PHP官方強烈建議用戶儘快更新到PHP 5.3.10。

PHP 網絡開發詳解之遠程文件包含漏洞

以下代碼(Code)實現了根據瀏覽器地址欄參數的文件名稱包含不同文件的功能。

複製代碼

代碼如下:

?php

$file_name

=

$_GET[“filename”];

//獲得當前文件名

include(“$file_name

“);

//包含文件

//一些其他操作

?

這時,通過在地址欄上指定不同的文件名就可以實現包含不同文件並執行的功能。例如,通過在瀏覽器上訪問就可以在代碼(Code)中包含並執行myinc.php文件。

由於上面的代碼(Code)沒有進行任何錯誤處理,在瀏覽器上不加參數運行,所以將得到以下運行結果。

Warning:

include(.php)

[function.include]:

failed

to

open

stream:

No

such

file

or

directory

in

C:\Program

Files\xampp\htdocs\Bugs\test6.php

on

line

3

Warning:

include()

[function.include]:

Failed

opening

‘.php’

for

inclusion

(include_path=’.;C:\Program

Files\xampp\php\pear\’)

in

C:\Program

Files\xampp\htdocs\Bugs\test6.php

on

line

3

訪問者通過讀取這段錯誤信息,可以得知當前的操作是一個文件包含操作。這時,可以在自己的服務器上放置一個相應的腳本代碼。需要注意的是PHP在獲取遠程文件時獲得的是遠程服務器的最終輸出結果,而不是文件本身。該腳本代碼位於192.168.0.1服務器上,文件名為hello.txt,腳本代碼(Code)如下所示。

複製代碼

代碼如下:

?php

echo

“hello

world!”;

?

這時,通過在瀏覽器中訪問就可以運行hello.txt中的腳本了。

為了解決這個問題,一種方式是完善代碼的錯誤信息,使訪問者無法知道當前腳本正在包含參數中指定的文件。修改後的代碼(Code)如下所示。

複製代碼

代碼如下:

?php

$file_name

=

$_GET[“filename”];

//獲得當前文件名

if(!@include(“$file_name.php”))

//包含文件

{

die(“頁面在瀏覽過程中出現錯誤”);

}

//一些其他操作

?

修改後,如果在被包含的文件無法找到時將出現“頁面在瀏覽過程中出現錯誤”的錯誤信息,訪問者將無法獲得當前頁面的具體操作信息。

第二種方式可以更加有效地防止遠程文件包含攻擊。方式是替換地址欄參數中的斜線“/”。這樣,在地址欄參數中輸入遠程文件地址時,代碼將無法正確地獲得參數。修改後的代碼(Code)如下所示。

複製代碼

代碼如下:

?php

$file_name

=

str_replace(‘/’,

”,

$_GET[“filename”]);

//獲得當前文件名

if(!@include(“$file_name.php”))

//包含文件

{

die(“頁面在瀏覽過程中出現錯誤”);

}

//一些其他操作

?

這樣,在瀏覽器中訪問

時,實際上PHP代碼(Code)獲得的包含文件名稱是http:192.168.0.1bugstest6_test。頁面將不會包含遠程文件,並顯示相應的錯誤信息。

如何對php中常見漏洞進行攻擊與防護翻譯

[全局變量]

PHP中的變量不需要事先聲明,它們會在第一次使用時自動創建,它們的類型也不需要指定,它們會根據上下文環境自動確定。從程序員的角度來看,這無疑是一種極其方便的處理方法。很顯然,這也是快速開發語言的一個很有用的特點。一旦一個變量被創建了,就可以在程序中的任何地方使用。這個特點導致的結果就是程序員很少初始化變量,畢竟,當它們第一次創建時,他們是空的。

很顯然,基於PHP的應用程序的主函數一般都是接受用戶的輸入(主要是表單變量,上載文件和Cookie等),然後對輸入數據進行處理,然後把結果返回到客戶端瀏覽器。為了使PHP代碼訪問用戶的輸入儘可能容易,實際上PHP是把這些輸入數據看作全局變量來處理的。

例如:

FORM METHOD=”GET” ACTION=”test.php”

INPUT TYPE=”TEXT” NAME=”hello”

INPUT TYPE=”SUBMIT”

/FORM

很顯然,這會顯示一個文本框和提交按鈕。當用戶點擊提交按鈕時,“test.php”會處理用戶的輸入,當“test.php”運行時,“$hello”會包含用戶在文本框輸入的數據。從這裡我們應該看出,攻擊者可以按照自己的意願創建任意的全局變量。如果攻擊者不是通過表單輸入來調用“test.php”,而是直接在瀏覽器地址欄輸入;setup=no,那麼,不止是“$hello”被創建,“$setup”也被創建了。

譯者註:這兩種方法也就是我們通常說的“POST”和“GET”方法。

下面的用戶認證代碼暴露了PHP的全局變量所導致的安全問題:

?php

if ($pass == “hello”)

$auth = 1;

if ($auth == 1)

echo “some important information”;

?

上面的代碼首先檢查用戶的密碼是否為“hello”,如果匹配的話,設置“$auth”為“1”,即通過認證。之後如果“$suth”為“1”的話,就會顯示一些重要信息。

表面看起來是正確的,而且我們中有相當一部分人是這樣做的,但是這段代碼犯了想當然的錯誤,它假定“$auth”在沒有設置值的時候是空的,卻沒有想到攻擊者可以創建任何全局變量並賦值,通過類似“”的方法,我們完全可以欺騙這段代碼,使它相信我們是已經認證過的。

因此,為了提高PHP程序的安全性,我們不能相信任何沒有明確定義的變量。如果程序中的變量很多的話,這可是一項非常艱巨的任務。

一種常用的保護方式就是檢查數組HTTP_GET[]或POST_VARS[]中的變量,這依賴於我們的提交方式(GET或POST)。當PHP配置為打開“track_vars”選項的話(這是缺省值),用戶提交的變量就可以在全局變量和上面提到的數組中獲得。

但是值得說明的是,PHP有四個不同的數組變量用來處理用戶的輸入。HTTP_GET_VARS數組用來處理GET方式提交的變量,HTTP_POST_VARS數組用於處理POST方式提交的變量,HTTP_COOKIE_VARS數組用於處理作為cookie頭提交的變量,而對於HTTP_POST_FILES數組(比較新的PHP才提供),則完全是用戶用來提交變量的一種可選方式。用戶的一個請求可以很容易的把變量存在這四個數組中,因此一個安全的PHP程序應該檢查這四個數組。

[遠程文件]

PHP是一種具有豐富特性的語言,提供了大量的函數,使編程者實現某個功能很容易。但是從安全的角度來看,功能越多,要保證它的安全性就越難,遠程文件就是說明這個問題的一個很好的例子:

?php

if (!($fd = fopen(“$filename”, “r”))

echo(“Could not open file: $filenameBR\n”);

?

上面的腳本試圖打開文件“$filename”,如果失敗就顯示錯誤信息。很明顯,如果我們能夠指定“$filename”的話,就能利用這個腳本瀏覽系統中的任何文件。但是,這個腳本還存在一個不太明顯的特性,那就是它可以從任何其它WEB或FTP站點讀取文件。實際上,PHP的大多數文件處理函數對遠程文件的處理是透明的。

例如:

如果指定“$filename”為“”

則上面的代碼實際上是利用主機target上的unicode漏洞,執行了dir命令。

這使得支持遠程文件的include(),require(),include_once()和require_once()在上下文環境中變得更有趣。這些函數主要功能是包含指定文件的內容,並且把它們按照PHP代碼解釋,主要是用在庫文件上。

例如:

?php

include($libdir . “/languages.php”);

?

上例中“$libdir”一般是一個在執行代碼前已經設置好的路徑,如果攻擊者能夠使得“$libdir”沒有被設置的話,那麼他就可以改變這個路徑。但是攻擊者並不能做任何事情,因為他們只能在他們指定的路徑中訪問文件languages.php(perl中的“Poison null byte”攻擊對PHP沒有作用)。但是由於有了對遠程文件的支持,攻擊者就可以做任何事情。例如,攻擊者可以在某台服務器上放一個文件languages.php,包含如下內容:

?php

passthru(“/bin/ls /etc”);

?

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130465.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相關推薦

發表回復

登錄後才能評論