2014-09-25 152 views
-6

我最近遇到了shellshock bug,這是bash shell中的一個bug。它以某種方式使用env命令來創建包含函數的環境變量。當一個新的bash殼催生什麼是env命令呢?

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

這些函數然後運行。我在很多地方閱讀,並得到了我剛剛寫的同樣的解釋。但是,我仍然無法確定上述命令的運行以及參數。 任何人都可以解釋嗎?

+0

@ralph考慮到圍繞「shellshock」的宣傳和恐慌,你應該假設已經在討論這個話題。 – JakeGould 2014-09-25 19:47:58

+0

@JakeGould:我通過互聯網閱讀帖子和討論,找到一個徹底的解釋 – Haris 2014-09-25 19:50:11

+0

'man env'?這只是一種觸發錯誤的方法;知道'env'如何工作並不能解釋漏洞本身是如何工作的。 – chepner 2014-09-25 19:51:19

回答

1

env設置一個或多個環境變量,然後將其餘參數作爲命令運行。

這不是從以下語法顯著不同:

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

一件事env可以做(雖然功能沒有在上面的例子中使用)是創建一個清潔的環境;如果env的第一個選項是單個-(或-i),則在執行顯式分配並運行該命令之前清理環境。

+0

這是使用env和不使用它的唯一區別(即能否以空白環境開始)? – Jeremy 2016-01-27 14:03:45

+0

@jeremy:通常,是的。 'env'通常用在一個shebang行('#!/ bin/env ...')中,因爲它爲可執行文件搜索'PATH',但這隻在沒有搜索到'PATH'的地方。 – rici 2016-01-27 14:31:10

+0

我應該補充道,沒有在shebang行搜索PATH有一個很好的理由,「解決方法」不是一個好主意恕我直言。但是,如果範圍在這裏,這是出路。 – rici 2016-01-27 14:33:54