命令執行漏洞是指攻擊者能夠隨意執行系統命令。php
腳本語言有點事簡潔,方便,但也伴隨一些問題,好比運行速度慢,沒法接觸系統底層,若是咱們開發的應用(特別是企業級的一些應用)須要除去web的特殊功能時,就須要調用一些外部程序。在應用須要去調用外部程序去處理的狀況下,就會用到一些執行系統命令的函數。如php中的system,exec,shell_exec等,當用戶能夠控制命令執行的函數時,能夠惡意注入系統命令到正常命令中,形成命令執行web
exec(): 執行一個外部程序,該函數可執行系統命令,命令執行結果的最後一行內容。shell
passthru() :執行外部程序而且顯示原始輸出安全
system(): 執行外部程序,而且顯示輸出,成功則返回命令輸出的最後一行,失敗則返回FALSE框架
shell_exec(): 經過shell環境執行命令,而且將完整的輸出以字符串的方式返回命令執行的輸出,若是執行過程當中發生錯誤或者進程不產生輸出,則返回NULL.less
structs2框架,Java的三大框架之一。函數
1) >重定向輸出符號。測試
2) >>重定向輸出符號,但有追加的功能。spa
3) 2>錯誤重定向輸出符號,覆蓋原文件內容。操作系統
4) 2>>錯誤重定向輸出符號,有文件內容追加的功能。重定向:I/O。Linux Shell 環境中支持輸入輸出重定向,用符號<和>來表示。0、1和2分別表示標準輸入、標準輸出和標準錯誤信息輸出,能夠用來指定須要重定向的標準輸入或輸出,好比 2>a.txt 表示將錯誤信息輸出到文件a.txt中。
5) *匹配任意字符。
6) ?匹配任意一個字符。
7) |管道符號。解釋:command1|command2,將command1的輸出做爲command2的輸入,好比ls -al|less,表示將ls -al的輸出做爲less的輸入,即將la -al的輸出分頁。管道命令只接受標準輸入(standoutput)。
8) &後臺運行符。
9) && 邏輯與符號。用法:命令1 && 命令2 表示若是命令1執行成功,繼續執行命令2。
10) ||邏輯或符號。用法:命令1 | | 命令2 表示若是命令1執行成功,不執行命令2;但若是命令1執行失敗才執行命令2。
實驗環境DVWA, Linux操做系統
安全級別LOW
接下來咱們試試能不能直接執行其它
既然不能直接執行,那咱們換個方式試試吧
在這裏咱們用了管道符,就能夠輸出咱們想要的東西了
這就是一個簡單的命令執行漏洞的利用了。