內網滲透基石篇--域內橫向移動分析及防御
前言:你的自信是因為你沒見過世面,因為你沒有和真正的高手對決過。
一、簡介
域內橫向移動技術就是在復雜的內網攻擊中被廣泛使用的一種技術,尤其是在高級持續威脅中。攻擊者會利用該技術,以被攻陷的系統為跳板,訪問其他 域內主機,擴大資產范圍(包括跳板機器中的文檔和存儲的憑證,以及通過跳板機器連接的數據庫、域控制器或其他重要資產)。
1 常用windows 遠程連接和相關命令
在滲透測試中,拿到目標計算機的用戶明文密碼或者NTLM hash后,可以通過pth的方法,將散列值或明文密碼傳送到目標機器中進行驗證。與目標機器建立連接后,可以使用相關方法在遠程windows 操作系統中執行命令。在多層代理環境進 行滲透測試時,由于網絡條件比較差,無法使用圖形化界面連接主機。此時,可以使用命令行的方式連接主機(最好使用windows自帶的方法對遠程目標系統進行命令行下的操作)
IPC
IPC 共享”命名通道”的資源,是為了實現進程間通信而開發的命名通道。IPC可以通過驗證用戶名和密碼獲得權限,通常在遠程管理計算機和查看計算機的共享資源時使用。
通過ipc$,可以與目標機器建立連接。利用這個連接,不僅可以訪問,目錄機器中的文件,進行上傳,下載等操作,還可以在目標機器上運行其他命令,以獲取目標機器的目錄結構、用戶列表等信息。
首先,需要建立一個ipc$.
net use \\ 192.168.100.190\ipc$ “Aa123456@” /user:administrator

1.ipc$的利用條件
開啟了139、445端口
管理員開啟了默認共享
2.ipc$連接失敗的原因
用戶名或密碼錯誤
目標沒用有打開ipc$默認共享
不能成功連接目標的139、445端口
命令輸入錯誤
3.常見錯誤號
錯誤號5:拒絕訪問
錯誤號51:windows 無法找到網絡路徑,即網絡中存在的問題。
錯誤號53:找不到網絡路徑,包括ip地址錯誤、目標未開機、目標的lanmanserver服務未啟動、目標有防火墻。
錯誤號67:找不到網絡名,包括lanmanworkstation服務未啟動、IPc$已被刪除。
錯誤號1219:提供的憑據與已存在的憑據集沖突。
錯誤號1326:未知的用戶名或錯誤的密碼
錯誤號1792:試圖登錄,但是網絡登錄服務沒用啟動,包括目標NEtLogon服務未啟動
錯誤號2242: 此用戶的密碼已經過期。
2 使用windows自帶的工具獲取目標主機信息
1.dir命令
dir \\192.168.160.135\C$


查看遠程主機的C盤文件
2.tasklist命令
查看遠程主機上運行的進程
tasklist /S 192.168.160.135 /U HACKBIJI\Administrator /P W2ngluoanquan
3 計劃任務
1.at命令
at是windows自帶的用于創建計劃任務的命令,使用at命令可以在遠程目標上創建計劃任務,建立定時任務四部曲如下:
使用net time 命令確定遠程機器當前的系統時間
使用copy命令將payload文件復制到遠程目標機器中
使用at命令定時啟動該payload文件
刪除使用at命令創建計劃任務的記錄
(1)查看目標系統時間

(2)將文件復制到目標系統中

(3) 使用at創建計劃任務

(4)清除at記錄

2.schtasks命令
schtasks命令比at命令更加強大、靈活。創建計劃任務,該計劃任務在開機時啟動,運行c盤下的calc.bat批處理任務,運行權限是system。




二、 windows系統散列值獲取分析與防范
windows操作系統通常會對用戶的明文進行加密處理,在域環境下,用戶信息存儲在ntds.dit中,加密后為散列值。一般看到的都是這樣的結構:
username:rid:lm-hash:nt-hash
其中lm-hash已經廢棄了,那么黑客要破解的也就是nt-hash,要在windows系統中抓取nt-hash或者明文,必須要system權限。本地用戶名、散列值和其他安全驗證信息都保存在SAM文件中,本文講的是通過幾款不同的工具,分別從內存中(lsass.exe進程)讀取nt-hash或者密碼明文,最后給出了及時更新微軟官方推送的補丁等防范措施。
1 LM HASh 和NTLM HASH
2 單機密碼抓取與防范
1.GETPAss
下載下來,運行x64位的程序,直接獲得系統所有用戶的密碼,簡直不要太牛。不過,為啥運行后,字體都變成綠色的,這是說學黑客會變綠嗎?

2.PWnDUMP7
也是直接運行,稍微遜色一點點,只能拿到Hash,還需要通過彩虹表破解,或者留著以后通過哈希傳遞進行橫向滲透。
3.通過SAM和System文件抓取密碼
1.導出SAM和System文件
2.通關讀取SAM和System 文件獲得NTLMHash

1.使用mimikatz讀取SAM和Sytstem文件


2.使用CAin讀取SAM文件
4.使用mimikatz在線讀取SAM文件
mimikat是法國技術大神Benjamin Delpy使用C語言寫的一款輕量級系統調試工具,愛了愛了。該工具可以從內存中提取明文密碼、散列值、PIN和K8S票據,還可以執行哈希傳遞、票據傳遞、構建黃金黃金票據。輸入下面命令,直接拿到本地所有用戶的明文密碼,強大。
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

5.使用mimikatz離線讀取lsass.dmp文件
I.導出lsass.dmp文件
1.使用任務管理器導出lass.dmp文件
2.使用Procdump和lass.dmp文件
II.使用mimikatz導出lsass.dmp文件中的密碼散列值
6.使用powershell對散列值進行DUmp操作
7.使用Powershell遠程加載mimikatz抓取散列值和明文密碼
3.單機密碼抓取的防范方法
安裝微軟發布的KB2871997補丁
關閉Wdigest功能(Windows Server 2012版本以上默認關閉)
1.使用reg add命令
2.使用powershell
三、 使用hashcat獲取密碼
kali rolling自帶的密碼破解工具,支持破解windows密碼、linux密碼、office密碼、Wi-Fi密碼、mysql密碼、sql server密碼、以及md5、sha1、sha256等哈希散列~

原理
通常訪問一個UNC路徑時,如果沒有指定,Windows會自動用當前用戶的憑證進行NTLM認證,例如dir \\Target\aaa,由于Window會在lsass中緩存hash值,并使用它們進行認證,所以理論上在lsass中添加包含目標賬戶的hash的合法數據結構,就可以在使用類似于dir這些命令時用目標賬戶進行認證
攻擊方式
1.獲取一臺域主機高權限
2.利用mimikatz等工具導出密碼hash
3.用導出的hash嘗試登陸其他域主機
1.安裝Hashcat
(1)下載源碼編譯和安裝
(2)使用編譯好的二進制文件安裝
2.hashcat 的使用方法
(1)指定散列值的類型
(2)指定破解模式
(3)常用命令
-a 3 暴力破解(后面的?d?d?d?d?d?d表示6位數字,屬于暴力破解)
-m 0 說明需要破解的是MD5
hashcat -a 3 -m 0 --force e10adc3949ba59abbe56e057f20f883e ?d?d?d?d?d?d

2.批量爆破
把密碼放到文件中,這種破解叫做字典攻擊,相當于撞庫,只需要6秒,是不是快了一點點。把等待破解的密文放到文件中,可以實現批量破解。我的密碼很簡單:
a 0 字典模式(后面的pass.txt表示明文密碼文件,也就是需要撞的密碼庫)
-m 0 說明需要破解的是MD5
1.用hash值做字典

2.用密碼做字典

3.爆破
hashcat -a 0 -m 0 --force hash.txt pass.txt

4.得到密碼

3、 如何防范攻擊者抓取明文密碼和散列值
1.設置Active Directory 2012 R2 功能級別
2.安裝KB2871997
3.通過修改注冊表禁止在內存中存儲明文密碼
4.防御mimikatz攻擊
4. 哈希傳遞攻擊分析與防范
1. 哈希傳遞攻擊的概念
大多數滲透測試人員都聽說過哈希傳遞攻擊,該方法通過找到與賬戶相關的密碼散列值(通常是NTlm hash)來進行攻擊。在域環境中,用戶登錄計算機時使用的大都是域賬號,大量計算機在安裝使用相同的本地管理員賬戶和密碼,因此,如果計算機的本地管理員賬號和密碼也是相同的,攻擊者就能使用哈希傳遞攻擊的方法登錄內網中的其他計算機。
2 哈希傳遞攻擊分析
實驗1:使用NTLM Hash進行哈希傳遞
目標機器的環境(假定的受害者機器)
域信息:hacke.test
域內用戶:administrator
密碼:xxxxx(未知信息)
哈希:8c0a2bd6****790228ea(已知信息)
IP地址:192.168.1.2已知信息)
1.運行mimikatz,彈出cmd命令

2.彈出cmd命令框

3.dir看看是否連接

實驗2:使用AES-256密鑰進行哈希傳遞
實驗環境:遠程系統(必須安裝KB2871997)
域信息:hacke.test
域內用戶:administrator
密碼:xxxxx(未知信息)
哈希:8c0a2bd6****790228ea(已知信息)
IP地址:192.168.1.2已知信息)
實驗步驟:
1.mimikatz ‘’privilege::debug” “sekurlsa::ekeys”
2.在遠程機器,以管理員運行mimikatz
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:hacke.test/aes256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
注意事項:
dir后跟要使用的主機名,而不是ip地址。
除了aes-256密鑰,aes-128也可以哈希傳遞
如果安裝了KB2871997,仍然可以使用SID為500的用戶進行哈希傳遞
如果要使用mimikatz的哈希傳遞功能,需要具有本地管理員權限。
3 更新KB2871997補丁產生的影響
微軟 在2014年5月發布了KB2871997.該補丁禁止通過本地管理員權限與遠程計算機進行連接,其后果是,無法通過本地管理員權限對遠程計算機使用psExee,WMi,smbexec、schtasks、at,也無法訪問遠程主機的文件共享等。
四、票據傳遞攻擊分析與防范
要想使用mimikatz的哈希傳遞功能,必須具有本地管理員權限。mimikatz同樣提供了不需要本地管理員權限進行橫向滲透測試的方法,例如票據傳遞。
1. 使用mimikatz進行票據傳遞
使用橫向移動神器mimikatz可以將內存中的票據導出來,首先在目標機器上以管理員權限運行下面的命令,就可以直接導出一堆不同主機的票據信息(KIRBI文件),從中選擇一個目標系統自己的,移動到黑客機器上。(順便說一下,直接在黑客機器上也能拿到目標機器的票據~)
在目標機器上以管理員權限,輸入命令,獲得票據
將票據移動到黑客機器上




2 使用kekeo進行票據傳遞
kekeo也是一款開源的票據傳遞工具
kekeo需要指定域名、用戶名、NTLM哈希來生成票據
方法:通過kekeo.exe獲取域控權限,此工具并非每次都能成功利用。
需要擁有一個域賬號的賬號密碼明文
net group “domain controllers” /domain 獲取主域控地址
使用msf對其漏洞進行檢測,如果漏洞利用成功會生成一個bin文件
poc:use auxiliary/admin/kerberos/ms14_068_kerberos_checksum

上傳exp至臨時目錄
klist 列出票據
klist purge 清除票據

kekeo.exe “exploit::ms14068 /domain:yiwang.com /user:admin123 /password:admin@AAA… /ptt” “exit”
漏洞利用成功后成功訪問域控c$目錄

方法二、
防止以msf爆出神奇操作,以msf檢測漏洞為標準的情況所以…

3 如何防范票據傳遞攻擊
1,使用dir命令時,務必使用主機名。如果使用ip地址,就會導致錯誤。
2,票據文件注入內存的默認有效時間為10小時
3.在目標機器上不需要本地管理員權限即可進行票據傳遞
五、 PsExec的使用
1 PsTools 工具包中的PsExec


如果沒有提前建立好IPC$,PsExec也可以通過指定賬號和密碼的方式,進行遠程連接。
.\PsExec.exe \\192.168.160.135 -u HACKBIJI\ailx00 -p WoShi@Ailx10 cmd.exe
2 Metasploit中的psexec模塊
1.use exploit/windows/smb/psexec 模塊。

2.設置paylaod。

3.然后執行

六、 WMI的使用
1 基本命令



2 impacket工具包中的wmiexec
kali → windows server 2012 (成功)
獲取遠程windows系統的控制權
不需要輸入域信息
進入impacket目錄,先執行pip install .安裝依賴
然后就可以輕松拿到遠程windows server 2012系統的控制權了


3 weiexec.vbs
WMIEXEC支持兩種模式,一種是半交互式shell模式,另一種是執行單條命令模式。
WMIEXEC需要提供賬號密碼進行遠程連接,但是如果沒有破解出賬號密碼,也可以配合WCE的hash注入功能一起使用,先進行hash注入,然后再使用WMIEXEC即可。
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 username password
單個命令執行的模式
這個模式適用于只需要執行一個命令,或者說當前的環境不是交互式shell,沒法運行WMIEXEC的shell模式時(比如在webshell里面)。
原理:
整個過程是先調用WMI通過賬號密碼或者NTLM認證(WCE注入)連接到遠程計算機,然后如果提供了賬號密碼,則用這個賬號密碼建立一個到目標的IPC連接。隨后WMI會建立一個共享文件夾,用于遠程讀取命令執行結果。
當用戶輸入命令時,WMI創建進程執行該命令,然后把結果輸出到文件,這個文件位于之前創建的共享文件夾中。最后,通過FSO組件訪問遠程共享文件夾中的結果文件,將結果輸出。當結果讀取完成時,調用WMI執行命令刪除結果文件。最后當WMIEXEC退出時,刪除文件共享。
由于WMI只負責創建進程,沒有辦法可以判斷命令是否執行完畢,所以腳本采用的方法是延遲1200ms后讀取結果文件,但是如果命令執行的時間大于1200ms,比如systeminfo 或者ping之類的,這時候讀取結果文件會導致讀取的結果不完整,然后在刪除結果文件時會出錯。
4 invoke-WmiCommand
//目標系統名$User="pentest/administrator"http://目標系統密碼$Password=ConveetTo-SecureString-String "a123456#" -AsPlainText -Force//將賬號和密碼整合$Cred=New-Object -TypeName System.Management.Automation.PSCredential//遠程執行命令$Remote=Invoke-WmiCommand-Payload {ipconfig}-ComputerName 192.168.100.205//將執行結果輸出到屏幕上$Remote.PayLoadOutput
總結
本文主要從內網橫向移動出發,研究當拿下一臺主機之后如何使用一些工具來進行橫向移動,擴大攻擊范圍。中間介紹了一些腳本和工具的使用,還做了幾個實驗來理解這些工具,幫助大家學習。

精彩推薦




