Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
Log in
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
elfpack — ELF बाइनरी सेक्शन डॉकिंग टूलकिट स्टेजलेस पेलोड वितरण के लिए, जो कस्टम ELF सेक्शन मैनिपुलेशन के माध्यम से इन-फील्ड पेलोड अटैचमेंट, सिग्नेचर एवेज़न और स्टैटिक/डायनामिक लोडिंग प्रतिरोध को सक्षम बनाता है। | Kitploit
उपकरण/GitHubGitHub/dsnezhkov/elfpack
पेलोड जनरेशनशोषणमालवेयर विश्लेषणपेनिट्रेशन टेस्टिंगबाइनरी विश्लेषणरेड टीमिंगपेलोड डेवलपमेंट
GitHubdsnezhkov/elfpack

elfpack

ELF बाइनरी सेक्शन डॉकिंग टूलकिट स्टेजलेस पेलोड वितरण के लिए, जो कस्टम ELF सेक्शन मैनिपुलेशन के माध्यम से इन-फील्ड पेलोड अटैचमेंट, सिग्नेचर एवेज़न और स्टैटिक/डायनामिक लोडिंग प्रतिरोध को सक्षम बनाता है।

रिपॉजिटरी देखें
5110134 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

ElfPack: स्टेजलेस पेलोड डिलीवरी के लिए ELF बाइनरी सेक्शन डॉकिंग

मुख्य बातें

  • पेलोड बंडलिंग तंत्र का अवलोकन: संकलन, लिंकिंग और लोडिंग।
  • बाइनरी संगतता और उनके डिलीवरी तंत्र से ढीले युग्मित पेलोड का निर्माण।
  • सेक्शन का स्वचालित मेमोरी लोडिंग से बचाव।
  • संरचित सेक्शन प्रकारों का उपयोग।
  • ELF सेक्शन के माध्यम से फ़ील्ड में पेलोड (पुनः) लोडर से जोड़ना। अपना पेलोड लाएं।
  • अलग किए गए प्रीकंपाइल्ड ELF सेक्शन के साथ हस्ताक्षर चोरी।
  • पेलोड जनरेशन पाइपलाइन के साथ ड्राइव-बाय पेलोड अटैचमेंट।
  • फ़ैट पेलोड बाइनरी का निर्माण और बाइनरी पैकर्स से बचने का मामला।
  • जटिल पेलोड को पैक करना।
  • पेलोड ऑबफ़स्केशन और कुंजी सुरक्षा विकल्प।
  • स्थैतिक और गतिशील पेलोड लोडिंग ट्रेसिंग प्रतिरोध। बिनवॉक और eBPF।

पेलोड को एम्बेड करना

संकलन और लिंकिंग के साथ हेक्स-बाइनरी समावेशन

  1. सीधे डिफ़ॉल्ट डेटा सेक्शन या टेक्स्ट में: सामान्यतः, कंपाइलर अपने द्वारा उत्पन्न ऑब्जेक्ट्स को .data जैसे सेक्शन में रखता है।

payload.h:

const data[3432] = {
    0x43, 0x28, 0x41, 0x11, 0xa3, 0xff,
    ...
    0x00, 0xff, 0x23 
};

मैन्युअल रूप से या bin2c या xxd -i payload.bin > payload.h जैसे टूल्स के साथ आगे हेडर समावेशन के साथ प्राप्त किया जाता है।

पेलोड को सामान्य रूप से .text और .data में संग्रहीत करना भी एक बुरा विचार है, क्योंकि लोडिंग ट्रेसिंग और निष्पादन के लिए डेटा लोड करने के व्यवहारिक अर्थशास्त्र की जांच आसान हो जाती है।

  1. एक अलग सेक्शन में। आप पेलोड डेटा को अतिरिक्त सेक्शन में रख सकते हैं, या आप चाहते हैं कि कुछ विशेष चर विशेष सेक्शन में दिखाई दें। यह कंपाइलर-निर्भर तंत्र से प्राप्त होता है। gcc में, यह __attribute__ के माध्यम से किया जाता है। यह थोड़ा बेहतर है लेकिन फिर भी अच्छी तरह से ट्रेस करने योग्य है क्योंकि ELF कैसे बनाया और लोड किया जाता है।
char stack[10000] __attribute__ ((section ("binstack"))) = { 
    0x43, 0x28, 0x41, 0x11, 0xa3, 0xff,
    ...
    0x00, 0xff, 0x23 };
int init_data __attribute__ ((section ("bindata"))) = 0;

main()
{
    /* Initialize stack pointer */
    init_sp (stack + sizeof (stack));

    /* Initialize initialized data */
    memcpy (&init_data, &data, &edata - &data);
}
  1. लिंकर बाइनरी समावेशन

असेंबलर-निर्भर .incbin-जैसी निर्देश एक सेक्शन बना सकती है और एक पेलोड एम्बेड कर सकती है। उदाहरण: gcc -c payload.s या ld -r -b payload.bin -o payload.o

.section .bindata

.global payload_start
.type payload_start, @object

.section .binddata
.balign 64

payload_start:
    .incbin "payload.bin"
    .balign 1
payload_end:
    .byte 0

लोडर में आगे पुनर्प्राप्ति के साथ:

int main(void) {
    extern uint8_t payload_start;
    uint8_t *ptrPayload = &payload_start;
    ...
}

नोट: हम payload.bin में एक पूरी तरह से कार्यात्मक ELF शामिल कर सकते हैं, जो महत्वपूर्ण है जब "फ़ैट" बाइनरी बनाने की बात आती है, जिसमें कई टूलकिट के तत्व होते हैं।

नोट: कार्य को पूरा करने के लिए अधिक एर्गोनोमिक टूल मौजूद हैं, जैसे @graphitemaster से INCBIN [link]

इसी विषय पर एक भिन्नता इनलाइन ASM है:

/* Raw image data for all embedded images */
 #undef EMBED
 #define EMBED( _index, _path, _name )                                   \
         extern char embedded_image_ ## _index ## _data[];               \
         extern char embedded_image_ ## _index ## _len[];                \
         __asm__ ( ".section \".rodata\", \"a\", " PROGBITS "\n\t"       \
                   "\nembedded_image_" #_index "_data:\n\t"              \
                   ".incbin \"" _path "\"\n\t"                           \
                   "\nembedded_image_" #_index "_end:\n\t"               \
                   ".equ embedded_image_" #_index "_len, "               \
                         "( embedded_image_" #_index "_end - "           \
                         "  embedded_image_" #_index "_data )\n\t"       \
                   ".previous\n\t" );
 EMBED_ALL
 
 /* Image structures for all embedded images */
 #undef EMBED
 #define EMBED( _index, _path, _name ) {                                 \
         .refcnt = REF_INIT ( ref_no_free ),                             \
         .name = _name,                                                  \
         .data = ( userptr_t ) ( embedded_image_ ## _index ## _data ),   \
         .len = ( size_t ) embedded_image_ ## _index ## _len,            \
 },
 static struct image embedded_images[] = {
         EMBED_ALL
 };
 

नोट: सेक्शन की परिभाषा में PROGBITS पर ध्यान दें, यह महत्वपूर्ण होगा।

कंपाइलर/लिंकर-आधारित पेलोड बाइनरी समावेशन आदर्श नहीं है

इसमें व्यापार-नापसंद हैं:

  • एम्बेडिंग की प्रक्रिया पेलोड लोडर के निर्माण से कसकर युग्मित होती है।
  • पेलोड प्रारूप में बदलाव के बारे में क्या?
  • डिफ़ॉल्ट रूप से डेटा ले जाने वाले सेक्शन पर PROGBITS फ़्लैग सेट होते हैं, और यह OS लोडर द्वारा डिफ़ॉल्ट रूप से मेमोरी में PT_LOAD’ed होगा। हम यह नहीं चाह सकते।

एक सेक्शन का ELF डिस्क/मेमोरी प्रतिनिधित्व

ELF PROGBITS आरेख

सेक्शन का प्रकार और नए सेक्शन पर सेट किए गए फ़्लैग यह निर्धारित करते हैं कि OS लोडर निष्पादन योग्य लॉन्च होने पर इसे मेमोरी में लोड करता है या नहीं। कुछ सेक्शन स्वचालित रूप से लोड होते हैं, अन्य नहीं (जैसे .symtab, .strtab)

आक्रामक के रूप में, हम इससे क्या दक्षताएँ प्राप्त कर सकते हैं?

पेलोड एम्बेड करना: दूसरा प्रयास

  1. हम उन सेक्शन पर फ़्लैग सेट करने से बच सकते हैं जो मेमोरी में डिफ़ॉल्ट लोडिंग मानते हैं।

  2. हम एक अलग प्रकार के सेक्शन का उपयोग कर सकते हैं जो मेमोरी में लोड नहीं होता।

एक विक्रेता या सिस्टम इंजीनियर को किसी ऑब्जेक्ट फ़ाइल को विशेष जानकारी से चिह्नित करने की आवश्यकता हो सकती है जिसे अन्य प्रोग्राम अनुरूपता या संगतता के लिए जांच सकते हैं। SHT_NOTE प्रकार के सेक्शन और PT_NOTE प्रकार के प्रोग्राम हेडर तत्व इस उद्देश्य के लिए उपयोग किए जा सकते हैं।

बाद के मामले में, हम सिस्टम बाइनरी में इस प्रकार के सेक्शन का उपयोग देख सकते हैं:

$ readelf --sections /bin/tar | grep NOTE
  [ 2] .note.gnu.bu[...] NOTE             00000000000002c4  000002c4
  [ 3] .note.ABI-tag     NOTE             00000000000002e8  000002e8

और उनकी सामग्री का निरीक्षण कर सकते हैं:

$ readelf -p .note.ABI-tag /bin/tar

String dump of section '.note.ABI-tag':
  [     c]  GNU

SHT_NOTE सेक्शन बनाने का अंतिम परिणाम ELF में इस प्रकार दिखेगा: SHT_NOTE

बोनस: SHT_NOTE हमें संरचना देता है यदि हमें इसका उपयोग करने की आवश्यकता है (और हम आगे इसका उपयोग करेंगे):

SHT_NOTE संरचना

ELF सेक्शन डॉकिंग

अब तक हम एक सेक्शन बनाने, OS लोडर द्वारा इसे मेमोरी में लोड होने से बचाने में सक्षम थे। सेक्शन फिलहाल ELF छवि में प्रभावी रूप से निष्क्रिय है। हम चर्चा करेंगे कि इसे थोड़ी देर बाद कैसे लोड किया जाए। हालाँकि, एक अधिक दबाव वाला प्रश्न यह है कि हम अभी भी कंपाइलर और लिंकर स्तर पर काम कर रहे हैं, और सेक्शन एक ऑब्जेक्ट है जो अंतिम ELF की संरचना में बुना जाता है, जो लोडर कोड से संबंध और मेमोरी पते बनाता है जो इसकी सामग्री को संदर्भित करता है।

ELF सेक्शन ऑब्जेक्ट

क्या होगा यदि हम एक एम्बेडेड पेलोड के साथ एक ELF सेक्शन को लोडर संकलन वर्कफ़्लो के बाहर बना सकें, और बाद में उस सेक्शन को लोडर बाइनरी से जोड़ सकें? यह लोडर कोड और सेक्शन इंटरैक्शन के बीच संबंध को तोड़ देगा। फिर हम लोडर को सिखाएंगे कि अपने विदेशी डेटा सेक्शन को कैसे खोजें और लोड करें, प्रभावी रूप से एक लोडर में एक पेलोड को ढीले युग्मित तरीके से "डॉक" करना।

अवधारणात्मक रूप से, हमारे लक्ष्य होंगे:

  • लोडर पेलोड अर्थशास्त्र में उलझा नहीं होना चाहिए।
  • पेलोड को लोड करना और निष्पादित करना:
    • बिना लोडर कोड को बिल्कुल संशोधित किए?
    • बिना OS लोडर ld.so (ELF लोडर) का उपयोग किए, जो पेलोड के सेगमेंट को स्वचालित रूप से मेमोरी में लोड करता है।
  • फ़ील्ड में पेलोड (पुनः) अटैचमेंट।

लोडर/पेलोड (सेक्शन में) संबंध अब इस प्रकार दिखेगा:

टूल डाउनलोड करें