shellshock 攻擊實驗
20125119尹顥澎
一、 實驗描述
2023年9月24日,bash中發現了乙個嚴重漏洞shellshock,該漏洞可用於許多系統,並且既可以遠端也可以在本地觸發。在本實驗中,學生需要親手重現攻擊來理解該漏洞,並回答一些問題。
二、 預備知識
1. 什麼是shellshock?
shellshock,又稱bashdoor,是在unix中廣泛使用的bash shell中的乙個安全漏洞,首次於2023年9月24日公開。許多網際網路守護程序,如網頁伺服器,使用bash來處理某些命令,從而允許攻擊者在易受攻擊的bash版本上執行任意**。這可使攻擊者在未授權的情況下訪問計算機系統。——摘自維基百科
2. 進行實驗所需的準備
1. 環境搭建
安裝# tar xf bash-4.1.tar.gz
# cd bash-4.1
# ./configure
# make & make install
鏈結# rm /bin/bash
# ln -s /usr/local/bin/bash /bin/bash
到這裡就安裝完了,接下來檢測是否存在shellshock漏洞。
輸出vulnerable的話,說明bash有漏洞。
最後,讓/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
現在一切就緒,進入下一步吧。
2.預備知識
了解bash自定義函式,只需要函式名就能夠呼叫該函式。
$ foo()
$ foo
> bar
這個時候的bash的環境變數:
key = foo
value = ()
來看看shellshock漏洞的真身:
export foo=』() ; echo hello world』
bash
>hello world
怎麼樣?看明白了沒?為什麼呼叫bash的時候輸出hello world了呢? 瞧瞧他內部的情況:
key = foo
value = () ; echo hello world
bash讀取了環境變數,在定義foo之後直接呼叫了後面的函式。 一旦呼叫bash,自定義的語句就直接觸發。
到了這,你有想到什麼麼,聯絡之前的set-uid課程。 對!幹壞事的孩子會被警察叔叔抓走的:)
不多說了,來get root許可權吧!
三、 實驗內容
1.攻擊set-uid程式
本實驗中,我們通過攻擊set-uid程式來獲得root許可權。 首先,確保安裝了帶有漏洞的bash版本,並讓/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
請編譯下面這段**,並設定其為set-uid程式,保證它的所有者是root。我們知道system()函式將呼叫"/bin/sh -c" 來執行指定的命令, 這也意味著/bin/bash 會被呼叫,你能夠利用shellshock漏洞來獲取許可權麼?
#include
void main()
我們注意到這裡使用了setuid(geteuid()) 來使real uid = effective uid,這在set-uid程式中不是普遍實踐,但它確實有時會發生。 先自己試著hack一下:) …… …… …… …… …… …… 以下是hack過程。
如果 setuid(geteuid()) 語句被去掉了,再試試看攻擊,我們還能夠拿到許可權麼?
(hack過程與step1完全一樣,sh0ck是編譯後的程式)
失敗啦!這就說明如果 real uid 和 effective uid 相同的話,定義在環境變數中的內容在該程式內有效,那樣shellshock漏洞就能夠被利用了。但是如果兩個uid不同的話,環境變數失效,就無法發動攻擊了,這可以從bash的源**中得到印證(variables.c,在308到369行之間)請指出是哪一行導致了這樣的不同,並說明bash這樣設計的原因。
這裡給出這部分**
/* initialize the shell variables from the current environment.
if privmode is nonzero, don't import functions from env or
parse $shellopts. */
void
initialize_shell_variables (env, privmode)
char **env;
int privmode;
*/if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
name[char_index - 2] = '\0';
if (temp_var = find_function (name))
else
report_error (_("error importing function definition for `%s'"), name);
/* ( */
if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
name[char_index - 2] = '('; /* ) */
}摘出其中關鍵部分並簡化
void initialize_shell_variables() }
就是上述那一行判斷邏輯導致了兩者的不同,primode即私有模式,要求real uid 與 effective uid保持一致。至於如此設計的原因,小編覺得。。別人家的環境變數自己都不知道內容是些什麼,import了也沒用吧。。。。小編想的比較天真,你一定有更好的答案:)
至於shellshock漏洞的防禦方法麼,快去公升級你家bash啦。
四、 練習
在實驗樓環境安步驟進行實驗,並截圖
五、實驗感想
linux實驗到此為止,但有些內容沒有整明白,在今後幾周的學習中有意識地去解決這些問題。
shellshock溢位攻擊
實驗背景 2014年9月24日,bash中發現了乙個嚴重漏洞shellshock,該漏洞可用於許多系統,並且既可以遠端也可以在本地觸發。在本實驗中,需要親手重現攻擊來理解該漏洞,並回答一些問題。什麼是shellshock shellshock,又稱bashdoor,是在unix中廣泛使用的bash ...
「破殼」 Shellshock 漏洞修復
背景 距離 破殼 shellshock 漏洞漏洞爆發一句過去兩周有餘了 2014年9月24日公布 相信很多人都已經聽說過了這個危害等級為十的漏洞,編號為cve 2014 6271,該漏洞將導致遠端攻擊者在受影響的系統上執行任意 相比之下,與上乙個著名的漏洞 心臟出血 只有五,不過奇怪的是,破殼 漏洞...
RST攻擊和TCP會話劫持攻擊實驗
一 rst攻擊 rst表示復位。用來異常的關閉連線。在傳送rst包關閉連線時,不必等緩衝區的包都發出去,而是直接丟棄快取區的包傳送rst包。而接收端收到rst包後,也不必傳送ack包來確認。rst攻擊 客戶端和服務端之間建立了tcp連線。此時攻擊者偽造了乙個tcp包發給客戶端,使客戶端異常的斷開了與...