php使用exec shell命令注入的方法講解
更新時(shí)間:2013年11月12日 10:32:42 作者:
exec()是用于執(zhí)行shell命令的函數(shù),下面說的就是如何使用他用于shell注入的方法講解
使用系統(tǒng)命令是一項(xiàng)危險(xiǎn)的操作,尤其在你試圖使用遠(yuǎn)程數(shù)據(jù)來構(gòu)造要執(zhí)行的命令時(shí)更是如此。如果使用了被污染數(shù)據(jù),命令注入漏洞就產(chǎn)生了。
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)通過上例的方法在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命令的方法方便而有用,但這種方便為你帶來了重大的風(fēng)險(xiǎn)。如果使用了被污染數(shù)據(jù)構(gòu)造命令串的話,攻擊者就能執(zhí)行任意的命令。
我建議你有可能的話,要避免使用shell命令,如果實(shí)在要用的話,就要確保對(duì)構(gòu)造命令串的數(shù)據(jù)進(jìn)行過濾,同時(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í)只允許使用已過濾和轉(zhuǎn)義數(shù)據(jù)。其他需要注意的同類函數(shù)有passthru( ), popen( ), shell_exec( ),以及system( )。我再次重申,如果有可能的話,建議避免所有shell命令的使用。
exec()是用于執(zhí)行shell命令的函數(shù)。它返回執(zhí)行并返回命令輸出的最后一行,但你可以指定一個(gè)數(shù)組作為第二個(gè)參數(shù),這樣輸出的每一行都會(huì)作為一個(gè)元素存入數(shù)組。使用方式如下:
復(fù)制代碼 代碼如下:
<?php
$last = exec('ls', $output, $return);
print_r($output);
echo "Return [$return]";
?>
假設(shè)ls命令在shell中手工運(yùn)行時(shí)會(huì)產(chǎn)生如下輸出:
復(fù)制代碼 代碼如下:
$ 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)通過上例的方法在exec()中運(yùn)行時(shí),輸出結(jié)果如下:
復(fù)制代碼 代碼如下:
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命令的方法方便而有用,但這種方便為你帶來了重大的風(fēng)險(xiǎn)。如果使用了被污染數(shù)據(jù)構(gòu)造命令串的話,攻擊者就能執(zhí)行任意的命令。
我建議你有可能的話,要避免使用shell命令,如果實(shí)在要用的話,就要確保對(duì)構(gòu)造命令串的數(shù)據(jù)進(jìn)行過濾,同時(shí)必須要對(duì)輸出進(jìn)行轉(zhuǎn)義:
復(fù)制代碼 代碼如下:
<?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í)只允許使用已過濾和轉(zhuǎn)義數(shù)據(jù)。其他需要注意的同類函數(shù)有passthru( ), popen( ), shell_exec( ),以及system( )。我再次重申,如果有可能的話,建議避免所有shell命令的使用。
您可能感興趣的文章:
- 詳解php命令注入攻擊
- 淺析PHP反序列化中過濾函數(shù)使用不當(dāng)導(dǎo)致的對(duì)象注入問題
- PHP依賴注入容器知識(shí)點(diǎn)淺析
- PHP使用PDO實(shí)現(xiàn)mysql防注入功能詳解
- PHP防止sql注入小技巧之sql預(yù)處理原理與實(shí)現(xiàn)方法分析
- php+laravel依賴注入知識(shí)點(diǎn)總結(jié)
- php依賴注入知識(shí)點(diǎn)詳解
- php中的依賴注入實(shí)例詳解
- thinkphp5.1框架容器與依賴注入實(shí)例分析
- PHP進(jìn)階學(xué)習(xí)之依賴注入與Ioc容器詳解
- php反射學(xué)習(xí)之依賴注入示例
- CTF命令執(zhí)行及繞過技巧
相關(guān)文章
用PHP實(shí)現(xiàn)的四則運(yùn)算表達(dá)式計(jì)算實(shí)現(xiàn)代碼
題目要求:有一個(gè)四則運(yùn)算的字符串表達(dá)式,編寫一個(gè)函數(shù),計(jì)算四則運(yùn)算的結(jié)果2011-08-08
php調(diào)用Workerman管理定時(shí)任務(wù)詳解
Workerman?是一個(gè)高性能的?PHP?Socket?框架,常用于開發(fā)實(shí)時(shí)通信、長連接服務(wù)等場景,本文主要來和大家聊聊如何使用Workerman管理定時(shí)任務(wù),感興趣的小伙伴可以參考一下2025-04-04
php + nginx項(xiàng)目中的權(quán)限詳解
這篇文章主要給大家介紹了關(guān)于php + nginx項(xiàng)目中權(quán)限的相關(guān)資料,文章介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
php中echo、print和print_r的區(qū)別點(diǎn)及用法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于php中echo、print和print_r的區(qū)別點(diǎn)及用法總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2021-12-12
PHP排序算法之直接插入排序(Straight Insertion Sort)實(shí)例分析
這篇文章主要介紹了PHP排序算法之直接插入排序(Straight Insertion Sort),結(jié)合實(shí)例形式較為詳細(xì)的分析了直接插入排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
PHP中使用glob函數(shù)實(shí)現(xiàn)一句話刪除某個(gè)目錄下的所有文件
這篇文章主要介紹了PHP中使用glob函數(shù)實(shí)現(xiàn)一句話刪除某個(gè)目錄下的所有文件,重點(diǎn)在glob函數(shù)的使用上,需要的朋友可以參考下2014-07-07
PHP遠(yuǎn)程連接MYSQL數(shù)據(jù)庫非常慢的解決方法
如果一個(gè)問題出現(xiàn)兩次,那么這個(gè)問題就值得去研究下了,上次客戶說MYSQL數(shù)據(jù)庫很慢,我還在想,不會(huì)是PHP的問題吧?2008-07-07

