2015-11-15 55 views
2

我一直在嘗試利用我係統中的Shellshock漏洞,並遇到一個有趣的問題。我一直在使用'wget'來利用這個漏洞。我正在使用的命令如下:無法利用所有文件的shellshock漏洞

wget -U "() { test;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://somesite.com/some-script.cgi 

使用上述命令,該漏洞按預期顯示。但是,當我嘗試訪問不是.cgi文件的文件時,該漏洞不會顯示,只會下載文件。

據我所知,wget應該將User-Agent字符串設置爲在應該運行代碼/bin/cat /etc/passwd的命令中傳遞的值,我無法看到這與被下載的文件的性質有什麼關係。

在此先感謝。

+0

在somesite.com上運行什麼服務器? – choroba

+0

我有apache2運行。 – Rabee

+0

apache2是否檢查用戶代理的靜態頁面?它爲它們運行一個新的shell嗎? – choroba

回答

2

爲了開拓shellshock bug,需要按以下步驟進行:

  1. 你必須讓目標服務器到一個特定的字符串注入的environment variable,並設置環境後

  2. 變量,目標必須(直接或間接)啓動(易受攻擊的版本)的shell。這可能發生

的一種方法是當Web服務器通過Common Gateway Interface (CGI)執行外部程序,外部程序或者是一個bash shell腳本,或以其他方式調用的bash。發生這種情況的原因是CGI協議指定來自原始HTTP請求的標頭以前綴HTTP_(例如,用於用戶代理標頭的HTTP_USER_AGENT)在環境變量中傳遞給外部程序。由於攻擊者可以控制這些頭,他們也可以直接控制這些環境變量的值。

但是,當通過CGI調用外部程序時,網絡服務器需要設置這些環境變量只有。在傳送靜態文件時,服務器只需從磁盤讀取該文件並將其發送回客戶端;它不需要設置任何環境變量或調用任何外部工具,如bash。

+0

對。所以我的問題是,當我使用'wget'從Web服務器獲取文件時,即使文件是.cgi文件,它也只需要讀取該文件。爲什麼漏洞會被正在讀取的文件的類型所影響? – Rabee

+1

一個CGI腳本(我假設你的web服務器被配置爲以.cgi後綴處理文件)不僅僅是從磁盤讀取併發送給你,而是由服務器執行。 ,它的*輸出*發送給你。如果正在執行的文件恰好是一個bash腳本(即以'#!/ bin/bash'開頭的文本文件),那麼執行它將導致OS調用bash,因此可能觸發shellshock錯誤。有關CGI腳本如何工作的更多背景信息,您可能需要查看我的答案中包含的維基百科鏈接。 –

+0

啊好的。現在,這清除了一切。我有一個想法如何CGI腳本的工作,但我不知道他們執行時,你'他們',他們的輸出被提取。我認爲這個文件本身就被提取了。 – Rabee