什麼是操作系統命令注入?

什麼是操作系統命令注入?

注入攻擊是黑客攻擊系統最常見的方式之一,因為它允許他們輕鬆運行許多命令和代碼。操作系統命令注入是您需要注意的一種此類註入攻擊。這利用了系統、數據庫和 Web 應用程序管理員應該非常重視的漏洞。

那麼什麼是操作系統命令注入攻擊呢?

操作系統命令注入的定義

操作系統命令注入允許惡意攻擊者通過利用易受攻擊的操作系統、程序、應用程序、數據庫或插件來運行他們想要的任何命令。當應用程序在調用system()exec()等 shell 函數以執行系統命令時無法正確驗證和清理它們使用的參數時,就會發生這種情況。

為了更好地理解操作系統命令注入的檢測和利用,從三個主要類別來檢查這個問題是很有用的。

1.直接命令注入

從攻擊者的角度考慮這一點。網絡攻擊者發現應用程序正在運行特定的系統命令;他們輸入惡意命令作為預期參數的一部分。然後應用程序執行原始命令,然後執行惡意命令。

攻擊者採用多種方法來查找此類漏洞。解決這個問題的最簡單方法是始終使操作系統保持最新狀態;您可以與稱職的 IT 團隊合作來完成這項工作。您應該避免所有可能導致系統漏洞的應用程序和程序,因為攻擊者可能會直接插入代碼,並且損害是不可預測的。

2.間接命令注入

代碼編程電腦

在間接命令注入的情況下,攻擊者不會直接向系統輸入代碼或命令。為此,他們在系統中使用易受攻擊的應用程序或程序。該漏洞在攻擊者和操作系統之間架起了一座橋樑。利用這種通信,攻擊者旨在在目標上運行惡意代碼和命令。

攻擊者執行一系列測試來識別此漏洞,並發現該軟件使用來自外部源(例如文件或環境變量)的數據來調用系統命令。然後攻擊者修改外部源的內容,因此它現在包含惡意命令。然後與原始應用程序的指令一起執行。

直接命令注入和間接命令注入的主要區別在於,攻擊者使用應用程序與操作系統進行通信。但是這兩種注射方式所能造成的損害並沒有真正的區別,所以兩者都需要解決。這就是為什麼您應該確保網絡中的程序可靠且必要的原因。不要在您的設備上保留您不信任的應用程序。

3. 盲命令注入

另一種操作系統命令注入是盲命令注入。這意味著應用程序不會從 HTTP 響應中的命令返回任何輸出。攻擊者使用時間延遲和輸出路由等不同技術來利用此漏洞。

假設您正在搜索一個網站,URL 中的“/?search=id”值會隨著每次搜索而變化。此處的 id 值可以是用戶頁面、產品照片的地址或網站上的任何頁面。攻擊者可以通過改變id值得到不同的結果。很難手動完成,但是有像 Burp Suite 這樣的工具可以做到這一點。後來,攻擊者在頁面上發現了一個奇怪的現象:可能會返回一個id值,雖然沒有顯示任何結果,但網站的響應是200,這表明一切正常。在這種情況下,攻擊者可以使用盲命令注入。

時間延遲等技術特別有用。由於打開的頁面將是空白的,您不會收到任何響應,但您仍然可以根據僅在出現特定字符時才加載頁面的時間延遲來收集有關數據庫中存儲內容的信息。這對於手動過程來說太耗時了,但是有很多工具可以使攻擊自動化。

示例攻擊場景

代碼編程攻擊示例

讓我們通過一個例子來回顧以上所有內容。假設您有一個購物應用程序,可以讓用戶查看產品是否有貨。讓我們使用如下所示的 URL 來訪問所有這些信息:

example_unsafe_store.com/stockStatus?productID=245&storeID=

想像一下將產品和商店 ID 作為參數傳遞給 shell 命令,例如“stockstat.pl 245 38”,因為應用程序必須查詢舊記錄。如果開發人員不對命令注入採取任何措施,則攻擊者可以發送輸入來執行所需的命令:

& echo this_a_harmful_command &

如果此條目進入 productID 參數,則應用程序執行的命令將是:

stockstat.pl & echo this_a_harmful_command & 38

echo 命令是檢測命令注入以及確保給定字符串出現在輸出中的有用方法。“&”字符是shell命令的分隔符,所以執行的是三個獨立的命令,一條接一條。結果,返回給用戶的輸出將是:

Error -productID not found
this_a_harmful_command
38: command not found

在這裡,“stockstat.pl”文件執行了沒有預期參數的命令,因此返回了一條錯誤消息。然後,攻擊者註入的 echo 命令運行,攻擊者在屏幕上看到了他輸入的表達式。原始參數“38”作為導致錯誤的命令運行。

如何防止操作系統命令注入

儘管命令注入是一種強大且有害的攻擊媒介,但還是有一些技巧可以避免它。操作系統命令注入攻擊背後的基本原理是使用應用程序執行某些操作系統命令。你需要阻止這種情況發生。有一些問題需要考慮:

  1. 您必須阻止有權訪問該應用程序的任何人運行代碼。
  2. 您應該阻止任何有權訪問該應用程序的人使用語法表達式向服務器發出請求。
  3. 您必須加密任何有權訪問的人提出的請求的短語。

讓我們逐一過一遍。解決第一個問題的一個好的方法是使用白名單的方法來防止任何到達應用層的人運行某些代碼或請求。您未識別的任何人都將無法運行代碼。

第二個的解決方案是不接受命令中使用的某些文本表達式。用戶只能輸入數值。將此與白名單方法一起應用,您將擁有一個更加安全的系統。

第三項是對輸入的字符、空格等句法參數的加密。因此,白名單方法、輸入的語法檢查和輸入的加密應該保護您免受操作系統命令注入。

注入攻擊每天都在發展

注入方式有很多種,攻擊技術各不相同,如OS命令、SQL、SSI、XPath等。試圖阻止它們中的每一個並不容易。請記住,所有這些攻擊每天都在發展,並利用開發人員忽視的小漏洞。這就是為什麼始終了解最新信息並密切關注網絡安全領域的當前發展至關重要的原因。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *