PHP命令執行漏洞初探
Mirror王宇陽 byphp
PHP 命令執行
PHP提供以下函數用於執行外部應用程序;例如:system()、shell_exec()、exec()、passthru()
linux
system()
<?php $host = $argv[1]; system("ping ".$host); ?>
在服務端運行php.exe index.php 192.168.2.1
git
執行php.exe index.php "|net user"
(這裏的「|」符號的做用時屏蔽源代碼的ping字符)github
passthru() — 執行外部程序而且顯示原始輸出 proc_open() — 執行一個命令,而且打開用來輸入/輸出的文件指針。 shell_exec() — 經過 shell 環境執行命令,而且將完整的輸出以字符串的方式返回。 popen() — 經過 popen() 的參數傳遞一條命令,並對 popen() 所打開的文件進行執行正則表達式
eval()
PHP中的eval()
函數能夠把參數字符串按照PHP代碼來動態執行,輸入的字符串必須是合法的PHP代碼字段並以分號結尾shell
<?php eval($_REQUEST['code']); // $_REQUEST:支持GET和POST兩種請求的數據 ?>
在URL中插入?code=phpinfo();
利用GET方法向服務器請求,服務端的index.php處理代碼中的eval()
函數會將請求的字符串作爲PHP代碼執行數組
動態調用
<?php function T1() { echo "<script>alert('Hello,World!');</script>"; return 0 ; } function T2() { echo "<script>alert('Error');</script>"; return 0 ; } $fun = $_REQUEST['fun']; echo $fun(); // 當fun的value爲:phpinfo時,在php的echo中構成 phpinfo() ?>
固然了,並不會僅僅只執行一個phpinfo()、T1()……服務器
<?php $fun = $_GET['fun']; $par = $_GET['par']; $fun($par); ?>
PHP的其它危險函數
array_map()
<?php $arr = $_GET['arr']; $array = array(1,2,3,4,5); $new_array = array_map($arr, $array); ?>
array_map()
返回用戶自定義函數處理後的數組函數
assert()
bool assert(mixed $assertion [,string $description])
檢查一個斷言是否爲False;把字符串$description
做爲PHP代碼進行執行spa
preg_replace()
執行一個正則表達式的搜索和替換
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
pattern
要搜索的正則匹配模式
replacement
用於替換的字符串或數組
subject
要進行搜索和替換的字符串或數組
include
include $file
在變量$file
可控的狀況下,咱們就能夠包含任意文件,從而達到getshell的目的;
因爲不一樣的配置環境和不一樣的包含文件分爲:遠程文件包含和本地文件包含
文件操做函數
copy:拷貝文件
file_get_contents:將整個文件讀入爲一個字符串
file_put_contents:將一個字符串寫入文件
file:把整個文件讀入一個數組中
fopen:打開文件或者 URL
move_uploaded_file:將上傳的文件移動到新位置
readfile:輸出文件
rename:重命名一個文件或目錄
rmdir:刪除目錄
unlink & delete:刪除文件
特殊函數
phpinfo():這個文件裏面包含了PHP的編譯選項,啓動的擴展、版本、服務器配置信息、環境變量、操做系統信息、path變量等很是重要的敏感配置信息
使用軟鏈接讀取文件內容
symlink():通常是在linux服務器上使用的,爲一個目標創建一個鏈接,在讀取這個連接所鏈接的文件的內容,並返回內容
環境變量
getenv:獲取一個環境變量的值
putenv($a) :添加$a到服務器環境變量,但環境變量僅存活於當前請求期間。 在請求結束時環境會恢復到初始狀態。
推薦文章: PHP代碼審計——常見危險及特殊函數