
Crystal Palace लाइब्रेरी Threadpool के माध्यम से Nt API कॉल्स को प्रॉक्सी करने के लिए। कॉल गैजेट्स के लिए अपडेट किया गया।
यह https://github.com/AlmondOffSec/LibTPLoadLib का एक सामान्यीकरण है ताकि किसी भी मनमानी संख्या (वास्तव में अधिकतम 11, पर्याप्त है) तर्कों वाले APIs को प्रॉक्सी किया जा सके। इसे Crystal Palace shared library के रूप में प्रदान किया गया है। API को @rasta-mouse के LibTP के साथ संगत बनाया गया है ताकि spec files का उपयोग करके आसानी से स्विच किया जा सके। नवीनतम Crystal Palace सुविधाओं को दिखाने के लिए Hooks प्रदान किए गए हैं।
चेतावनी ⚠️ : यह प्रोजेक्ट जैसा है वैसा उपयोग योग्य नहीं है। मैं कोई मॉड्यूल उपलब्ध नहीं करा रहा जिसमें call gadget मिल सके। आपको अपना खुद का खोजना होगा। अधिक जानकारी के लिए ब्लॉगपोस्ट पढ़ें।
नोट : 11 तर्कों को पास करने की क्षमता के कारण (जिनमें से 7 स्टैक पर रखे जाएँगे), call gadget को पर्याप्त बड़े stack frame वाले फ़ंक्शन के भीतर स्थित होना चाहिए। कम से कम 0x68 के add rsp की तलाश करें।
चेतावनी ⚠️ : इस तकनीक की आंतरिक कार्यप्रणाली के कारण, प्रॉक्सी किए गए फ़ंक्शन का रिटर्न वैल्यू प्राप्त करना संभव नहीं है। NTAPIs को प्रॉक्सी करना आम तौर पर अधिक उपयोगी होता है, क्योंकि उनका रिटर्न वैल्यू "केवल" NTSTATUS होता है। इससे यह जानना मुश्किल हो जाता है कि फ़ंक्शन वास्तव में सफल हुआ या नहीं 🙃।
टारगेट पर उपलब्ध किसी मॉड्यूल में एक कार्यशील gadget खोजें। src/tp_gadget.c में, LoadLibraryA कॉल और GetCallGadgetAddress फ़ंक्शन में इसका नाम पैच करें ताकि यह उसका पता प्राप्त कर सके। यदि आवश्यक हो तो assembly stub को भी पैच करें (sub rsp value, वह register जिसे gadget कॉल करेगा)।
प्रोजेक्ट कंपाइल करें: make। आउटपुट Crystal Palace shared library libtp_gadget.x64.zip है।
उदाहरण COFF कंपाइल करें (जो केवल wininet.dll लोड करेगा, फिर स्थानीय रूप से shellcode आवंटित करेगा और निष्पादित करेगा): make -C example_print। आउटपुट एक COFF फ़ाइल example_print.x64.o होगी।
एक Crystal Palace spec file बनाएं जो linker को DFR पर हमारे hooks का उपयोग करने का निर्देश दे: Tradecraft Garden के Simple PIC spec file का उपयोग करें, और 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"
PIC shellcode बनाने के लिए Crystal Palace का उपयोग करके पूरी चीज़ लिंक करें: path/to/crystalpalace/link simplepic_modified/loader.spec example_print/example_print.x64.o out.bin।
किसी भी loader का उपयोग करके shellcode चलाएँ।