bash遠程代碼執行漏洞


博客園新聞:http://news.cnblogs.com/n/504506/(如果以下有說錯的地方請不吝指出,謝謝~)

詳情可圍觀上面的鏈接。因為我們的服務器都是私有網環境,即使要修復也得等到下次安全加固的時候進行。對於這個BUG我比較感興趣的是:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

這個測試代碼是怎么執行的?於是,拿到terminal中執行結果如下:

vulnerable
this is a test

#注:vulnerable是“易受攻擊”的意思,老外出於warning特地用這個單詞。

從上述結果來看,"echo vulnerable" 和 "echo this is a test",都被執行了。"echo this is a test"自不用說,bash -c 就是用來執行string-commands(命令字符串),也就說不管后面的字符串里是什么都會被當做shellcode來執行。這個當然算不上BUG,畢竟受執行權限約束。那么問題的重點就是"echo vulnerable"怎么會被執行的?

我們先來看 env x='() { :;}; echo vulnerable' env命令大家一般都了解(不了解的跟隨傳送門去看)。env為接下來的執行命令提供環境變量,拿測試代碼解釋來說就是:

bash -c "echo this is a test"在執行的時候存在一個環境變量x,而x呢等於 () { :;}; echo vulnerable ,我們都知道環境變量在使用前都會被初始化,那么 () { :;}; echo vulnerable 就自然而然的被執行了。() { :;};定義了一個函數(function)並且它什么也不做,而后的echo vulnerable被解析后得到了執行權。那么echo vulnerable換成其他更具破壞性的代碼后果就不堪設想了。(沒錯,env還支持function作為環境變量,不信執行:env FUNC='() { echo OK;};' bash -c "FUNC")

#注:如果想以env xxx='zzz' bash -c 'yyy'這種形式的滲入式攻擊,zzz就必須寫成這樣: () { :;}; BAD-CODE-HERE

其詳細過程還可參考國外友人的解釋:

http://seclists.org/oss-sec/2014/q3/650

http://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/

http://www.reddit.com/r/programming/comments/2hc1w3/cve20146271_remote_code_execution_through_bash/

 

上述連接中就有人舉例說明了其應用場景:

假設:

你的server(apache/nginx)上部署了/var/www/cgi-bin/hi這樣一個cgi程序,hi的源碼類似如下:

#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "hai"

那么,通過curl構造http-header並訪問curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  https://localhost/cgi-bin/hi

執行后會發現,/tmp/aa這個文件竟然產生了,所以到這里你應該明白了這個bash-remote-code-execution的執行過程及危害了吧。

針對此BUG解決方案也很簡單,那就是趕快升級你的bash,目前相應的patch已經出來了(bash-4.1.2-15.el6_5.1)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM