
x86_64/x86 Linux प्रणालियों पर ELF ऑब्जेक्ट्स को पूरी तरह से मेमोरी में लोड और रन करता है, स्टील्थी पोस्ट-एक्सप्लॉइटेशन कमांड निष्पादन के लिए रनटाइम पर libc प्रतीकों को हल करता है।
यह एक ELF ऑब्जेक्ट इन-मेमोरी लोडर/रनर है। लक्ष्य एक एकल elf लोडर बनाना है जिसका उपयोग सभी x86_64 और x86 nix ऑपरेटिंग सिस्टमों पर अनुवर्ती क्षमताओं को चलाने के लिए किया जा सके।
इस लोडर के काम करने का तरीका यह है कि इसमें उस OS के लिए ELF ऑब्जेक्ट बनाने और लोड करने के लिए आवश्यक सभी कोड मौजूद होते हैं जिसके लिए इसे संकलित किया गया है। इसके पास जो कुछ भी भेजा जाता है, यदि वह elf फ़ाइल नहीं है, सही आर्किटेक्चर के लिए नहीं है, या यदि वह किसी ऐसी चीज़ से लिंक करता है जिसे हल नहीं किया जा सकता, तो यह चलाने का प्रयास किए बिना बाहर निकल जाता है।
COFFLoader और इसके बीच एक मुख्य अंतर यह है कि यह उपयोग किए जाने वाले प्रत्येक फ़ंक्शन को फिर से परिभाषित करने के बजाय OS की libc से मानक परिभाषाओं का उपयोग करता है।
.
├── includes
│ ├── beacon_api.h
│ ├── beacon_compatibility.h
│ ├── debug.h
│ ├── ELFLoader.h
│ └── minimal_elf.h
├── Makefile
├── README.md
├── SA
│ └── src
│ ├── cat.c
│ ├── chmod.c
│ ├── env.c
│ ├── find.c
│ ├── grep.c
│ ├── id.c
│ ├── ifconfig.c
│ ├── pwd.c
│ ├── tasklist.c
│ ├── uname.c
│ ├── walk.c
│ └── whoami.c
├── Scripts
│ └── beacon_generate.py
├── src
│ ├── beacon_compatibility.c
│ └── ELFLoader.c
└── testobjects
├── getuid.c
├── test2.c
├── test2_duplicatetext.c
└── test.c
6 directories, 26 files
पाई गई फ़ाइलों को cat करने के लिए जनरेट करें, जो find /etc/ -iname *release -exec cat {} \; या cat /etc/*release* का विकल्प है।
Beacon>reset
Beacon>addString /etc
Beacon>addString release
Beacon>addString
Beacon>addint 1
Beacon>addint 1
Beacon>addint 1
Beacon>generate
b'26000000050000002f657463000800000072656c65617365000100000000010000000100000001000000'
./ELFLoader.out ./SA/src/find.o 26000000050000002f657463000800000072656c65617365000100000000010000000100000001000000
/proc में rwx मेमोरी अनुमतियों वाली सभी फ़ाइलों को सूचीबद्ध करने के लिए जनरेट करें।
Beacon>reset
Beacon>addString /proc
Beacon>addString rwx
Beacon>addString maps
Beacon>addint 1
Beacon>addint 0
Beacon>addint 0
Beacon>generate
b'27000000060000002f70726f63000400000072777800050000006d61707300010000000000000000000000'
./ELFLoader.out ./SA/src/grep.o 27000000060000002f70726f63000400000072777800050000006d61707300010000000000000000000000
chmod 777 /tmp/test.sh के लिए तर्क जनरेट करें।
Beacon>reset
Beacon>addString 777
Beacon>addString /tmp/test.sh
Beacon>generate
b'1900000004000000373737000d0000002f746d702f746573742e736800'
./ELFLoader.out ./SA/src/chmod.o 1900000004000000373737000d0000002f746d702f746573742e736800
यह सामान्य उदाहरण है जो कोई तर्क नहीं लेता है।
./ELFLoader.out SA/src/uname.o
make x86_64so
make x86_64runner
LD_LIBRARY_PATH=. ./runner.out ./SA/src/env.o