實驗背景
2023年9月24日,bash中發現了乙個嚴重漏洞shellshock,該漏洞可用於許多系統,並且既可以遠端也可以在本地觸發。在本實驗中,需要親手重現攻擊來理解該漏洞,並回答一些問題。
什麼是shellshock
shellshock,又稱bashdoor,是在unix中廣泛使用的bash shell中的乙個安全漏洞,首次於2023年9月24日公開。許多網際網路守護程序,如網頁伺服器,使用bash來處理某些命令,從而允許攻擊者在易受攻擊的bash版本上執行任意**。這可使攻擊者在未授權的情況下訪問計算機系統。
環境搭建
安裝
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure #這一步過程比較長,請等待一會
鏈結
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
到這裡環境就安裝完了,接下來檢測是否存在shellshock漏洞。
測試
$ exit
$ env x='() ; echo vulnerable' bash -c "echo this is a test"
輸出vulnerable的話,說明bash有漏洞。
最後,讓/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
現在一切就緒,進入下一步吧。
測試1.預備知識
來看看shellshock漏洞的真身:
為什麼呼叫bash的時候輸出hello lichen12了呢?瞧瞧他內部的情況:
key = foo
value = () ; echo hello lichen12
bash讀取了環境變數,在定義foo之後直接呼叫了後面的函式。 一旦呼叫bash,自定義的語句就直接觸發。
正式實驗
本實驗中,我們通過攻擊set-uid程式來獲得root許可權。
我們知道system()函式將呼叫"/bin/sh -c" 來執行指定的命令, 這也意味著/bin/bash 會被呼叫,你能夠利用shellshock漏洞來獲取許可權麼? 首先,確保安裝了帶有漏洞的bash版本,並讓/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
在 /home/shiyanlou 目錄下新建乙個 shock12.c 檔案:
$ vi shock12.c
按 i 鍵切換到插入模式,再輸入如下內容:
編譯這段**,並設定其為set-uid程式,保證它的所有者是root。
我們注意到這裡使用了setuid(geteuid()) 來使real uid = effective uid,這在set-uid程式中不是普遍現象,但它確實有時會發生。 先自己試著hack一下:) 以下是hack過程:
如果 setuid(geteuid()) 語句被去掉了,再試試看攻擊,我們還能夠拿到許可權麼?
失敗了!這就說明如果 real uid 和 effective uid 相同的話,定義在環境變數中的內容在該程式內有效,那樣shellshock漏洞就能夠被利用了。但是如果兩個 uid 不同的話,環境變數失效,就無法發動攻擊了。
variables.c部分**
/* 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保持一致。
該漏洞在於,bash把函式體解析完了之後,去執行了函式定義後面的語句。原理十分簡單危害卻巨大無比。此型別的攻擊方式頻出關鍵在於bash在設計的時候對於環境變數的依賴,人們可以嘗試著使用各種方式誘騙bash視其為命令。
ShellShock 攻擊實驗
shellshock 攻擊實驗 20125119尹顥澎 一 實驗描述 2014年9月24日,bash中發現了乙個嚴重漏洞shellshock,該漏洞可用於許多系統,並且既可以遠端也可以在本地觸發。在本實驗中,學生需要親手重現攻擊來理解該漏洞,並回答一些問題。二 預備知識 1.什麼是shellshoc...
棧溢位攻擊c語言 棧溢位攻擊
我們先來看下面的乙個例子 include int main gets str printf str s n str return 0 在 main 函式內部定義乙個字元陣列,並通過 gets 為它賦值。在vs2010 debug模式下執行程式,當輸入的字元不超過10個時,可以正確輸出,但是當輸入的字...
沖區溢位攻擊原理
緩衝區溢位是一種在各種作業系統 應用軟體中廣泛存在普遍且危險的漏洞,利用緩衝區溢位攻擊可以導致程式執行失敗 系統崩潰等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。第乙個緩衝區溢位攻擊 morris蠕蟲,發生在十年前,它曾造成了全世界6000多台網路伺服器...