php指令碼函式,PHP執行系統命令函式例項講解

2021-10-25 21:49:09 字數 2586 閱讀 9785

命令注入

命令注入(command injection),對一些函式的引數沒有做過濾或過濾不嚴導致的,可以執行系統或者應用指令(cmd命令或者 bash 命令)的一種注入攻擊手段。

常見的執行系統命令的函式有

system()

passthru()

exec()

shell_exec()

popen()

proc_open()

pcntl_exec()

system()函式

string system ( string $command [, int &$return_var ] )

$command為執行的命令,&return_var可選,用來存放命令執行後的狀態碼

system()函式執行有回顯,將執行結果輸出到頁面上

passthru()函式

void passthru ( string $command [, int &$return_var ] )

和system函式類似,$command為執行的命令,&return_var可選,用來存放命令執行後的狀態碼

執行有回顯,將執行結果輸出到頁面上

exec()函式

string exec ( string $command [, array &$output [, int &$return_var ]] )

$command是要執行的命令

$output是獲得執行命令輸出的每一行字串,$return_var用來儲存命令執行的狀態碼(檢測成功或失敗)

exec()函式執行無回顯,預設返回最後一行結果

$test = "ipconfig";

exec($test,$array);

print_r($array);

shell_exec()函式

string shell_exec( string &command)

&command是要執行的命令

shell_exec()函式預設無回顯,通過 echo 可將執行結果輸出到頁面

反引號 `

shell_exec() 函式實際上僅是反撇號 (`) 操作符的變體,當禁用shell_exec時,` 也不可執行

在php中稱之為執行運算子,php 將嘗試將反引號中的內容作為 shell 命令來執行,並將其輸出資訊返回

popen()函式

resource popen ( string $command , string $mode )

函式需要兩個引數,乙個是執行的命令command,另外乙個是指標檔案的連線模式mode,有r和w代表讀和寫。

函式不會直接返回執行結果,而是返回乙個檔案指標,但是命令已經執行。

popen()開啟乙個指向程序的管道,該程序由派生給定的command命令執行而產生。

返回乙個和fopen()所返回的相同的檔案指標,只不過它是單向的(只能用於讀或寫)並且必須用pclose()來關閉。

此指標可以用於fgets(),fgetss()和 fwrite()

<?php popen( 'whoami >> c:/1.txt', 'r' ); ?>

$test = "ls /tmp/test";

$fp = popen($test,"r");

//popen打乙個程序通道

while (!feof($fp)) pclose($fp);?>

proc_open()函式

resource proc_open (string $cmd ,array $descriptorspec ,array &$pipes [, string $cwd [, array $env [, array $other_options ]]])

與popen函式類似,但是可以提供雙向管道

$test = "ipconfig";

$array =   array(array("pipe","r"),   //標準輸入

array("pipe","w"),   //標準輸出內容

array("pipe","w")    //標準輸出錯誤

$fp = proc_open($test,$array,$pipes);   //開啟乙個程序通道

echo stream_get_contents($pipes[1]);    //為什麼是$pipes[1],因為1是輸出內容  proc_close($fp);

pcntl_exec()函式

void pcntl_exec ( string $path [, array $args [, array $envs ]] )

path是可執行二進位制檔案路徑或乙個在檔案第一行指定了 乙個可執行檔案路徑標頭的指令碼

args是乙個要傳遞給程式的引數的字串陣列。

pcntl是linux下的乙個擴充套件,需要額外安裝,可以支援 php 的多執行緒操作。

pcntl_exec函式的作用是在當前程序空間執行指定程式,版本要求:php > 4.2.0

pcntl_exec( "/bin/bash" , array("whoami"));

對這些危險函式,可以在php.ini中禁用,進行安全加固

php 執行系統命令函式

目錄 命令注入 system 函式 passthru 函式 exec shell exec 函式 反引號 popen 函式 pcntl exec 函式 命令注入 command injection 對一些函式的引數沒有做過濾或過濾不嚴導致的,可以執行系統或者應用指令 cmd命令或者bash命令 的一...

PHP執行系統命令函式

命令注入 command injection 對一些函式的引數沒有做過濾或過濾不嚴導致的,可以執行系統或者應用指令 cmd命令或者bash命令 的一種注入攻擊手段。常見的執行系統命令的函式有 system passthru exec shell exec popen proc open pcntl ...

php執行shell指令碼

原文 php作為一門伺服器端指令碼語言,也是可以呼叫系統命令的,這其中就包括了執行shell指令碼 編寫test.sh指令碼如下 bin sh mkdir www a 很簡單的乙個shell指令碼 建立乙個資料夾 php指令碼如下 system usr bin test.sh 在執行前 首先需要驗證...