Java内存马查杀GUI工具
2023-4-5 20:3:27 Author: 猪猪谈安全(查看原文) 阅读量:15 收藏

项目地址

https://github.com/4ra1n/shell-analyzer

注意:请勿在生产环境使用,存在打崩业务的风险,目前适用于自己搭建靶机分析学习

介绍

关于Java Web内存马查杀的文章和工具已经有不少,不过大都不够完善,各有缺点;于是我做了一款GUI版本的实时内存马查杀工具,支持本地查杀与远程查杀;仅测试了Tomcat这一种中间件,不过理论上任何实现了Servlet规范的中间件都可以查杀

优势:

  • 实时监控目标JVM

  • 一键反编译分析代码

  • 一键查杀内存马

本地查杀演示视频:https://www.bilibili.com/video/BV1ZM411e7Rr

远程查杀演示视频:https://www.bilibili.com/video/BV1L24y1q7so

本工具的一些介绍:

原理

Agent动态Attach到目标后会开启一个端口(10032)监听:

  • 该端口会反序列化收到的数据,然后处理,我已经给反序列化设置了白名单进行保护

  • 启动Agent时会设置密码,如果客户端连接密码不匹配将无法获得数据

  • 为什么选择 10032 端口,因为这个数字代表一个

该端口用于实时接受指令并处理后返回数据,图中是部分指令(不完全)

支持一键查杀的内存马类型

类型类名方法名
Filterjavax.servlet.FilterdoFilter
Filterjavax.servlet.http.HttpFilterdoFilter
Servletjavax.servlet.Servletservice
Servletjavax.servlet.http.HttpServletdoGet
Servletjavax.servlet.http.HttpServletdoPost
Servletjavax.servlet.http.HttpServletdoHead
Servletjavax.servlet.http.HttpServletdoPut
Servletjavax.servlet.http.HttpServletdoDelete
Servletjavax.servlet.http.HttpServletdoTrace
Servletjavax.servlet.http.HttpServletdoOptions
Listenerjavax.servlet.ServletRequestListenerrequestDestroyed
Listenerjavax.servlet.ServletRequestListenerrequestInitialized
Valveorg.apache.catalina.Valveinvoke

本地使用

提供了三个jar文件:

  • agent.jar是核心文件,请保持与gui.jarremote.jar同目录

  • gui.jar是GUI客户端,本地和远程分析都需要

  • remote.jar用于远程分析,本地分析无需下载

注意使用JDK\bin\java.exe启动并添加tools.jarclasspath

Windows CMD 示例:

"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" -cp "C:\Program Files\Java\jdk1.8.0_131\lib\tools.jar;gui-0.1.jar" com.n1ar4.Application

Windows Powershell 示例:

& "C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" -cp "C:\Program Files\Java\jdk1.8.0_131\lib\tools.jar;gui-0.1.jar" com.n1ar4.Application

Linux (Ubuntu) 示例:

jdk1.8.0_202/bin/java -cp jdk1.8.0_202/lib/tools.jar:gui-0.1.jar com.n1ar4.Application

Mac OS 示例:

/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/bin/java -cp /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/tools.jar:gui-0.1.jar com.n1ar4.Application

(1) 第一步:检测进程并Attach

为了防止目标被恶意利用,需要输入一个密码

注意:尽管使用了密码保护,但还是存在拒绝服务等风险,请勿在生产环境使用,目前适用于自己搭建靶机分析学习

(2) 第二步:勾选并分析

点击刷新即可获得实时的数据

(3) 双击任意一个类即可Dump并反编译

(4) 复制类名过去即可修复内存马

远程连接

注意:请不要在真实环境/生产环境下使用,存在打崩业务的可能,目前适用于自己搭建靶机分析学习

仅测试了JDK版本为8的情况

客户端java -jar gui.jar即可

(因为不对本地分析,仅用于发送和接收socket数据,所以可以不将tools.jar加入classpath

服务端确保Tomcat端口和 10032 端口开放

可以手动将Oracle JDK 8传过去(没有测试过OpenJDK等版本)

可以前往 Oracle JDK 8 下载

scp /your-path/jdk-8u202-linux-x64.tar.gz [email protected]:/
ssh [email protected]
cd /
tar -zxvf jdk-8u202-linux-x64.tar.gz

下载并启动目标的Tomcat(测试使用)

cd /
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz --no-check-certificate
tar -zxvf apache-tomcat-9.0.71.tar.gz
export JAVA_HOME=/jdk1.8.0_202
./apache-tomcat-9.0.71/bin/startup.sh

上传agent.jarremote.jar

scp /your-path/agent.jar [email protected]:/agent.jar
scp /your-path/remote.jar [email protected]:/remote.jar

可以传过去一个内存马测试

scp /your-path/filter.jsp [email protected]:/apache-tomcat-9.0.71/webapps/ROOT/1.jsp

访问http://ip:port/1.jsp注入并测试http://ip:port?cmd=xxx

先使用jps拿到PID然后注入Agent

/jdk1.8.0_202/bin/jps
/jdk1.8.0_202/bin/java -cp /remote.jar:/jdk1.8.0_202/lib/tools.jar com.n1ar4.RemoteLoader [PID] [8位密码]

输出以下内容说明成功

attach pid: [PID]
password: [8位密码]
success

打开本工具,输入IP和上文的8位密码后,进行分析和查杀即可

 点击下方小卡片或扫描下方二维码观看更多技术文章

师傅们点赞、转发、在看就是最大的支持


文章来源: http://mp.weixin.qq.com/s?__biz=MzIyMDAwMjkzNg==&mid=2247508725&idx=1&sn=8284ae6055fa66eaa309cdc69f139a26&chksm=97d04de2a0a7c4f4c1a51df6f38f3af5df29d07f1129dbe8332c90b0f0a9209302c7ae3c9411#rd
如有侵权请联系:admin#unsafe.sh