php 執行系統命令函式

2021-10-07 13:20:16 字數 3688 閱讀 8948

目錄

命令注入

system()函式

passthru()函式

exec()

shell_exec()函式

反引號 ` 

popen()函式

pcntl_exec()函式

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

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

system()

passthru()

exec()

shell_exec()

popen()

proc_open()

pcntl_exec()

string system ( string $command [, int &$return_var ] )
$command為執行的命令,&return_var可選,用來存放命令執行後的狀態碼

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

<?php 

system("whoami");

?>

void passthru ( string $command [, int &$return_var ] )
和system函式類似,$command為執行的命令,&return_var可選,用來存放命令執行後的狀態碼

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

<?php 

passthru("whoami");

?>

string exec ( string $command [, array &$output [, int &$return_var ]] )
$command是要執行的命令

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

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

<?php 

echo exec("whoami");

$test = "ipconfig";

exec($test,$array);

print_r($array);

?>

string shell_exec( string &command)
&command是要執行的命令

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

<?php 

echo shell_exec("whoami");

?>

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

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

<?php 

echo `whoami`;

?>

resource popen ( string $command , string $mode )
函式需要兩個引數,乙個是執行的命令command,另外乙個是指標檔案的連線模式mode,有rw代表讀和寫。

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

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

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

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

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

<?php

$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函式類似,但是可以提供雙向管道

<?php 

$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);

?>

void pcntl_exec ( string $path [, array $args [, array $envs ]] )
path是可執行二進位制檔案路徑或乙個在檔案第一行指定了 乙個可執行檔案路徑標頭的指令碼

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

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

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

<?php 

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

?>

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

PHP執行系統命令函式

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

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

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

PHP命令執行函式

window dos命令 批處理命令 linux shell基本命令 php函式執行這些命令事例!環境win7 system exec passthru shell exec windows命令 ipconfig 1.system函式 執行window命令,得到結果一樣。echo system ip...