目标:1. 掌握内存马的注入、利用原理 2. 掌握常见内存马类型的注入方式 3. 掌握内存马的查杀思路和工具使用
工具准备
jdk 1.8.0_74/jdk-11.0.11
《143-Win10配置JDK8,启动BP.docx》
maven 3.6.3
《159-IDEA配置Maven.docx》
tomcat 8.5.72(端口8080会和Bp冲突)
IDEA 2022.3.3
《158-IDEA安装和破解.docx》
Burp Suite 2021+
Behinder_v4.0.6(冰蝎)
工程描述:演示Servlet基本功能和相关类型
的内存马,部署到tomcat中运行。
(注意修改端口号避免冲突)
工程描述:演示Spring Controller内存马注入,
部署到tomcat运行。
Spring的配置文件:applicationContext.xml
SpringMVC的配置文件:dispatcherServlet.xml
web工程的配置文件:web.xml
TestController提供了几个接口。
ApiController是一个正常接口,用来演示隐藏马
工程描述:servlet+shiro的web工程。shiro版本
1.2.4。部署到tomcat运行。
里面包含了shiro的反序列化漏洞。
工程描述:这里面包含了恶意的代码
1、需要注入的内存马。
2、包含把内存马序列化、加密、base64编码的
工具。与shirodemo配套使用。
工程描述:用来演示agent类型的内存马。多
module的工程。
用到:
1、AgentDemo:演示Java Agent的基本使用
2、TargetApp:演示被注入的工程。与上述工程
配套使用。
工程描述:冰蝎作者提供的注入tomcat的agent
内存马,只要tomcat启动就可以在本机注入
作用:专门用来上传(写入)文件
文件名:xiaoma.jsp
描述:指定路径、内容,可以写入木马到任意路
径
启动ServletJspProject工程
请求:http://localhost:8076/upload/xiaoma.jsp
作用:丰富的网站管理功能
文件名:dama.jsp
访问密码:password
启动ServletJspProject工程
访问地址:http://localhost:8076/upload/dama.jsp
作用:执行操作系统命令
文件名:shell.jsp
访问密码:password
启动ServletJspProject工程
访问地址:http://localhost:8076/upload/shell.jsp?pwd=admin&cmd=whoami
作用:执行操作系统命令
文件名:behinder.jsp
程序:Behinder_v4.0.6
连接密码:rebeyond
启动ServletJspProject工程
http://localhost:8076/upload/behinder.jsp
https://github.com/tennc/webshell
传统webshell防御措施:
1、终端:文件监控
2、后门:流量监控
3、网络:禁止外连
1、获取上下文环境Context对象
2、调用Context的方法,动态添加对象
// 获取到applicationcontextFacade
ServletContext servletContext = request.getServletContext();
// 利用反射获取ApplicationContext对象
Field fieldApplicationContext = servletContext.getClass().getDeclaredField("context");
//使私有可获取
fieldApplicationContext.setAccessible(true);
// 获取到ApplicationContext对象
ApplicationContext applicationContext = (ApplicationContext) fieldApplicationContext.get(servletContext);
//利用反射获取StandardContext对象
Field fieldStandardContext = applicationContext.getClass().getDeclaredField("context");
//使私有可获取
fieldStandardContext.setAccessible(true);
//获取到StandardContext对象
StandardContext standardContext = (StandardContext ) fieldStandardContext.get(applicationContext );
http://c.biancheng.net/servlet2/what-is-servlet.html
Servlet——Spring(MVC)——Spring Boot
DispatcherServlet
开发
JSP(全称Java Server Pages)
JSP经过转换编译以后还是会变成Servlet,支持前
端语法。
View:JSP,负责内容显示
Controller:Servlet,负责处理请求
过滤器,过滤请求、过滤响应
案例演示:http://localhost:8076/upload.jsp
类型 | 触发事件 | 说明 |
---|---|---|
ServletContext监听器 | 服务器的启动跟停止时触发 | Context就是Tomcat容器 |
Session 监听器 | 浏览器第一次连接、浏览器关闭时触发 | 不同的浏览器是不同的Session |
Request监听器 | 访问服务时触发 | Request就是一个请求,存在于请求和响应之间。服务器响应完,Request就销毁了。 |
Listener应用举例
内存马分类
Spring普通马演示
Spring劫持(隐形)马演示
Java Agent技术应用场景
Java Agent两种运行方式
Java Agent开发
AgentDemo工程
AgentEntry类:premain方法、agentmain方法
Transformer类:实现ClassFileTransformer接口
打包命令:mvn assembly:assembly
注意AgentTest类打包之前不能放进去,否则会报错,缺tools.jar包
Java Agent演示
Java Agent注入tomcat内存马演示
总结
内存马注入方式
shiro反序列化注入内存马演示
《反序列化渗透与防御NO.719》章节5:04-shiro反序列化漏洞
1、工程:shirodemo运行
配置tomcat8、JDK8启动
*注意:修改server.xml(可以发包修改)
maxPostSize=“-1” maxHttpHeaderSize=“102400” 2、工程:shiroattack,运行ClientMemshell.java
浏览器抓登录包,头字段增加rememberMe=
3、访问
http://localhost:8096/shiro/login.jsp?cmd=whoami
内存马处理
1、重启
2、文件查杀
3、漏洞检测和修复
文件查杀
河马webshell查杀 HmSetup.exe
内存马检测思路
思路:
1、通过Java应用的接口,获取tomcat JVM里面加载的
类
2、遍历所有类,判断是否为风险类
1)内存注册,但是磁盘没有文件
2)class文件里面包含恶意内容
java-memshell-scanner
java-memshell-scanner
不支持低版本tomcat
代码解读:https://mp.weixin.qq.com/s/pY7yFVNIbX1z41nGvoMGBg
工程:shirodemo运行/ServletJspProject
http://localhost:8096/shiro/scanner.jsp
利用Tomcat API删除添加的组件
升级版:https://github.com/xyy-ws/NoAgent-memshell-scanner
https://tttang.com/archive/1390/
Filter classLoader | Filter class file path |
---|---|
com.sun.org.apache.xalan.internal.xsltc. | |
trax.Templateslmpl$TransletClassLoader | 在磁盘上没有对应的class文件,可能是内存马 |
sa-jdi
1、获取进程号:jps -l
2、启动sa-jdi
java -cp .\sa-jdi.jar sun.jvm.hotspot.HSDB
可以查看JVM中所有已加载的类
shell-analyzer
基于JDK11运行 https://github.com/4ra1n/shell-analyzer
其他工具
1、cop.jar
https://github.com/LandGrey/copagent
2、Arthas
https://github.com/alibaba/arthas
3、shellpub 河马内存马查杀