什麼事Bash shell?
Bash Sell 在作業系統的層級中,在核心(Kernel)之上,應用程式(Application)之下,由Bash(Linux& MacOS底層Unix其中一種Shell), Ksh(Unix前身), Csh(最初shell), Tcsh(Unix), Zsh(MacOS)組成。
Bash shell能做什麼
透過shell script除了可安裝軟以外,還可存取作業系統中的環境係數,e.g.環境變數、使用者資訊、硬體資訊etc.
bash shell: 會因作業系統的不同,而有不同的表達方式,e.g. 指令 ls在Ubuntu終究有兩種呈現方式:
ps: 使用環境: Windows WSL Ubuntu 20.04 Docker
bash: 基於GNU bash(Kernel)所提供的原生命令,在某些特定的情況下,e.g.環境變數遺失,可進入bash模式尋找原生的環境變數,進入bash模式下即可直接進入使用者root(因為root是原生帳號,但有時原生帳號未必會是root帳號)。
bash是一種程式語言,部分由Macro組成(運用於程式正式啟動前確認編譯無誤,降低嵌入式系統在設計時造成不必要的死機狀況),經常用於程式安裝,某些應用程式在官方網站或是github上下載原生source,經常第一步需要執行configure檔與使用make指令進行編譯。
在未啟用漏洞的主機會不顯示hello
在啟用漏洞的主機,可顯示輸出結果hello world
由於外接設備有些問題,導致許你機無法接收鍵盤訊號,因此使用遠端軟體連線
雖然說被攻擊方的主機是由我們自己架設,但在模擬攻擊方時,尋找並選擇攻擊目標,才可對選擇後續攻擊手段與攻擊目的。
此步驟用於收集該主機對外開放了什麼服務,可根據portal推測開啟對應的服務。
上個步驟的掃瞄,猜測.128為實體主機,但預防猜測錯誤,還是對整個區域的電腦設備進行掃描。
這裡使用nmap工具進行掃描,使用此工具的優點在於可直接對掃描,並測試該portal的真實性,減少猜測錯誤的次數,也避免主機偵測到攻擊因此防禦性關閉服務。
主機掃描過程:
對80掃描過程
80 port通常是網頁的portal,因此這邊使用對於網頁的掃描工具。
資訊對比後的結論
先前我們對shellshock的了解,此漏洞對於某些命令會產生反應,將這段可執行的指令傳遞到目標主機,成為我們的攻擊方式。
先前在cgi的了解中,所有的http resopnse都會經過cgi,而在網際網路的世界中,必須要先有上傳,才會有下載,因此透過下載檔案的方式,將指令夾雜在下載的請求中,讓cgi讀取命令並產生反映,不自覺的將命令執行結果回傳到到提出request的來源。
http request: User-Agent(使用者相關與環境資訊):在使用瀏覽器瀏覽網站時,瀏覽器會將瀏覽器本身的資訊加入到request中的,而連線主機會依照連線來源來做些因應,例如先前網站工程師最頭痛的IE瀏覽器,會因IE瀏覽器的特質,傳送為專為IE瀏覽器的特製設定,若原先網站使用前端框架Vue製作,IE瀏覽器的request自動拒絕若導入到原先較舊的網站;除了資訊外還有可塞入talkon,例如成人網站的的年齡確認只須點選1次,不需持續確認的原因在此。伺服器也可透過此設定了解連線來源是否為爬蟲,攻擊,掃描或連線來源身分。若要瞭解更多,可嘗試撰寫爬蟲程式,或運用為搶課系統。
結合以上知識,將命令塞入request中,須將命令改寫:
原先命令:
User-Agent也屬於環境的一部分,可將env拿掉。
t是變數,將過server拆解User-Agent參數後,會被其他參數取代,因此將原先變數t拿掉。
命令: () { :; }; echo; echo;是Apache專案中cgi的漏洞程式碼。
bash要更改為運行命令bash檔案的位置,通常預設的bash檔案會位於/bin/sh。
-c 是bash運行命令時所夾帶的參數。
最後增加要運行的命令,即可完成命令改寫。
使用wget提出下載status,並更改User-Agent。
命令格式: wget [檔案網址][-U][更改後的命令]
這裡已下命令whoami查看當前使用者是誰。
查看以下載檔案,由於先前已下載status檔案,因此自動更名為stats.1,後續查看檔案動作相同,因此不再贅述。
可得知當前使用者為pentesterlab
確認已知資訊做驗證,查看當前ip位置
確認有哪些使用者帳號密碼與權限。
開啟msfconsole。
搜尋關於shellshock相關可用資源。
我覺得項目有點多,因此加入cgi關鍵字,再次過濾資訊。
嘗試使用第0項資訊
查看使用此需要的相關設定
透過此命令跳出關於此漏洞應用的相關exploit(巨集)的說明,並沒有指定的Payload,且沒有其他更詳細的說明,因此更換其他exploit試試看。
這次選擇第四步驟圖片中的第1項
再次查看相關資訊
可察看到,此exploit是針對CVE-2014-6271所設計的,有指定攻擊路徑,Header設定,非常符合shellshock和cgi所需要的規格。因此這裡選擇此exploit。
根據上衣不可得知lhost預設正確,但還需要設定其他參數,rhost(target host),payload與target url。
嘗試執行
沒有錯誤訊息,開始嘗試遠端控制。
嘗試得知網路卡資訊與狀態
可得知目前ip與攻擊目標ip,因該沒有問題。
執行shell,嘗試開啟shell。
一片黑,不知有無成功,開始嘗試其他指令。
嘗試列出當前bash狀態
可得知目前bash在時體主機並沒有在運作。(跳出此訊息時我以為是我參數下錯,嘗試好幾次xD)
嘗試得知目前Linux Kernel資訊
可得知與先前收集資訊相同。
再來看看有那些帳號與密碼。
查看資料夾/etc下的檔案passwd可查看所有使用者帳號密碼與權限。
再來看看先前nmap查詢到ssh的相關設定
服務的設定檔通常會在資料夾/etc下
可得知此電腦並未安裝ssh相關服務。
最後確認當前使用者是誰
searchsploit是隸屬於Exploit Database下的一種工具,Exploit Database開資料庫由Offensive Security公司進行維護,適用於測試資訊安全評估滲透測試。
在執行時跳出錯誤訊息,根據print語法推測,該撰寫方式應為python2,因此更改為python2執行。
執行成功畫面,疑似錯誤,開始進行各種測試。
先查看shell是否成功執行。
此回覆表示已在shell已在運行中。
查看當前bash資訊
可得知目前bash命為有工作階段。
查看Linux資訊
得知目前linux版本與當前使用者。
查看資料夾/etc下的相關設定。
疑點: 使巨集疑似有些問題,再命令輸出後,需enter兩次才會有反應。
Ps: 由於虛擬機出了一些問題,因此重新架設被攻擊主機,並更換ip位置,ip位置為192.168.197.131
透過直接攻擊,將執行命令改為查看shadow檔案
如果運氣好,即可直接閱讀shadow檔案,通常這隻檔案必須要以root權限閱讀。
透過john進行解密
因為剛剛的wget指令,將結果儲存在檔案status.6,因此透過john解密此檔案。
此步驟會消耗大部分的電腦資源。
解密結果
此方案成功機率不高,因必須要有相關資源,此案例就沒有相關資源,因此無法使用。