什么是内存马
Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意
代码,不会有文件落地,给检测带来巨大难度。
python内存马
利用flask框架中存在的ssti注入来实现内存修改的,具体是通过flask框架存在应用模板渲染过程的render_template_string()函数,在进行渲染但未对用户传输的代码进行过滤导致用户可以通过注入恶意代码来实现python内存马的注入。
1.中间件注入
中间件是位于 Web 服务器与 Web 应用程序之间的一层软件,用于对请求和响应进行处理和转换。
典型工作流程如下:
- 请求进入:客户端请求 → 服务器接收 → 中间件1 → 中间件2 → … → 路由处理
- 响应返回:路由处理结果 → … → 中间件2 → 中间件1 → 客户端响应
中间件注入需要能够在目标应用中执行任意代码,这样才能插入恶意的中间件。所以,攻击的前提是存在一个允许执行任意代码的漏洞,比如远程代码执行(RCE)、反序列化漏洞,或者应用存在文件上传漏洞导致恶意代码执行等
java
背景知识
Servlet
Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户。客户端发起一个http请求,比如get类型。
Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。
Filter
filter也称之为过滤器,是对Servlet技术的一个强补充,其主要功能是在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest ,根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据;在HttpServletResponse到达客户端之前,拦截HttpServletResponse ,根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
Listener
JavaWeb开发中的监听器(Listener)就是Application、Session和Request三大对象创建、销毁或者往其中添加、修改、删除属性时自动执行代码的功能组件。