java-memshell检测

前提

在攻防演练中,之前主流的是使用webshell,像冰蝎、哥斯拉、蚁剑等自带的shell等,但随着安全产品如ids、ips、cwpp等对shell的研究大多都可以识别出来,无文件攻击手法的出现绕过了这种检测手法并逐渐受攻击队青睐,同时随着冰蝎、哥斯拉等工具支持一键注入内存马的简易是内存马攻击变得更加简单。主要内存马类型可以分为

动态注册servlet、fliter、listeren型(使用servlet-api具体实现)

动态注册controller、interceptor(拦截器型)型(spring框架类、tomcat的valve类型)

java agent技术(字节码增强型)

关于内存马的具体内容可以阅读下面的一些文章

内存马分析(转载) - anoldcat - 博客园 (cnblogs.com)

LandGrey's Blog

手搓Filter内存马从构造到利用讲解(内存马系列篇一) - FreeBuf网络安全行业门户

检测memshell

对于如何检测memshell在不使用安全产品的基础上可以使用以下几种工具

1 arthas

arthas是阿里开源的一款java诊断工具,可以通过使用arthas来查看jvm中的类。运行arthas,如果有多个java进程需要选择attch 对应的进程

jsp 编译过后的类名末尾都会带上 jsp 后缀使用sc *_jsp*

sc *_jsp$*

常用客户端连接工具的 webshell ,会 在 webshell 落地文件内创建内部类,而内部类是通过 $ 标识的 ;下面三个是冰蝎、哥斯拉、蚁剑工具产生的类

wsMemShell 产生的类

servlet、listeren、filter三种类型内存马产生的类

查看对应类的内容可以使用jad命令

jad --source-only org.apache.jsp.shell6_jsp$U

jad编译wsmemshell注入的类

 jad --source-only org.apache.jsp.wscmd_jsp$cmdEndpoint

 jad --source-only org.apache.jsp.listern_jsp$ListenerDemo

通过对于内存马的处置方式是重启服务,其他还有kill 恶意类、清除恶意代码; arthas 提供了redefine 、retransform 机制,可以通过arthas对 jvm 中的类进行替换。

2 copagent

copagent 是基于arthas的java内存马提取工具

直接执行copagent,等待一会会把结果输出并存储到/root/.copagent/result.txt

输出内容会列出类,并按照高危、低危、正常进行显示,信息中还保存反编译的java文件,可以查看对应类的java源码进行进一步人工判断或在线webshell分析等webshell查杀工具

 wsmemshell注入cop没检测出来,识别出来的类等级是正常

动态注册servlet、listener、filter类识别出来高危。(java-memshell-scanner项目注册的类也被识别出高危)

 

allLoadedClasses.txt 按照加载顺序展示出 jvm 加载的所有类,可以根据加载时间,定位某时间后加载的所有类。

3 java-memshell-scanner

java-memshell-scanner一个jsp 脚本,识别 filter 、servlet 型内存马,将jsp文件放到web目录访问对应

参考

Java-webshell 排查 - 沉云 - 博客园 (cnblogs.com)

posted @ 2023-08-01 22:54  axing的星空  阅读(292)  评论(0编辑  收藏  举报