程式碼安全測試第五期:OS命令注入漏洞

zktq2021發表於2021-05-24

1、什麼是OS命令注入?

軟體在構造OS命令時使用了外部輸入的資料,如果沒有對外部輸入中可能影響OS命令的特殊元素進行過濾,或是過濾不充分/不正確,就有受到OS命令注入攻擊的風險。

OS命令注入缺陷允許攻擊者直接在作業系統執行各種命令,當缺陷存在於網頁應用等無法直接訪問作業系統的軟體中時,會造成一些脆弱性問題。而當該缺陷存在於有高階許可權的軟體中時,攻擊者可透過缺陷獲得高階許可權,從而造成極大的危害。

2、OS命令注入兩種常見的子型別有哪些?

①應用程式透過使用者輸入的引數來構造OS命令。

例如,程式可能使用system(“nslookup [HOSTNAME]”)來執行nslookup命令,其中的HOSTNAME由使用者輸入。由於沒有檢查HOSTNAME中是否存在命令分隔符,攻擊者可將想執行的命令透過分隔符加在HOSTNAME中,當系統執行完nslookup後就會執行攻擊者的命令;

②應用程式將輸入的整個字串作為一個OS命令。

例如,透過exec([COMMAND])來執行命令,其中COMMAND由使用者輸入,此時攻擊者可以透過命令分隔符注入命令。

3、OS命令注入漏洞會造成哪些後果?

關鍵詞:執行未經授權的程式碼或命令; DoS:崩潰,退出或重啟; 讀取檔案或目錄; 修改檔案或目錄; 讀取應用資料; 修改應用資料; 隱藏活動。

攻擊者可以執行未經授權的命令,然後可以使用這些命令來禁用軟體,或者讀取和修改攻擊者無權直接訪問的資料。由於目標應用程式直接執行命令而不是攻擊者,因此任何惡意活動似乎都來自應用程式或應用程式的所有者。

4、如何防範修補OS命令注入漏洞?

從架構和設計的角度來說:

①要用最小許可權去執行程式,不要給予程式多餘的許可權,最好只允許在特定的路徑下執行,可以透過明確的路徑執行命令;

②儘可能使用庫或框架:使用不允許此弱點出現的經過稽核的庫或框架,或提供更容易避免此弱點的構造。儘可能地使用庫呼叫,而不是呼叫外部程式來完成所需功能。

③減少被攻擊面:對於那些被用於生成待執行命令的資料,儘可能避免其被外部可控的資料汙染。

從實現的角度來說:

雖然使用動態生成的查詢字串,程式碼或命令將控制和資料混合在一起是有風險的,但有時它可能是不可避免的。正確引用引數並轉義這些引數中的任何特殊字元。最保守的方法是轉義或過濾所有未透過極其嚴格的白名單的字元(例如不是字母數字或空格的所有內容)。如果仍然需要一些特殊字元,例如空格,則在轉義/過濾步驟之後將每個引數包裝在引號中;

如果只允許執行有限的命令,使用白名單方式過濾。

5、OS命令注入漏洞樣例:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2773625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章