
مكتبة Crystal Palace لوساطة استدعاءات Nt API عبر Threadpool. تم تحديثها من أجل call gadgets.
هذا تعميم لـ https://github.com/AlmondOffSec/LibTPLoadLib لتوكيل واجهات APIs بعدد اختياري من الوسائط (11 كحد أقصى في الواقع، لكنه كافٍ). يُقدَّم كمكتبة Crystal Palace مشتركة. الواجهة البرمجية جُعلت متوافقة مع LibTP الخاص بـ @rasta-mouse لسهولة التبديل باستخدام ملفات spec. تم توفير خطافات لإبراز أحدث مزايا Crystal Palace.
تحذير ⚠️ : هذا المشروع غير قابل للاستخدام كما هو. لا أقدم وحدة يمكن العثور فيها على call gadget. سيتعين عليك العثور على gadget خاص بك. اقرأ منشور المدونة لمزيد من المعلومات.
ملاحظة : نظرًا للقدرة على تمرير 11 وسيطًا (سيتم وضع 7 منها على المكدس)، يجب أن يقع call gadget داخل دالة بإطار مكدس كبير بما يكفي. ابحث عن add rsp بقيمة لا تقل عن 0x68.
تحذير ⚠️ : نظرًا للآلية الداخلية لهذه التقنية، لا يمكن استرجاع القيمة المُرجَعة من الدالة المُوكَّلة. عادةً ما يكون توكيل NTAPIs أكثر قابلية للاستخدام، لأن قيمتها المُرجَعة هي NTSTATUS "فقط". لكن هذا يجعل من الصعب معرفة ما إذا كانت الدالة قد نجحت فعليًا 🙃.
ابحث عن gadget يعمل في وحدة متاحة على الهدف. في src/tp_gadget.c، عدّل اسمها في استدعاء LoadLibraryA والدالة GetCallGadgetAddress لجعلها تسترجع عنوانها. عدّل كعب التجميع إذا لزم الأمر (قيمة sub rsp، السجل الذي سيستدعيه gadget).
قم بترجمة المشروع: make. الناتج هو مكتبة Crystal Palace المشتركة libtp_gadget.x64.zip.
قم بترجمة COFF الخاص بالمثال (والذي سيقوم فقط بتحميل wininet.dll ثم تخصيص ذاكرة محليًا وتنفيذ shellcode): make -C example_print. سيكون الناتج ملف COFF باسم example_print.x64.o.
أنشئ ملف spec لـ Crystal Palace يوجّه الرابط لاستخدام خطافاتنا على DFR: استخدم ملف spec الخاص بـ Simple PIC من Tradecraft Garden، وأضف الأسطر التالية بين mergelib "../libtcg.x64.zip" و export:
mergelib "../libtp_gadget.x64.zip"
attach "KERNEL32$LoadLibraryA" "H_LoadLibraryA"
optout "ProxyNtApi" "H_LoadLibraryA"
attach "NTDLL$NtOpenProcess" "H_NtOpenProcess"
attach "NTDLL$NtAllocateVirtualMemory" "H_NtAllocateVirtualMemory"
attach "NTDLL$NtWriteVirtualMemory" "H_NtWriteVirtualMemory"
attach "NTDLL$NtProtectVirtualMemory" "H_NtProtectVirtualMemory"
attach "NTDLL$NtFreeVirtualMemory" "H_NtFreeVirtualMemory"
attach "NTDLL$NtClose" "H_NtClose"
attach "NTDLL$NtCreateThreadEx" "H_NtCreateThreadEx"
attach "NTDLL$NtOpenThread" "H_NtOpenThread"
attach "NTDLL$NtSuspendThread" "H_NtSuspendThread"
attach "NTDLL$NtResumeThread" "H_NtResumeThread"
attach "NTDLL$NtGetContextThread" "H_NtGetContextThread"
attach "NTDLL$NtSetContextThread" "H_NtSetContextThread"
attach "NTDLL$NtWaitForSingleObject" "H_NtWaitForSingleObject"
اربط كل شيء باستخدام Crystal Palace لإنشاء shellcode بصيغة PIC: path/to/crystalpalace/link simplepic_modified/loader.spec example_print/example_print.x64.o out.bin.
شغّل الـ shellcode باستخدام أي loader.