初识内存马
Lwwww Lv2

最近备赛 天津的CISCN长城杯线下。疯狂刷玄机靶场的应急响应,但是做的很粗糙,基本上就是对着wp过一遍,很多东西来不及消化和吸收,但是也是对应急响应逐渐熟悉起来了,以前一直不太清楚应急响应是啥 之前还感觉跟取证是一块内容哈哈。

玄机打完前七章了,也没抽空写wp,但是也不打算写了 Peterpan.exe师傅的wp我就是写质量也不如他写得好 所以干脆不写了 疯狂推荐Peterpan.exe的玄机wp虽然已经推荐过了。

第八章涉及到java内存马 虽说是排查但是必然是要了解一下的 感觉是一块大内容所以打算专门抽空学习一下这个内容,感觉以后不可避免的绕不开。

应急响应——全类型JAVA内存马排查

言归正传:

内存马是啥

内存马,也被称为无文件马,是无文件攻击的一种常用手段。内存马是无文件攻击的一种技术手段,那我们不得不先简单介绍一下无文件攻击。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShell,Windows Management Instrumentation(WMI)和PsExec等。无文件攻击技术允许攻击者访问系统,从而启用后续的恶意活动。通过操纵漏洞利用程序、合法工具、宏和脚本,攻击者可以破坏系统、提升特权或在网络上横向传播恶意代码。而且,无文件威胁在执行后不会留下任何痕迹,这使其难以被检测和清除。

Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。而内存攻击者正是利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位置,从而劫持软件控制流、执行流,转而执行外部输入的指令代码,造成目标系统被获取远程控制,让内存马的攻击得以实现。

webshell的变迁过程大致如下所述:

web服务器管理页面——> 大马——>小马拉大马——>一句话木马——>加密一句话木马——>加密内存马

image

[!TIP]

背景知识

javaweb的三大件:Servlet Filter Listener

Servlet

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
请求的处理过程:

客户端发起一个http请求,比如get类型。

Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。

Servlet容器调用HttpServlet的init()方法,init方法只在第一次请求的时候被调用。

Servlet容器调用service()方法。

service()方法根据请求类型,这里是get类型,分别调用doGet或者doPost方法,这里调用doGet方法。

doXXX方法中是我们自己写的业务逻辑。

业务逻辑处理完成之后,返回给Servlet容器,然后容器将结果返回给客户端。

容器关闭时候,会调用destory方法

Servlet和JSP的关系?

JSP(全称Java Server Pages)
JSP经过转换编译以后还是会变成Servlet,支持前
端语法。
View:JSP,负责内容显示
Controller:Servlet,负责处理请求

Servlet和Tomcat的关系
Tomcat里面有Servlet容器(引擎)
Tomcat可以提供HTTP访问
Tomcat可以把HTTP请求转换为HttpServletRequest对象,并调用doGet/doPost,并且把HttpServletResponse转换为HTTP响应内容
Filter

filter也称之为过滤器,是对Servlet技术的一个强补充,其主要功能是在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest ,根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据;在HttpServletResponse到达客户端之前,拦截HttpServletResponse ,根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
过程:
1、Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的。

2、当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改。

3、当 Servlet 容器开始调用某个 Servlet 程序时,如果发现已经注册了一个 Filter 程序来对该 Servlet 进行拦截,那么容器不再直接调用 Servlet 的 service 方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法决定是否去激活 service 方法。

4、但在 Filter.doFilter 方法中不能直接调用 Servlet 的 service 方法,而是调用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象时通过 Filter.doFilter 方法的参数传递进来的。

5、只要在 Filter.doFilter 方法中调用 FilterChain.doFilter 方法的语句前后增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。

6、如果在 Filter.doFilter 方法中没有调用 FilterChain.doFilter 方法,则目标 Servlet 的 service 方法不会被执行,这样通过 Filter 就可以阻止某些非法的访问请求。

Listener

JavaWeb开发中的监听器(Listener)就是Application、Session和Request三大对象创建、销毁或者往其中添加、修改、删除属性时自动执行代码的功能组件。

ServletContextListener:对Servlet上下文的创建和销毁进行监听;
ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和替换;

HttpSessionListener:对Session的创建和销毁进行监听。Session的销毁有两种情况,一个中Session超时,还有一种是通过调用Session对象的invalidate()方法使session失效。

HttpSessionAttributeListener:对Session对象中属性的添加、删除和替换进行监听;

ServletRequestListener:对请求对象的初始化和销毁进行监听;
ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。

用途

可以使用监听器监听客户端的请求、服务端的操作等。通过监听器,可以自动出发一些动作,比如监听在线的用户数量,统计网站访问量、网站访问监控等。

内存马应用理解

想要接管web应用的处理逻辑,其实就是两种方法,一种是直接篡改他,一种是顺着他利用其自己的一些特性去接管他;就是如下两种方法:

  • 研究如何去修改jvm里面的web应用一些处理逻辑类的实现,从而实现修改web应用的处理逻辑;

  • 顺着web应用来,利用web应用自身的可拓展性,比如其一些服务组件可以动态的增添的特性来实现接管web应用对请求的处理逻辑;

同时这里我们也可以看出第一种方法的处理范围一定程度上肯定是比第二种大的,但是这里并不是包含关系,一个是对类的实现篡改,一个是添加;

首先我们要了解排查的原理,对于这类的内存马,是通过添加一些组件实现的,每种组件都有一个父类,我们可以遍历jvm里面的所有类,找到继承了上面三种公共父类的类或者是实现的公共接口,又或者是找到这些类的其他公共特征,然后输出类名及路径开展排查,一般来说比较简单粗暴的排查方法可以借助内存马的性质来做,即观察本地是否存在相关类文件落地,没有就是重点怀疑对象;

(学不明白 java底子不好 不太能理解 我觉得先当脚本小子去,也是应了题目了 初时java内存马哈哈)

 给亮汪汪买点狗粮吧⋆⋅☆(✪Ω✪)☆⋅⋆
Powered by Hexo & Theme Keep
Total words 19.5k Unique Visitor Page View