1. 程式人生 > >Command Injection(命令列注入)

Command Injection(命令列注入)

命令注入漏洞是特別危險的,因為它們允許未經授權的執行作業系統命令,它們的存在,因為應用程式無法正確地驗證和消毒,使用時呼叫shell的功能,如的引數。攻擊者與控制這些引數可以欺騙應用程式執行任何系統命令自己的選擇。為了正確測試命令注入漏洞,應遵循以下步驟:§1步:瞭解攻擊場景§2步:分析原因及對策§3步:開始試驗和探索§4步:微調測試案例1步:瞭解攻擊場景命令注入漏洞測試的第一步是要了解他們的攻擊的情況下,有兩種常見的型別,命令注入漏洞:§直接命令注入。§間接命令注入。方案1直接命令注入最基本的形式包括直接提供的額外的易受攻擊的應用程式的命令。命令注入攻擊者首先發現應用程式呼叫系統命令作為引數的命令,直接將使用者提供的資料,

那麼攻擊者提供的惡意命令的預期引數。應用程式執行原來的命令,然後惡意。詳細步驟如下:
1. 
攻擊者發現,該應用程式使用客戶端輸入來執行命令。
2. 
攻擊者提供的惡意客戶端輸入命令的一部分。
3. 
攻擊者觀察應用程式執行其他命令。方案2間接命令注入這種情況下,命令注入,直接地或間接地提供額外的易受攻擊的應用程式可以通過檔案或環境變數的命令。首先,攻擊者減去的應用程式呼叫系統命令,從外部資料來源,如檔案或環境變數然後,攻擊者修改的內容的外部源中加入惡意的命令。然後,攻擊者等待或強制執行惡意命令,與原來的應用程式。詳細步驟如下:
1. 
攻擊者發現,該應用程式使用的資料儲存在外部執行命令。
2. 
攻擊者編輯外部來源包括惡意命令。

3. 
攻擊者等待,直到應用程式執行原來的命令(或攻擊者試圖使該應用程式的狀態將在其中提供的命令執行)。
4. 
攻擊者驗證的應用程式的執行注入的命令。2步:分析原因及對策在此步驟中,你就會明白命令注入漏洞以及共同防禦的原因。這將幫助您尋找程式碼中的錯誤,並認識到安全的編碼實踐。命令注入的原因命令注入漏洞是一個單一的原因:可憐的輸入驗證。建立任何應用程式,命令字串中使用未消毒的資料容易受到此錯誤。下面的程式碼片段演示了命令注入漏洞。

下面的例子在C + +(由OWASP [I])執行在一個符合POSIX標準的類Unix環境,如使用提供的命令列輸入到系統並執行的cat命令:

命令注入對策應用程式防禦命令注入漏洞,通過做正確的輸入驗證和消毒。

開發人員必須看所有情況下,應用程式呼叫一個殼狀系統功能,如執行或系統,避免執行,除非引數被正確地驗證和消毒。有兩種可能的方法來驗證這些引數:使用黑色列表或使用白名單。黑名單檢查,然後才允許執行惡意模式。命令注入的情況下,一個黑色的命令列表可能包含分隔符,如分號(;)垂直劃線(|),雙破折號(| |),雙放大器(&&)危險的命令,如RMCP,貓,LS,在淨引數,netstatDEL,複製等,但是,一個主要的缺點阻礙了這種對策是有效的,除非黑名單絕對是所有涉及危險的可能性,攻擊者可以找到以外的黑名單的變化,來進行攻擊。白名單與安全執行模式匹配,如果有問題的資料不匹配任何安全模式,這是不允許的。這危險的構造,因為任何新的(惡意)結構的新變化,不符合安全的解決了這個問題一種是系統自動封鎖。一個共同的方式來實現白名單是相匹配的輸入與安全的命令格式的正則表示式表示。然而,複雜的正則表示式可以寫和解釋。開發人員必須確保他們瞭解如何編寫和解釋正則表示式之前實施這一防禦。3步:開始試驗和探索在此步驟中,您將開始測試您的應用程式的基本命令注入字串,並觀察應用程式如何反應。

4步:微調測試案例資料徹底地測試您的應用程式對命令注入漏洞,你必須覆蓋所有可能的入口點和命令注入是可能的情況下的。嘗試不同的切入點和場景繼續探索不同的應用程式的入口點。測試的情況下,資料的格式會有所不同的入口點。

§重要的是,你考慮不同的編碼方式和資料格式額外的命令注入的入口點,如:輸入欄位,URL引數,POST資料,Web服務方法,使用者介面元素,環境變數,資料庫的內容,登錄檔內容,檔案的內容,第三黨的API,和網路資料包。§當間接命令注入進行測試時,重要的是你控制的源傳遞到目標函式的引數。例如,如果你被攻擊一個使用應用程式,你必須控制傳遞給這個函式的檔案。讓我們說的應用程式使用而execfile /私營/ commands.txt的,在這裡你不需要通過任何惡意的引數,你必須修改命令檔案注入惡意指令,並等待(或強迫)注入要執行的命令。這是建議,進行測試時,直接噴射,您使用的環境監測工具。

§結論§命令注入漏洞存在,因為窮人的輸入驗證和消毒互動的功能與作業系統的shell所使用的引數。任何攻擊者控制這些引數可以強制應用程式執行不必要的系統命令。命令注入漏洞進行對比測試,包括操縱原來的命令引數,命令注入的字串,取決於要執行的操作的入口點下測試不同的組合。