目錄
命令注入
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
,有r
和w
代表讀和寫。
函式不會直接返回執行結果,而是返回乙個檔案指標,但是命令已經執行。
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是乙個要傳遞給程式的引數的字串陣列。
pcntl
是linux
下的乙個擴充套件,需要額外安裝,可以支援 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...