shellshock溢位攻擊

2022-08-26 09:06:12 字數 3946 閱讀 3455

實驗背景

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多台網路伺服器...