1、漏洞概述php
命令注入是指在易受攻擊的應用程序中注入和執行攻擊者指定的命令,執行的命令具備與web 服務相同的權限和環境。web
產生緣由:windows
web服務器沒有對用戶提交的參數進行有效的檢測過濾服務器
操做系統容許一條語句在使用鏈接符和管道符後執行多條命令函數
windows下幾種的管道符或者鏈接符:工具
command1&command2 不管command1是否執行成功都要執行command2測試
command1&&command2 只有command1執行成功後才執行command2spa
command1||command2 只有command1執行失敗後才執行command2操作系統
command1|command2 將command1的執行結果傳遞給command2firefox
2、工具
firefox
3、測試過程
一、級別:low
首先輸入一個IP觀察一下
能夠看到在下方返回了對127.0.0.1進行Ping檢測的內容,所以猜想這裏有一個能夠執行系統命令的函數,則這裏可能存在命令注入漏洞,且執行的命令爲Ping 輸入的內容。
利用鏈接符&&進行測試,輸入127.0.0.1&&dir
能夠看見這裏不單單返回了127.0.0.1的Ping檢測信息,還返回了剛剛拼接dir命令的結果。而後咱們就能夠經過拼接其餘命令進行攻擊。
Low級別代碼分析
stristr(string,search,before_search)函數:搜索字符串在另外一字符串中的第一次出現。
php_uname(mode)函數:返回運行php的操做系統的相關描述,參數mode可取值
a:此爲默認,包含序列」s n r v m」裏的全部模式
s:返回操做系統名稱 n:返回主機名 r:返回版本名稱
v:返回版本信息 m:返回機器類型
這段代碼是判斷該操做系統爲哪一種操做系統並按操做系統的不一樣執行其對應的Ping命令。
二、級別MEDIUM
一樣先試一下輸入127.0.0.1&&dir,發現失敗了。
試一下利用&進行鏈接,咱們輸入127.0.0.1進行測試,發現下方成功顯示出了命令結果,表示注入成功。
Medium級別代碼分析
能夠發現比low級別多了一段代碼,這段代碼的做用就是對輸入的字符進行判斷若出現‘&&’或‘;’字符則用‘’代替。這是明顯的黑名單作法,仍是不能有效的阻擋命令注入。
三、級別High
依次使用不一樣的鏈接符或管道符進行測試,發現只有 ‘|’ 才能成功。
High級別代碼分析
發現同樣採用的是黑名單方法,只是擴大了限制的字符,仍是有效的阻擋命令注入。
四、級別Impossible
發現各類連接符都沒法成功
Impossible級別代碼分析
發現採用了白名單的作法,只有輸入的格式跟白名單的同樣才能經過驗證,其餘的都不行,這樣基本上杜絕了命令注入。