ShellShock 攻擊實驗

2022-09-20 01:57:10 字數 3403 閱讀 8799

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包發給客戶端,使客戶端異常的斷開了與...