En

Hacking Team Mac OSX 64位 Shellcode 技术分析

作者:riusksk公布时间:2015-07-16阅读次数:78234评论:1

分享

在此次泄露的Flash 0Day的利用代码都包含针对Mac OSX 64位系统的利用,以往在网上看到的大多是windows平台32/64位的利用代码,很少有Mac版的flash利用代码曝光,刚好可以借机分析学习下军用级武器的写法。

 

【源码分析】

 

下面以第1HackingTeam泄露的CVE-2015-5119Flash 0day 漏洞中的利用代码为例:

 

1、内在中暴力搜索Mach-o文件头magic标记0xfeedfacf(类似搜索windows平台下的PEMZ标记),它代表64位程序的意思,也是MacOS X上可执行文件的开头。

 


 

可以用otool或者MachOView查看Mach-o可执行文件格式:

 


 

2、在Mach-o文件头之后是加载命令(LoadCommand)区域,接下来程序搜索用于映射文件中的段到进程内存空间的LC_SEGMENT_64加载命令,遍历每个被加载的段,找到包含段标记为S_SYMBOL_STUBS(代表包含符号信息) S_ATTR_PURE_INSTRUCTIONS (代表包含机器码)的段,然后获取段地址Address、偏移量OffsetSizeStubs SizeStubs数量以及Indirect Sym Index(间接符号表索引值)。

 


 


 


 

3、找到_LINKEDIT 段,从中获取相应的虚拟地址和文件偏移,然后互减得到两者之间的偏移量。

 


 

4、获取LC_SYMTAB加载命令的相关信息,该命令用于指定文件所使用的符号表,找到后分别获取符号表偏移量、符号数、字符串表偏移量、字符串表大小

 


 


 

5、获取LC_DYSYMTAB加载命令的相关信息,该命令用于指定动态链接库所使用的符号表,找到后获取间接符号表偏移量

 


 


 

6、将前面获取的符号表地址、间接符号表地址和字符串表地址分别加上第3步获取的偏移量

 



 

7、从前面获取的3个值,去字符串表中索引mprotect函数,找到其对应的内存地址,以利用它去真正的shellcode部分赋予可执行权限(这部分与Windows平台上的代码基本一致),以绕过DEP的保护。

 


 

8、前面都是为执行接下来x64 shellcode代码而作的准备,由于vfork所创建的子进程与父进程共享数据,因此可用于检测是否位于沙盒中,若在沙盒中vfrok会执行失效,进而退出执行。

 


 

9、通过为syscall指定调用号来调用execve函数,以执行"/Applications/Calulator.app/Contents/MacOS/Calculator”打开计算器,然后再调用exit退出子进程。

 


 

10、设置返回值为int atom类型,左移3位是为了对最后3 bits 清零,因为它代表着atom类型,再加6是为了设置为int atom类型,因为shellcode相当于自定义函数,它是用于替换payloadJIT函数去执行的,最后弹出栈数据,以维持栈平衡。

 


 



 

【总结】

 

       此次的Mac OSX 64位平台的利用,主要还是先根据Maco-o文件头标记找到flash模块,然后去索引符号表、间接符号表和字符串表,进而找到mprotect函数的地址,将shellcode内存块设置为可执行权限。真正用于弹出计算器的shellcode代码相对比较简单,向syscall传递调用号来执行execve函数,进而打开指定的程序文件Calculator,实现最终的任意代码执行。

 


 

评论留言

提交评论 您输入的漏洞名称有误,请重新输入