php使用exec shell命令注入的方法講解
exec()是用于執(zhí)行shell命令的函數(shù)。它返回執(zhí)行并返回命令輸出的最后一行,但你可以指定一個(gè)數(shù)組作為第二個(gè)參數(shù),這樣輸出的每一行都會(huì)作為一個(gè)元素存入數(shù)組。使用方式如下:
<?php
$last = exec('ls', $output, $return);
print_r($output);
echo "Return [$return]";
?>
假設(shè)ls命令在shell中手工運(yùn)行時(shí)會(huì)產(chǎn)生如下輸出:
$ ls
total 0
-rw-rw-r-- 1 chris chris 0 May 21 12:34 php-security
-rw-rw-r-- 1 chris chris 0 May 21 12:34 chris-shiflett
當(dāng)通過(guò)上例的方法在exec()中運(yùn)行時(shí),輸出結(jié)果如下:
Array
(
[0] => total 0
[1] => -rw-rw-r-- 1 chris chris 0 May 21 12:34 php-security
[2] => -rw-rw-r-- 1 chris chris 0 May 21 12:34 chris-shiflett
)
Return [0]
這種運(yùn)行shell命令的方法方便而有用,但這種方便為你帶來(lái)了重大的風(fēng)險(xiǎn)。如果使用了被污染數(shù)據(jù)構(gòu)造命令串的話(huà),攻擊者就能執(zhí)行任意的命令。
我建議你有可能的話(huà),要避免使用shell命令,如果實(shí)在要用的話(huà),就要確保對(duì)構(gòu)造命令串的數(shù)據(jù)進(jìn)行過(guò)濾,同時(shí)必須要對(duì)輸出進(jìn)行轉(zhuǎn)義:
<?php
$clean = array();
$shell = array();
/* Filter Input ($command, $argument) */
$shell['command'] = escapeshellcmd($clean['command']);
$shell['argument'] = escapeshellarg($clean['argument']);
$last = exec("{$shell['command']} {$shell['argument']}", $output, $return);
?>
盡管有多種方法可以執(zhí)行shell命令,但必須要堅(jiān)持一點(diǎn),在構(gòu)造被運(yùn)行的字符串時(shí)只允許使用已過(guò)濾和轉(zhuǎn)義數(shù)據(jù)。其他需要注意的同類(lèi)函數(shù)有passthru( ), popen( ), shell_exec( ),以及system( )。我再次重申,如果有可能的話(huà),建議避免所有shell命令的使用。
- 詳解php命令注入攻擊
- 淺析PHP反序列化中過(guò)濾函數(shù)使用不當(dāng)導(dǎo)致的對(duì)象注入問(wèn)題
- PHP依賴(lài)注入容器知識(shí)點(diǎn)淺析
- PHP使用PDO實(shí)現(xiàn)mysql防注入功能詳解
- PHP防止sql注入小技巧之sql預(yù)處理原理與實(shí)現(xiàn)方法分析
- php+laravel依賴(lài)注入知識(shí)點(diǎn)總結(jié)
- php依賴(lài)注入知識(shí)點(diǎn)詳解
- php中的依賴(lài)注入實(shí)例詳解
- thinkphp5.1框架容器與依賴(lài)注入實(shí)例分析
- PHP進(jìn)階學(xué)習(xí)之依賴(lài)注入與Ioc容器詳解
- php反射學(xué)習(xí)之依賴(lài)注入示例
- CTF命令執(zhí)行及繞過(guò)技巧
相關(guān)文章
php 多繼承的幾種常見(jiàn)實(shí)現(xiàn)方法示例
這篇文章主要介紹了php 多繼承的幾種常見(jiàn)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了兩種PHP實(shí)現(xiàn)多繼承的操作方法,需要的朋友可以參考下2019-11-11php7.3報(bào)preg_match()?JIT?compilation?failed?no?more?mem
PHP?JIT編譯失敗,內(nèi)存不足的解決方法!你是否遇到過(guò)這個(gè)問(wèn)題?不用擔(dān)心,我們將為你提供簡(jiǎn)單易懂的解決方案,讓你擺脫這一困擾,立即閱讀我們的指南,輕松解決PHP?JIT編譯失敗的煩惱!2023-12-12PHP中調(diào)試函數(shù)debug_backtrace的使用示例代碼
debug_backtrace() 是一個(gè)很低調(diào)的函數(shù),很少有人注意過(guò)它,這篇文章主要給大家介紹了關(guān)于PHP中調(diào)試函數(shù)debug_backtrace的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09解析PHP中常見(jiàn)的mongodb查詢(xún)操作
本篇文章是對(duì)PHP中常見(jiàn)的mongodb查詢(xún)操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php中字符查找函數(shù)strpos、strrchr與strpbrk用法
這篇文章主要介紹了php中字符查找函數(shù)strpos、strrchr與strpbrk用法,以實(shí)例形式較為詳細(xì)的分析了php中字符查找函數(shù)strpos、strrchr與strpbrk的具體用法及相關(guān)注意事項(xiàng),非常實(shí)用,需要的朋友可以參考下2014-11-11php短網(wǎng)址和數(shù)字之間相互轉(zhuǎn)換的方法
這篇文章主要介紹了php短網(wǎng)址和數(shù)字之間相互轉(zhuǎn)換的方法,涉及php操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹(shù)操作示例
這篇文章主要介紹了PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹(shù)操作,結(jié)合實(shí)例形式分析了php采用非遞歸算法對(duì)二叉樹(shù)進(jìn)行先序、中序及后序遍歷操作的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01PHP自定義函數(shù)實(shí)現(xiàn)數(shù)組比較功能示例
這篇文章主要介紹了PHP自定義函數(shù)實(shí)現(xiàn)數(shù)組比較功能,涉及php針對(duì)數(shù)組的遍歷、比較、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10