PHP命令執行漏洞初探
Mirror王宇陽 by
PHP 命令執行
PHP提供如下函式用于執行外部應用程式;例如:system()、shell_exec()、exec()、passthru()
system()
<?php
$host = $argv[1];
system("ping ".$host);
?>
在服務端運行php.exe index.php 192.168.2.1

執行php.exe index.php "|net user"(這里的“|”符號的作用時屏蔽源代碼的ping字符)

passthru() — 執行外部程式并且顯示原始輸出
proc_open() — 執行一個命令,并且打開用來輸入/輸出的檔案指標,
shell_exec() — 通過 shell 環境執行命令,并且將完整的輸出以字串的方式回傳,
popen() — 通過 popen() 的引數傳遞一條命令,并對 popen() 所打開的檔案進行執行
eval()
PHP中的eval()函式可以把引數字串按照PHP代碼來動態執行,輸入的字串必須是合法的PHP代碼欄位并以分號結尾
<?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代碼進行執行
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代碼審計——常見危險及特殊函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57039.html
標籤:其他
