命令執行漏洞


命令執行漏洞原理

命令執行漏洞是指應用有時需要調用一些執行系統命令的函數,如:system()、exec()、shell_exec()、eval()、passthru()等函數,代碼未對用戶可控參數做過濾,當用戶能控制這些函數中的參數時,就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊。

 

命令執行漏洞應用例子:

日常的網絡訪問中,我們常常可以看到某些Web網站具有執行系統命令的功能,比如:有些網站提供ping功能,我們可以輸入一個IP地址,它就會幫我們去嘗試ping目標的IP地址,而我們則可以看到執行結果。
但是如果用戶沒有遵循網站的本意,而去輸入精心構造的指令,可能會對網站本身的功能邏輯產生逆轉,導致讓目標網站執行惡意命令。

惡意用戶通過將惡意系統命令拼接到正常命令中,讓網站執行惡意命令

image

 

命令執行漏洞產生條件

 

  • 用戶可控:可以控制輸入的內容
  • 后台執行:用戶輸入的內容被當作命令執行

 

 

命令執行常用函數

一:反撇號:` `

` `輸出並返回shell結果 相當於exec的效果

  1 payload:echo `whoami`

 

二:system()

system() 輸出並返回最后一行shell結果

  1 payload:system('whoami')

 

三:passthru()

只調用命令,把命令的運行結果原樣地直接輸出到標准輸出設備上。

  1 payload:passthru('whoami')

 

四:exec()

不能輸出結果,返回最后一行shell結果,所有結果可以保存到一個返回的數組里面

  1 payload:exec($_POST['system'],$output);print_r($output);

 

五:shell_exec()

通過shell環境命令執行,並且將完整的輸出以字符串的方式返回

  1 payload:shell_exec($_POST['system']);

 

六:其他函數

popen()、proc_open()、pcntl_exec()

 

注意事項:權限問題 => 權限和中間件運行有關 繼承web運行權限

命令注入漏洞的危害跟web中間件運行的權限有關。由於web應用運行在web中間件上,所以web應用會“繼承”web中間件的運行權限。如果存在命令注入漏洞的web應用運行在以系統管理員身份運行的web中間件上,那么通過web執行命令就相當於以管理員權限執行命令。

 

常用系統命令與功能:windows下同時執行多條命令語法格式

image

 

Windows下同時執行多條命令語法格式:

Comnand1 & Comnand2:

先后執行Comnand1和Comnand2,無論Comnand1執行是否成功
Comnand1 && Comnand2:

先后執行Comnand1和Comnand2,只有Comnand1執行成功時才執行Comnand2
Comnand1 || Comnand2:

先后執行Comnand1和Comnand1,只有Comnand1執行失敗時才執行Comnand1
Comnand1 | Comnand2:

|是管道符,將Comnand1的執行結果傳遞給Comnand2

 

 

常用系統命令與功能:Linux下同時執行多條命令語法格式

image

Linux下同時執行多條命令語法格式:

Comnand1 ; Comnand2:

先后執行Comnand1和Comnand2,無論Comnand1執行是否成功
Comnand1 && Comnand2:

先后執行Comnand1和Comnand2,只有Comnand1執行成功時才執行Comnand2
Comnand1 || Comnand2:

先后執行Comnand1和Comnand1,只有Comnand1執行失敗時才執行Comnand1
Comnand1 | Comnand2:

|是管道符,將Comnand1的執行結果傳遞給Comnand2

 

命令執行漏洞分類

1. web代碼層命令執行:代碼層過濾不嚴

商業應用的一些核心代碼封裝在二進制文件中,在Web應用中通過system函數來調用:
system("/bin/program --arg $arg");

 

2. 系統層面的漏洞造成命令注入

bash破殼漏洞(CVE-2014-6271)、MS08-67、永恆之藍

 

3. 調用的第三方組件存在代碼執行漏洞

WordPress中用來處理圖片的ImageMagick組件
JAVA中的命令注入漏洞(struts2/ElasticsearchGroovy等)
vBulletin 5.x版本通殺遠程代碼執行

ThinkPHP命令執行

 

命令執行漏洞防御方式

  1. 盡量少用執行命令的函數或者直接禁用 ,在PHP下禁用高危系統函數,找到php.ini,查找到disable_functions,添加禁用的函數名
  2. 參數值盡量使用引號包括,並在拼接前調用addslashes函數進行轉義
  3. 在使用動態函數之前,確保使用的函數是指定的函數之一
  4. 在進入執行命令的函數方法之前,對參數進行過濾,對敏感字符進行轉義
  5. 對於可控點是程序參數的情況下,使用escapeshellcmd函數進行過濾,對於可控點是程序參數值的情況下,使用escapeshellarg函數進行過濾

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM