1. 關於 Impacket
- 用途:Impacket 是一組用於處理網路協定的 Python 集合,專注於提供封包的低階程式化操作,以及部分協定的完整實現(例如 SMB1-3 和 MSRPC)。
- 功能:可從零構建封包、解析原始數據,並透過物件導向的 API 操作協定層級結構。
- 開發與維護:原由 SecureAuth 維護,現由 Fortra 的 Core Security 接管,持續推動開源生態系統發展。
- 下載位置:GitHub
2. 支援的協定
- 網路層:Ethernet、IPv4、IPv6、IP、TCP、UDP、ICMP 等。
- 身份驗證:Plain、NTLM 和 Kerberos(支援密碼、哈希、票證、金鑰)。
- 高階協定:
- SMB1、SMB2、SMB3。
- MSRPC:支援多種介面(如 LSAD、LSAT、SAMR、DCOM 等)。
- LDAP 和 MSSQL 部分協定。
3. 常見工具與功能範例
遠端執行
psexec.py
:模擬 PSEXEC 功能,使用 RemComSvc。smbexec.py
:類似 PSEXEC,但無需 RemComSvc,可建立本地 SMB 伺服器接收輸出。atexec.py
:利用任務排程器執行指令並回傳結果。wmiexec.py
:基於 WMI 的半互動式 Shell,無需安裝任何代理程式。dcomexec.py
:基於 DCOM 的半互動式 Shell。
Kerberos 工具
GetTGT.py
:請求 TGT 並保存為 ccache 格式。ticketer.py
:創建金票/銀票,允許自訂部分參數(如群組、有效期限等)。GetUserSPNs.py
:提取服務主體名稱 (SPNs) 並輸出 JtR/HashCat 格式。
敏感資訊提取
secretsdump.py
:提取 SAM 和 LSA Secrets,並支援 NTDS.dit 文件解析。mimikatz.py
:控制遠端 mimikatz RPC 伺服器。
中間人攻擊
ntlmrelayx.py
:執行 NTLM 中繼攻擊,支援多種協定(如 SMB、HTTP、LDAP 等)。smbserver.py
:快速建立 SMB 伺服器以共享文件或建立帳號。
其他工具
reg.py
:遠端註冊表操作工具。rpcdump.py
:列出遠端 RPC 端點並對應已知介面。netview.py
:取得目標系統的會話和資源資訊。mssqlclient.py
:支援 SQL 和 Windows 認證的 MSSQL 客戶端。
4. 已知漏洞範例
goldenPac.py
:針對 MS14-068 的漏洞利用。sambaPipe.py
:利用 CVE-2017-7494 上傳並執行共享庫。smbrelayx.py
:針對 CVE-2015-0005 的 SMB 中繼攻擊。
5. 文件格式工具
esentutl.py
:解析 ESE 資料庫(如 NTDS.dit)。ntfs-read.py
:提取 NTFS 中的隱藏或鎖定內容。
6. 技術需求與版本
- Python 版本:支援 3.6 至 3.10。
- 文件與範例:附有基本的 Python Doc 註解,範例程式提供學習素材。
指令範例
以下是一些 Impacket 工具的示範指令和簡單說明,涵蓋不同的常見場景:
1. 遠端執行
psexec.py
模擬 Windows 的 PSEXEC 功能,利用 SMB 執行命令。
python3 psexec.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee "whoami"
- 參數說明:
[email protected]
:目標主機的使用者名稱和 IP 地址。-hashes
:提供 NTLM 哈希。"whoami"
:在目標主機上執行的命令。
smbexec.py
類似 PSEXEC,但不需要目標有可寫共享。
python3 smbexec.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee
- 進入互動式 Shell,直接在目標主機執行命令。
wmiexec.py
使用 WMI 無需安裝任何服務,適合隱匿需求。
python3 wmiexec.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee "ipconfig /all"
- 適合目標未啟用
SMB
寫入共享的情況。
2. 資訊收集與提取
secretsdump.py
提取目標主機上的密碼哈希和其他敏感資訊。
python3 secretsdump.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee
- 會嘗試提取
SAM
和LSA
的內容,包括 NTLM 哈希和明文憑證(若可用)。
GetUserSPNs.py
獲取域中的服務主體名稱 (SPNs),通常用於 Kerberos 攻擊。
python3 GetUserSPNs.py domain.local/administrator:password -dc-ip 192.168.1.10
- 結果會生成可供工具(如
John the Ripper
或Hashcat
)破解的 Kerberos 哈希。
reg.py
遠端操作 Windows 註冊表。
python3 reg.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee query HKLM\Software
- 列出指定註冊表項下的所有子項和值。
3. 中間人攻擊
ntlmrelayx.py
進行 NTLM 中繼攻擊,將憑證中繼至其他服務。
python3 ntlmrelayx.py -t smb://192.168.1.10
- 目標伺服器(
192.168.1.10
)將接收中繼的 NTLM 驗證請求。 - 配合其他工具(如
Responder
),可攔截並中繼憑證。
4. LDAP 和 Kerberos
ticketer.py
生成 Kerberos 金票(Golden Ticket)。
python3 ticketer.py -nthash aad3b435b51404eeaad3b435b51404ee -domain-sid S-1-5-21-xxxxxxxxxx -domain domain.local administrator
- 使用 NTLM 哈希 (
-nthash
) 和域 SID (-domain-sid
) 生成票證。
GetNPUsers.py
列出具有「無需 Kerberos 預驗證」屬性的使用者,並嘗試提取其 TGT。
python3 GetNPUsers.py domain.local/ -usersfile users.txt -dc-ip 192.168.1.10
- 結果會生成用於破解的哈希。
raiseChild.py
利用子域提升至森林管理權限。
python3 raiseChild.py -hashes :aad3b435b51404eeaad3b435b51404ee child.domain.local
- 子域帳戶權限升級至森林管理員。
5. SMB 工具
smbclient.py
用於與遠端 SMB 共享互動。
python3 smbclient.py 192.168.1.10 -hashes :aad3b435b51404eeaad3b435b51404ee
- 提供類似 Windows
net use
的功能,可列出共享並下載/上傳文件。
常見工具使用
1. impacket-GetLAPSPassword
這是什麼
該工具用於從啟用了 Microsoft LAPS (Local Administrator Password Solution) 的環境中提取本地管理員密碼。
如何使用
執行以下命令來提取目標主機的本地管理員密碼:
python3 impacket-GetLAPSPassword.py domain.local/username:password -dc-ip 192.168.1.10
參數說明:
domain.local/username:password
:域的使用者名稱和密碼。-dc-ip
:域控制器的 IP 地址。
什麼時候使用
- 當目標域環境啟用了 LAPS 並且你有查詢權限時使用。
- 適用於滲透測試過程中尋找本地管理員密碼以進一步橫向移動。
用了之後做什麼
- 使用提取的本地管理員密碼登錄目標主機。
- 繼續執行橫向移動或提取其他敏感數據。
2. impacket-psexec
這是什麼
該工具模擬 Windows 的 PSEXEC 功能,通過 SMB 執行遠程命令。
如何使用
執行以下命令來在目標主機上執行命令:
python3 impacket-psexec.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee "whoami"
參數說明:
[email protected]
:目標主機的使用者名稱和 IP。-hashes
:提供 NTLM 哈希。"whoami"
:執行的遠端命令。
什麼時候使用
- 當需要遠程執行命令時,例如檢查權限、提取數據或建立持久化。
用了之後做什麼
- 收集目標機器資訊(如用戶權限、網絡配置等)。
- 部署其他工具或後門以維持訪問。
3. impacket-findDelegation
這是什麼
該工具用於查找 Active Directory 環境中的委派關係(包括無限制、限制和基於資源的委派)。
如何使用
執行以下命令查詢域中的委派資訊:
python3 impacket-findDelegation.py domain.local/username:password -dc-ip 192.168.1.10
什麼時候使用
- 當進行 Active Directory 滲透測試,尋找委派弱點來提升權限時。
用了之後做什麼
- 分析委派關係以找出高權限使用者(如域管理員)可能的攻擊路徑。
- 利用基於資源的委派(RBCD)來提升權限。
4. impacket-getST
這是什麼
該工具用於請求 Kerberos 的服務票證 (Service Ticket, ST),可用於協議中轉等攻擊。
如何使用
執行以下命令請求服務票證:
python3 impacket-getST.py -dc-ip 192.168.1.10 domain.local/username:password -spn cifs/target.domain.local
參數說明:
-spn
:目標服務主體名稱 (SPN)。
什麼時候使用
- 當需要提取服務票證進行協議中轉或其他 Kerberos 攻擊(例如 Pass-the-Ticket 攻擊)。
用了之後做什麼
- 使用服務票證來訪問目標服務。
- 配合其他工具進行身份偽裝或橫向移動。
5. impacket-secretsdump
這是什麼
該工具提取目標主機的敏感資訊,例如哈希值、明文憑證、NTDS.dit 等。
如何使用
執行以下命令提取目標機器的秘密:
python3 impacket-secretsdump.py [email protected] -hashes :aad3b435b51404eeaad3b435b51404ee
什麼時候使用
- 當你需要獲取域管理員的憑證或其他高權限帳戶的哈希值。
用了之後做什麼
- 使用提取的哈希進行 Pass-the-Hash 或其他後續操作。
- 嘗試破解哈希以獲得明文密碼。
總結:使用場景與後續行動
工具名稱 | 使用場景 | 使用後的行動 |
---|---|---|
GetLAPSPassword | 提取本地管理員密碼 (LAPS)。 | 使用密碼登錄主機,繼續橫向移動或提取數據。 |
psexec | 遠端執行命令(需要 SMB 寫入權限)。 | 收集資訊,部署工具,維持後門。 |
findDelegation | 分析 AD 環境中委派關係,尋找高權限用戶的攻擊路徑。 | 利用委派弱點進行權限提升或橫向移動。 |
getST | 請求 Kerberos 服務票證,用於身份偽裝或協議中轉。 | 使用服務票證進行橫向移動或攻擊目標服務。 |
secretsdump | 提取機器上的哈希和其他秘密(例如 NTDS.dit)。 | 利用哈希進行 Pass-the-Hash 或破解獲得密碼。 |
透過這些工具,滲透測試人員可以快速進行資訊收集、權限提升及橫向移動,視具體環境制定後續行動計畫。