Macos Office攻防
转载请注明出处:https://youngrichog.github.io/
(本文还没有写完,施工中👷♀️👷)
描述
最近看了看Macos下的攻防视角都有什么,之前的话有做过AppleScript,在mac <10.15还是屡试不爽的,舒服至极。但是针对于>10.15版本,好像自己没有什么积累,索性就开始研究研究,主要涉及到SYLK利用、权限维持、沙箱跳出等。
什么是SYLK?
SYLK 代表 SYmbolic LinkK,一种于 1980 年代引入的文件格式。通常,SYLK 文件的文件扩展名为 .slk。SYLK 是一种仅使用可显示的 ANSI 字符的文件格式,创建它是为了在应用程序(例如电子表格和数据库)之间交换数据。
尽管是一种古老的文件格式,但文件扩展名 .slk 在最新的 MS Office 版本(在 2010、2013 、2016和2019)仍然默认映射到 Excel。
说说SYLK的优点?
SYLK 格式吸引攻击者的一个重要原因是:受保护的视图沙箱不适用于这种文件格式。这意味着,如果武器化 SYLK 文件是通过电子邮件或 Web 传送的,并且应用了Web 标记标记,则目标用户不会被此警告消息打扰。
此外,扩展名为 .slk 的 SYLK 文件具有以下特征。
- SYLK 不包括在MS Outlook 阻止的附件列表中。
- SYLK 不包括在默认的 OWA 阻止扩展列表中。
- SYLK 在Chrome 的安全浏览文件类型列表中未标记为危险。
嗯,的确是一个武器化的理想选择。简单点说SYLK就是一个old school,可以兼容新版Office,并且不在大众的视野里。
SYLK利用
xxxx.slk
1 | ID;P |
沙箱跳出
这部分我主要关注了2个版本的office:2016和2019,貌似现在2016也用的很少了,2016和2019沙箱的跳出姿势也有不同。相同点是可以将~$开头的文件写到沙箱以外的其他目录,可以看出这样开头的文件是office的临时文件。当然从另一个角度看,我们还可以结合一些软件本身的机制挖掘沙箱跳出,例如某些软件在启动的时候、定期会从某些特定目录拉取文件进行执行,另外我在YY一个思路,如同Windows下的DLL劫持,Macos上也是有的。
2016版本与2019版本对比
补图
2016版本对LaunchAgents是具有写权限的,在2019版本已经被patch掉了
2016沙箱跳出姿势:
- 直接写~$xxxxx.plist到LaunchAgents启动项
- 利用LoginItems登陆项
2019沙箱跳出姿势:
- 利用LoginItems登陆项
直接写~$xxxxx.plist到LaunchAgents启动项,这里就不多提了,附一个plist
1 |
|
利用LoginItems登陆项进行沙箱跳出,等目标下次重新登陆的时候触发。
添加全局登陆项(kLSSharedFileListGlobalLoginItems):
1 | function loginitems(params){ |
给当前用户添加登陆项(kLSSharedFileListSessionLoginItems):
1 | function loginitem() { |
利用LoginItems登陆项做沙箱跳出,如果直接指定某二进制文件,
测试数据
附一些自己的测试数据,如果从提高成功来看,分为:低系统版本+office或高系统版本+低office版本
系统版本 | office版本 | 安全设置(自行) | 安全设置(默认) | 结果 |
---|---|---|---|---|
10.14.5 | 16.18(181014) | 成功 | ||
10.12.4 | 16.30(19101301) | 禁用所有宏,并且不通知 | 成功 | |
10.14.5 | 16.37(20051002) | 失败 | ||
10.14.5 | 16.39(20071300) | 失败 | ||
10.14.5 | 16.46(21021202) | 失败 | ||
10.14.5 | 16.48(21041102) | 失败 | ||
10.15.5 | 16.48(21041102) | 失败 | ||
10.15.7 | 16.48(21041102) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.15.7 | 16.48(21041102) | 禁用所有宏,并且不通知 | 失败 | |
10.15.7 | 16.42(20101102) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.15.7 | 16.42(20101102) | 禁用所有宏,并且不通知 | 失败 | |
10.15.7 | 16.18(181208) | 禁用所有宏,并且不通知 | 成功 | |
10.15.7 | 16.18(181208) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.30(19101301) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.30(19101301) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.29(19090802) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.29(19090802) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.27(19071500) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.27(19071500) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.24(19041401) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.24(19041401) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.22(190211) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.22(190211) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.20(181208) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.20(181208) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.19(181109) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.19(181109) | 禁用所有宏,并且不通知 | 成功 | |
10.12.6 | 16.18(181014) | 禁用所有宏,并发出通知 | 会弹宏,点击启用成功弹出 | |
10.12.6 | 16.18(181014) | 禁用所有宏,并且不通知 | 成功 |
office安装的其他情况:
16.48不支持10.12.6,支持10.14.0往后版本
16.39不支持10.12.6,支持10.13.0往后版本
16.34不支持10.12.6,支持10.13.0往后版本
16.32不支持10.12.6,支持10.13.0往后版本
遇到的问题
在Macos10.14.5通过LSSharedFileListInsertItemURL实现LoginItems登陆项异常退出,目前还没有找到原因 :-(
Tips
1.利用宏进行钓鱼攻击,高版本office都会运行在沙盒中,所以我们要考虑沙箱跳出
2.office沙箱环境目录:/Users/Current User/Library/Containers/com.microsoft.Excel/Data/,其中拿Excel举例
3.office临时文件目录,echo $TMPDIR,每当打开excel文件或其他,都会有对应临时文件
4.钓鱼姿势,适用于各类Macos钓鱼场景,当时在绕过AppleScript显示app为后缀,在macos10.15后,失效了一部分姿势,例如:Mac在键盘处加入Unicode,然后输入的时候用option+Unicode编号就可以了,例如d为option + 217e 使用Unicode可以绕过文件显示app的情况。重点来了在高版本的macos,可以这样绕过:1.pdf..app 显示1.pdf.
Respect
https://outflank.nl/blog/2019/10/30/abusing-the-sylk-file-format/