前言
随着近几年国内关于攻防比赛、HW的重视度越来越高,攻击队的权限维持手段越来越高明.从一开始的文件落地webshell
,到今天基于Filter
和Servlet
的内存马,真可谓是百花齐放.
Filter内存马&Servlet内存马
Java
世界中内存马无非就两种——Filter
和Servlet
.Filter
翻译为拦截器,配合内存马技术Filter
可以让任何不存在的路径变为一个webshell
,就算是配合流量设备也很难察觉异样.因为大部分流量设备的默认规则只会当做错误日志处理.而基于Servlet
的内存马一般需要攻击者指定一个固定路径来访问生效.
以下展示两种内存马.
可以看出攻击者利用一个get参数控制想要变更的命令
可以看出攻击者利用一个设定的路由配合一个header
参数控制想要变更的命令
原因在于Filter
中提供一个doFilter
方法,在该方法中存在一个内置类ServletRequest
,该类派生的对象含有一个getParameter
方法可用来作为外部传参使用.
而在Servlet
中提供的则是service
方法,在该方法中同样存在一个内置类,只不过该类是HttpServletRequest
.该类派生的对象含有一个getHeader
方法可用来作为外部传参使用.
查杀方法
查杀方法需要借用到一款工具——VisualVM
.我们使用这款工具时需要在应急的tomcat上提前配置好JMX访问.
在catalina.sh
/catalina.bat
中找到
# ----- Execute The Requested Command -----------------------------------------
字段
在其下方加入该tomcat局域网地址或者公网地址配置示例(加入哪一种网段根据情况而定)
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=局域网或公网IP -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=监听端口(推荐19999) -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
随后启动VisualVM
安装一个插件并激活
随后找到本地的tomcat或者远程tomcat
进入Mbean选项卡即可
对于Filter
内存马和Servlet
内存马都可以在Catalina-Filter
/Servlet
节点找到一些踪迹
以下为一个正常的Filter
/Servlet
监控情况
以下为有攻击痕迹的Filter
/Servlet
监控情况
鸣谢
感谢Ntears提供的技术支持
Reference
tomcat结合shiro无文件webshell的技术研究以及检测方法:
https://www.t00ls.net/thread-56828-1-1.html
VisualVM:
https://visualvm.github.io/download.html