前言
Apache Shiro的一些版本上存在一些高危代码执行漏洞,Apache Shiro提供的RememberMe字段,Shiro-550和Shiro-721(Apache Shiro Padding Oracle Attack)是常见的Shiro反序列化漏洞,Shiro-550的复现可以查看上一篇blog:https://blog.csdn.net/weixin_44283446/article/details/115622989?spm=1001.2014.3001.5501,网上现存有很多复现过程在真实情况下,会遇见一些突发问题,本文尽量梳理清楚整个过程,以及整个过程中会遇见的问题。(整个过程中,会有很多问题需要解决,网上的说明并没有很完整,blog暂时没有更完,之后有空再更上)
Shiro-721反序列化漏洞原理
在用户进行登录的时候,Apache Shiro提供RemenberMe功能,可以存储cookie,期间使用的是AES-128-CBC进行加密,可以通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的rememberMe字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行。
影响版本
- Apache < 1.4.2
环境搭建
环境说明
- Kali GNU/Linux
- Apache Shiro 1.4.1
- tomcat:8-jre8
环境搭建与漏洞复现
环境搭建
- 启动docker:
systemctl start docker
(如果没有docker,需要先安装docker,可以使用命令:sudo apt update
和apt install docker.io
两条命令进行安装) - 利用docker获取dockerfile
git clone https://github.com/3ndz/Shiro-721.git
(此处如果没有git,需要使用命令yum install git
先安装一下git)
进入Shiro-721 Docker的当前目录:cd Shiro-721/Docker
使用当前目录的 Dockerfile 创建镜像:docker build -t shiro-721 .
(不要忘记最后这个“.”点,官方参考:https://docs.docker.com/engine/reference/commandline/build/,blog参考:https://my.oschina.net/mythss/blog/3009856)
创建一个新的容器:docker run -p 8080:8080 -d shiro-721
(-p
指定将主机的8080端口映射到容器的8080端口,-d
表示在后台运行容器,并返回容器ID) - 查看是否搭建成功:
docker ps
(图示是已成功创建Shiro-721搭建成功)
- 打开kali的firefox,访问
127.0.0.1:8080
,出现此页面即可:
- Docker安装Tomcat:(此处如果想要详细了解可以参考:https://www.runoob.com/docker/docker-install-tomcat.html)
先查看Tomcat的可用版本:docker search tomcat
拉取官方的镜像docker pull tomcat
:(此处如果报no space left on device
错误,是因为kali的磁盘空间不足)
docker run -p 8080:8080 tomcat:latest
(将主机的8080端口映射到容器的8080端口,tomcat:latest
是指最新版本,此处需要先使用命令docker stop CONTAINER ID/NAMES
关闭之前开启的8080端口,CONTAINER ID和NAMES可以通过docker ps -a
查看,此处如果依旧不成功,可以使用docker run -it -d -p 8080:8080 tomcat:latest
命令进行尝试)
将编译完成获取到的 samples-web-1.4.1.war 包( samples/target/中)拷贝到 Tomcat 的 webapps 目录下:docker cp samples-web-1.4.1.war 0e9:/usr/local/tomcat/webapps/
(0e9是Docker的CONTAINER ID的前三个字符,/usr/local/tomcat/webapps/
是docker中tomcat里webapps的路径,可以使用docker exec -it caf286ee1bf5 bash
查看一下)
上述如果没有出现问题,打开firefox,输入:http://localhost:8080/samples-web-1.4.1/login.jsp
,出现以下画面:
漏洞复现
- 开启抓包
打开Burp Suite,开启抓包:
然后给firefox设置代理(选择add-ons):
然后在搜索框搜索找到这个FoxyProxy Standard
:
点击后添加(add):
在firefox的右上角找到,选择Options,进入之后,点击“Add”:
添加IP和端口(端口设的8081,前面已经占用了8080),点击Save:
开启代理:
- 开始抓包
登录测试账户root,密码是secret,选择Remember Me
,点击Login
:
抓取cookie:点击Forword
,然后出现Set-Cookie
- 安装Maven环境
使用java利用cookie生成Payload,此处需要安装下一步所需环境Maven:
远程下载Maven包:wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压到/usr/local目录下:tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local
修改配置文件:
vi /etc/profile
在profile文件中设置环境变量:
export MAVEN_HOME=/usr/local/apache-maven-3.6.3 export PATH=$MAVEN_HOME/bin:$PATH
让/etc/profile文件修改后立即生效:source /etc/profile
,在控制台输入命令mvn -v
,如果能看到 Maven 相关版本信息,则说明 Maven 已经安装成功(参考:https://www.runoob.com/maven/maven-setup.html):
添加阿里镜像库地址:
打开配置文件:vim /usr/local/apache-maven-3.6.3/conf/setting.xml
打开后,找到mirrors节点,添加以下内容:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
如图所示:
4. 使用Java反序列化工具 ysoserial
拷贝一个 Git 仓库到本地(git clone
命令可以简单参考学习一下:https://www.runoob.com/git/git-clone.html):git clone https://github.com/frohoff/ysoserial.git
持续更新…
参考
https://github.com/inspiringz/Shiro-721
https://blog.csdn.net/qq_43645782/article/details/106060334
https://www.cnblogs.com/backlion/p/14077791.html