对于我们之前学习的Tomcat内存马,只算是做了一些简单的实验,并未能够完全应用,只能通过文件上传jsp的方式来注入内存马,也是存在文件落地的现象的,并非真正的内存马
所以这篇文章,我们来学习利用反序列化来实现真正的内存马注入,本文会使用CC11链来进行内存马的注入,实现真正的无文件落地内存马,在使用 jsp 注入的时候由于 request 和 response 是 jsp 的内置对象,所以在回显问题上不用考虑,但是当我们结合反序列化进行注入的时候这些都成了需要考量的地方
回显技术
回显技术已经在之前的文章中说过,常用就分为以下几类:- 半通用Tomcat回显
- Tomcat低版本全局存储回显
- Tomcat高版本全局存储回显
反序列化注入内存马
低版本Tomcat注入内存马
来简单捋一下注入内存马的思路漏洞环境
这里使用WebApp项目,且使用低版本Tomcat这里我们写一个简单的Servlet,模拟存在反序列化的点
1 | package com.sermemshell; |
半通用回显
这里使用Tomcat半通用回显,具体内容看Java回显技术
1 | package com.EXP; |
内存马注入
这里以Filter内存马为示例,获取 request 和 response,将命令执行结果写入response
自写POC
跟着师傅的博客,自己翻阅着笔记,写出来这么一个东西T^T,对于搭建的漏洞环境,起码是可以注入了
1 | package com.EXP; |
拿来拿来
这里就借用DrunkBaby师傅的POC,还是DrunkBaby的全面,对于很多东西考虑感觉是我达不到的高度了
1 | package EXP; |
序列化数据生成
这里使用CC11的链子,这里我们只能使用动态加载字节码的方式来进行注入
我们使用CC11链子,分别生成半通用回显和内存马注入的两个存储着序列化数据的文件
1 | package com.EXP; |
反序列化注入
两者接注入即可,首先注入Tomcat半通用回显,其次注入Filter内存马



- 这一种反序列化注入内存马的方式,并且像shiro这种自带Filter的是无法打通的,如果使用shiro550打内存马,需要获取全局 response,并且根据Tomcat版本高低来打
内存马打Shiro550
通过全局存储 Response 回显来打
直接用KpLi0rn师傅的这个项目来打shiro内存马https://github.com/KpLi0rn/ShiroVulnEnv
首先通过注入tomcatHeader.ser来绕过长度限制
最后用tomcatInject.ser注入回显内存马
