什么是Impacket
Impacket是用於處理網絡協議的Python類的集合。Impacket專注於提供對數據包的簡單編程訪問,以及協議實現本身的某些協議(例如SMB1-3和MSRPC)。數據包可以從頭開始構建,也可以從原始數據中解析,而面向對象的API使處理協議的深層次結構變得簡單。該庫提供了一組工具,作為在此庫找到可以執行的操作的示例。
有關某些工具的說明,請訪問:https://www.secureauth.com/labs/open-source-tools/impacket
Impacket中包含以下協議
- 以太網,Linux“Cooked”數據包捕獲
- IP,TCP,UDP,ICMP,IGMP,ARP
- 支持IPv4和IPv6
- NMB和SMB1,SMB2和SMB3(高級實現)
- MSRPC版本5,通過不同的傳輸協議:TCP,SMB / TCP,SMB/NetBIOS和HTTP
- 使用密碼/哈希/票據/密鑰進行簡單的NTLM和Kerberos身份驗證
- 部分或完全實現以下MSRPC接口:EPM,DTYPES,LSAD,LSAT,NRPC,RRP,SAMR,SRVS,WKST,SCMR,BKRP,DHCPM,EVEN6,MGMT,SASEC,TSCH,DCOM,WMI
- 部分TDS(MSSQL)和LDAP協議實現。
獲得Impacket
- 已編譯的當前版本和以前的版本
- 開源分支
程序安裝
快速開始
獲取最新的穩定版本,將其解壓縮並執行命令pip install . 然后在它的目錄中運行。
安裝要求
- Python解釋器,已知Python 2.6/2.7和Python 3.6可以運行
- 如果您想運行這些示例,並且您的python<2.7,那么需要安裝argparse包,以便它們正常執行。
- 對於Kerberos支持,您將需要安裝pyasn1包
- 對於加密操作,您將需要安裝pycryptodomex包
- 對於某些示例,您將需要安裝pyOpenSSL(rdp_check.py)和ldap3(ntlmrelayx.py)
- 對於ntlmrelayx.py你還需要安裝ldapdomaindump,flask並ldap3
- 如果你在Windows下,你將需要安裝 pyReadline
- 最近發布的Impacket
安裝
為了安裝源,請從解壓縮Impacket包的目錄中執行以下命令:pip install . 這將把類安裝到默認的Python模塊路徑中; 請注意,您可能需要特殊的權限才能在那里進行寫入。有關setup.py中可用的命令和選項的詳細信息,請運行python setup.py --help-commands
測試
如果您想要運行庫測試用例,您需要主要做三件事:
- 安裝和配置Windows 2012 R2域控制器。
- 確保遠程注冊表(RemoteRegistry)服務已啟用並正在運行。
- 使用必要的信息配置dcetest.cfg文件
- 安裝tox(pip install tox)
完成后,您可以運行tox並等待結果。如果一切順利,所有測試用例都應該通過。您還可以在impacket/tests/htlmcov/index.html上找到一個被覆蓋的HTML報告
IMPACKET中包含以下工具
遠程執行
- psexec.py:類似PSEXEC的功能示例,使用remcomsvc(https://github.com/kavika13/remcom)
- smbexec.py:與使用remcomsvc的psexec w/o類似的方法。這里描述了該技術。我們的實現更進一步,實例化本地smbserver以接收命令的輸出。這在目標計算機沒有可寫共享可用的情況下很有用。
- atexec.py:此示例通過Task Scheduler服務在目標計算機上執行命令,並返回已執行命令的輸出。
- wmiexec.py:通過Windows Management Instrumentation使用的半交互式shell,它不需要在目標服務器上安裝任何服務/代理,以管理員身份運行,非常隱蔽。
- dcomexec.py:類似於wmiexec.py的半交互式shell,但使用不同的DCOM端點。目前支持MMC20.Application,ShellWindows和ShellBrowserWindow對象。
- GetTGT.py:指定密碼,哈希或aesKey,此腳本將請求TGT並將其保存為ccache
- GetST.py:指定ccache中的密碼,哈希,aesKey或TGT,此腳本將請求服務票證並將其保存為ccache。如果該帳戶具有約束委派(具有協議轉換)權限,您將能夠使用-impersonate參數代表另一個用戶請求該票證。
- GetPac.py:此腳本將獲得指定目標用戶的PAC(權限屬性證書)結構,該結構僅具有正常的經過身份驗證的用戶憑據。它通過混合使用[MS-SFU]的S4USelf +用戶到用戶Kerberos身份驗證組合來實現的。
- GetUserSPNs.py:此示例將嘗試查找和獲取與普通用戶帳戶關聯的服務主體名稱。
- GetNPUsers.py:此示例將嘗試為那些設置了屬性“不需要Kerberos預身份驗證”的用戶獲取TGT(UF_DONT_REQUIRE_PREAUTH).輸出與JTR兼容
- ticketer.py:此腳本將從頭開始或基於模板(根據KDC的合法請求)創建金/銀票據,允許您在PAC_LOGON_INFO結構中自定義設置的一些參數,特別是組、外接程序、持續時間等。
- raiseChild.py:此腳本通過(ab)使用Golden Tickets和ExtraSids的基礎來實現子域到林權限的升級。
Windows Secrets
- secretsdump.py:
- 執行各種技術從遠程機器轉儲Secrets,而不在那里執行任何代理。對於SAM和LSA Secrets(包括緩存的憑據),然后將hives保存在目標系統(%SYSTEMROOT%\ Temp目錄)中,並從中讀取其余數據。對於DIT文件,我們使用dl_drsgetncchanges()方法轉儲NTLM哈希值、純文本憑據(如果可用)和Kerberos密鑰。它還可以通過使用smbexec/wmiexec方法執行的vssadmin來轉儲NTDS.dit.如果腳本不可用,腳本將啟動其運行所需的服務(例如,遠程注冊表,即使它已被禁用)。運行完成后,將恢復到原始狀態。
- mimikatz.py:用於控制@gentilkiwi開發的遠程mimikatz RPC服務器的迷你shell
服務器工具/ MiTM攻擊
- ntlmrelayx.py:此腳本執行NTLM中繼攻擊,設置SMB和HTTP服務器並將憑據中繼到許多不同的協議(SMB,HTTP,MSSQL,LDAP,IMAP,POP3等)。該腳本可以與預定義的攻擊一起使用,這些攻擊可以在中繼連接時觸發(例如,通過LDAP創建用戶),也可以在SOCKS模式下執行。在此模式下,對於每個中繼的連接,稍后可以通過SOCKS代理多次使用它
- karmaSMB.py:無論指定的SMB共享和路徑名如何,都會響應特定文件內容的SMB服務器
- smbserver.py:SMB服務器的Python實現,允許快速設置共享和用戶帳戶。
WMI
- wmiquery.py:它允許發出WQL查詢並在目標系統上獲取WMI對象的描述(例如,從win32_account中選擇名稱)
- wmipersist.py: 此腳本創建/刪除wmi事件使用者/篩選器,並在兩者之間建立鏈接,以基於指定的wql篩選器或計時器執行Visual Basic Basic
已知的漏洞
- goldenPac.py: 利用MS14-068。保存Golden Ticket並在目標位置啟動PSExec會話
- sambaPipe.py:該腳本將利用CVE-2017-7494,通過-so參數上傳和執行用戶指定的共享庫。
- smbrelayx.py:利用SMB中繼攻擊漏洞CVE-2015-0005。如果目標系統正在執行簽名並且提供了計算機帳戶,則模塊將嘗試通過NETLOGON收集SMB會話密鑰。 利用SMB中繼攻擊漏洞CVE-2015-0005
SMB / MSRPC
- smbclient.py:一個通用的SMB客戶端,可以允許您列出共享和文件名,重命名,上傳和下載文件,以及創建和刪除目錄,所有這些都是使用用戶名和密碼或用戶名和哈希組合。這是一個很好的例子,可以了解到如何在實際中使用impacket.smb
- getArch.py:此腳本將與目標(或目標列表)主機連接,並使用文檔化的msrpc功能收集由(ab)安裝的操作系統體系結構類型。
- rpcdump.py:此腳本將轉儲目標上注冊的RPC端點和字符串綁定列表。它還將嘗試將它們與已知端點列表進行匹配。
- ifmap.py:此腳本將綁定到目標的管理接口,以獲取接口ID列表。它將在另一個界面UUID列表上使用這個列表,嘗試綁定到每個接口並報告接口是否已列出或正在偵聽。
- opdump.py:這將綁定到給定的hostname:port和msrpc接口。然后,它嘗試依次調用前256個操作號中的每一個,並報告每個調用的結果。
- samrdump.py:從MSRPC套件與安全帳戶管理器遠程接口通信的應用程序中。它列出了通過此服務導出的系統用戶帳戶、可用資源共享和其他敏感信息
- services.py:此腳本可用於通過[MS-SCMR] MSRPC接口操作Windows服務。它支持啟動,停止,刪除,狀態,配置,列表,創建和更改。
- netview.py:獲取在遠程主機上打開的會話列表,並跟蹤這些會話在找到的主機上循環,並跟蹤從遠程服務器登錄/退出的用戶
- reg.py:通過[ms-rrp]msrpc接口遠程注冊表操作工具。其想法是提供與reg.exe Windows實用程序類似的功能。=
- lookupsid.py:通過[MS-LSAT] MSRPC接口的Windows SID暴力破解程序示例,旨在查找遠程用戶和組
MSSQL / TDS
- mssqlinstance.py:從目標主機中檢索MSSQL實例名稱。
- mssqlclient.py:MSSQL客戶端,支持SQL和Windows身份驗證(哈希)。它還支持TLS。
文件格式
- esentutl.py:Extensibe存儲引擎格式實現。它允許轉儲ESE數據庫的目錄,頁面和表(例如NTDS.dit)
- ntfs-read.py:NTFS格式實現。此腳本提供了一個用於瀏覽和提取NTFS卷的功能小的反彈shell,包括隱藏/鎖定的內容
- registry-read.py:Windwows注冊表文件格式實現。它允許解析脫機注冊表配置單元
其他
- GetADUsers.py:此腳本將收集有關域用戶及其相應電子郵件地址的數據。它還將包括有關上次登錄和上次密碼設置屬性的一些額外信息。
- mqtt_check.py:簡單的MQTT示例,旨在使用不同的登錄選項。可以很容易地轉換成帳戶/密碼暴力工具。
- rdp_check.py:[MS-RDPBCGR ]和[MS-CREDSSP]部分實現只是為了達到CredSSP身份驗證。此示例測試帳戶在目標主機上是否有效。
- sniff.py:簡單的數據包嗅探器,使用pcapy庫來監聽在指定接口上傳輸的包。
- sniffer.py:簡單的數據包嗅探器,它使用原始套接字來偵聽與指定協議相對應的傳輸中的數據包。
- ping.py:簡單的ICMP ping,它使用ICMP echo和echo-reply數據包來檢查主機的狀態。如果遠程主機已啟動,則應使用echo-reply數據包響應echo探針。
- ping6.py:簡單的IPv6 ICMP ping,它使用ICMP echo和echo-reply數據包來檢查主機的狀態。
源碼
- 您可以訪問https://github.com/SecureAuthCorp/impacket查看其源碼(開發版本)
- 0.9.19,2019年4月1日更新 - gzip'd tarball
- 0.9.18,2018年12月5日更新 - gzip'd tarball
- 0.9.17,更新於2018年5月30日 - gzip'd tarball
- 0.9.15,2016年6月28日更新 - gzip'd tarball
- 0.9.14,2016年1月7日更新 - gzip'd tarball,
- 0.9.13,2015年5月4日更新 - gzip'd tarball,
- 0.9.12,2014年7月20日更新 - gzip'd tarball,
- 0.9.11,2014年2月3日更新 - gzip'd tarball,
- 0.9.10,2013年5月6日更新 - gzip'd tarball,
- 0.9.9.9,更新於2012年7月20日 - gzip'd tarball, zip文件
- 0.9.6.0,更新於2006年5月23日 - gzip'd tarball
- 0.9.5.2,更新於2006年4月3日 - gzip'd tarball, zip文件
- 0.9.5.1,更新於2003年12月16日 - gzip'd tarball, zip文件
文檔
我們希望有更多可用的文檔,因此大多數文檔都作為Python的文檔注釋包含在源代碼中。您還可以通過其測試用例和示例了解很多關於庫功能的信息.