1. 命令執行漏洞簡介
阿新 • • 發佈:2018-05-24
llc ima 命令註入 elastics 分享圖片 HR 服務 服務器 127.0.0.1
3. system("/bin/prog -p $arg"); //和2一樣
4. system("/bin/prog --p=\"$arg\""); //可以輸入";ls;"
5. system("/bin/prog --p=‘$arg‘"); //可以輸入‘;ls;‘
在Linux上,上面的 ; 也可以用 | 、|| 代替
; 前面的執行完執行後面的
| 是管道符,顯示後面的執行結果
|| 當前面的執行出錯時執行後面的
在Windows上,不能用 ; 可以用 &、&&、|、|| 代替
A&B 前面的語句為假則直接執行後面的
A&&B A執行成功,然後才會執行B
A|B A的輸出,作為B的輸入
A||B A執行失敗,然後才會執行B
命令執行
應用有時需要調用一些執行系統命令的函數, 如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等, 當用戶能控制這些函數中的參數時,就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞。利用條件
- 應用調用執行系統命令的函數
- 將用戶輸入作為系統命令的參數拼接到了命令行中
- 沒有對用戶輸入進行過濾或過濾不嚴
漏洞分類
- 代碼層過濾不嚴
商業應用的一些核心代碼封裝在二進制文件中,在web應用中通過system函數來調用:
system("/bin/program --arg $arg"); - 系統的漏洞造成命令註入
bash破殼漏洞(CVE-2014-6271) - 調用的第三方組件存在代碼執行漏洞
如WordPress中用來處理圖片的ImageMagick組件
JAVA中的命令執行漏洞(struts2/ElasticsearchGroovy等)
ThinkPHP命令執行
漏洞危害
- 繼承Web服務程序的權限去執行系統命令或讀寫文件
- 反彈shell
- 控制整個網站甚至控制服務器
- 進一步內網滲透
- 等等
漏洞可能代碼(以system為例)
1. system("$arg"); //直接輸入即可 2. system("/bin/prog $arg"); //直接輸入;ls漏洞利用
示例一
<?php $arg = $_GET[‘cmd‘]; if ($arg) { system("$arg"); } ?> 示例二 <?php $arg = $_GET[‘cmd‘]; if ($arg) { system("ping -n 3 $arg"); } ?>其他
- 代碼執行:
在cmd.php中的代碼如下:
- 動態函數調用
在cmd.php中的代碼如下:
漏洞修復
- 盡量少用執行命令的函數或者直接禁用
- 參數值盡量使用引號包括
- 在使用動態函數之前,確保使用的函數是指定的函數之一
- 在進入執行命令的函數/方法之前,對參數進行過濾,對敏感字符進行轉義
1. 命令執行漏洞簡介