第0039期•2016.12.20 發行
ISSN 2077-8813

首頁 >專題報導

Command Injection運作原理與解說

作者:李美雯 / 臺灣大學計算機及資訊網路中心程式設計師
本文轉載自臺灣大學計資中心北區學術資訊安全維運中心

隨著網際網路的盛行,網頁應用程式也隨著日漸增多,ASP、PHP、Java等開發網頁的程式語言也成為開發人員的新選擇。但隨著這股趨勢,Web Application也成為了資訊安全的一大隱憂。

藉由圖一中OWASP的數據可以得知,Injection類型的攻擊已成為近年來熱門的攻擊手法。


圖一 OWASP所整理Web Application前十大弱點(2010-2013)

Command Injection-命令注入弱點
Web Application的攻擊類型繁多。其中,Command Injection(命令注入弱點)是一種常見的網頁注入攻擊行為,若管理者未在網站的輸入表單中正確過濾敏感字元,攻擊者有則可能透過這些進入點,將指令傳送至Server本機中執行後,再將執行結果透過動態網頁語言輸出,藉此獲取機敏資訊或執行未經授權的任意指令。
圖二示範了一個存在漏洞的網頁,它提供使用者使用whois的查詢功能,故此HTML表單在語法中接受使用者輸入domain的名稱。


圖二 HTML表單與語法內容

一般使用者在使用此功能時,若是正常查詢一Domain(範例為FISHNETSECURITY.COM)時,會出現如圖三的資訊。


圖三 正常使用查詢功能

而不管Windows或是Linux系統的Web Server都可能存在著Command Injection的風險。在我們範例中的Web Server是屬於Linux的系統,由於Linux可利用分號來同時提交多個不同的指令,故可在原先查詢的內容加上”;”後,同時帶入Linux指令”pwd”,並透過表單將此指令傳送至Web Server中。


圖四 嘗試將Linux系統指令”pwd”注入系統中

當Web Server收到上述表單所傳送的資料時,會因字串中的分號而誤判,而將”pwd”當作指令直接執行並透過動態網頁語言回傳至前端瀏覽器。在Linux系統中,”pwd”指令是用來顯示目前所在目錄,因此從網頁出現的資訊中我們可以得知指令已成功被執行。


圖五 指令執行後的畫面

影響
Command Injection這類型的攻擊手法影響相當廣泛,當攻擊者透過這種手法攻擊Web Server時,將可能導致主機中的機敏的資料外洩,在未經授權的情況下執行任意指令,甚至可利用此主機當作跳板,侵入網域內其他高價值的Server(如DB Server)。

預防措施
1. 白名單:針對表單的設計更加嚴謹,可以善用正規表示式的方式來篩選。以前面提到的例子來說,我們加入一些限制域名輸入的條件如圖六所示。


圖六 


圖七 輸入相同指令; pwd出現阻擋訊息

2. 在PHP的環境中,可以使用escapeshellarg() 和 escapeshellcmd()的函數來進行防禦。這兩個函數雖然過濾參數的方式不同,但主要功用都是過濾參數值以避免Command Injection等惡意攻擊。
3. 如非必要,盡量避免撰寫此類型語法。

參考資料
1. Ryan Dorey。2014-10-30。Common Web Application Vulnerabilities網址:
https://www.optiv.com/blog/common-web-application-vulnerabilities-part-4。上網日期:2016-03-24。
2. OWASP。Feb-2013。Category:OWASP Top Ten Project。網址:
https://www.owasp.org/index.php/Top10#OWASP_Top_10_for_2013。上網日期:2016-05-03。
3. 阿言。2007-03-08。開發者俱樂部。網址:
http://www.code-club.idv.tw/index.php?action=index&run=article_read&ClassID=14&ArticleID=1557。上網日期:2016-05-04。