java内存马连续剧——Servlet内存马
该分析servlet内存马的注册了,其实注册方式都大差不差,就是通过反射的方式生成web.xml的配置,然后添加到上下文中。
0x01 创建一个servletservlet是一个java程序,用于处理客户端(通常是Web浏览器)发起的请求并生成响应,
package Servlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class MyServlet extends HttpServlet { public void init() { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { S ...
java内存马连续剧——Listener内存马
0x01 什么是Listener内存马什么是Listener和 Filter 一样,监听器是 JavaWeb 三大组件之一。它是一个实现特定接口的java程序,这个程序用于监听web应用中的一些对象,信息的创建,添加,销毁等,然后针对于这些情况做出相应处理。总结来说,就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener的三大域对象监听器有三个域对象,指的是在监听器中可以访问的特定范围内的数据对象。分别为
ServletContext域对象——用于在整个 Java Web 应用程序中共享数据、资源和配置信息。
ServletRequest域对象——用于在一次 HTTP 请求处理期间共享数据和信息。
HttpSession域对象——用于在用户会话期间存储和共享数据,跨足够长的时间间隔保持信息状态。
根据不同域对象的功能,很明显 ServletRequest 类型是适合注入内存马的,我们注入一个有恶意代码的ServletRequest类型的监听器,当有HTTP请求处理时,注入的监听器就会发挥作用 ...
java内存马连续剧——Filter内存马
知识基础:
刚开始内存马的这块学习与反序列化并无太大关系,反而与javaweb,tomcat联系更加紧密。所以在学习内存马之前需要先了解JSP,java web的三大件,Servlet,Filter,Listener的基本知识和工作流程和Tomcat 架构的相关内容。
0x01 什么是Filter马内存马就是无文件木马,无文件落地,它通常会存在进程,内存或者java虚拟机中,特点更加隐蔽,难以排查,并且也难以删除。而今天学习的Filter内存马是传统web应用型内存马,主要将恶意代码注入到过滤器中,当过滤器拦截servlet请求的参数时,过滤器中的恶意代码就会执行。
0x02 环境搭建首先配置一个 servlet 的web项目,
然后一直点下一步就好了,它会自动帮我们生成一个简单的servlet
pom.xml中导入tomcat相关依赖
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina& ...
Evilbox打靶记录
靶场环境
局域网网段:192.168.19.0/24
攻击机 kali:192.168.19.130/24
目标机 Evilbox:192.168.47.132/24
打靶目标
拿下目标机器的root权限
信息收集首先用nmap扫描出目标机器的ip
然后探测这个目标机开放了什么服务
开放了80端口和22端口,那么先从web服务入手。
游览器访问就是一个apache的默认页面,啥东西都没有,那么只能扫扫目录了,用dirb扫一下
dirb http://192.168.19.132/
扫出来的东西挺少的,简单的信息收集完成
web渗透访问robots.txt也没什么信息,
爆破子目录那么只能把目标放在secret目录下,该目录下可能会存在php文件,还是爆破
dirb http://192.168.19.132/secret -X .php
果然有东西,有个php文件,
爆破参数值游览器访问是空白,这种情况下可能性太多,介于是靶场,会有接收输入的参数,那么接下来就用burp爆破参数名和输入,用burp自带的字典就可以
第一个参数选择服务 ...
Struts2-S2-001漏洞复现
0x01 Struts2简介Struts 2 是一个开源的 Java Web 应用程序开发框架,遵循MVC架构模式,用于构建基于 Java 技术的 Web 应用程序。它是 Apache Struts 框架的后续版本,旨在提供更现代、灵活和可扩展的方式来开发 Web 应用。Struts迭代至今已经出现很多版本,在这些版本中也存在许多RCE的漏洞。Struts 2也面临一个即将淘汰的局面。
0x02 Struts2环境搭建创建Maven项目,选择webapp
在pom.xml里导入 Struts2 的核心依赖
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.0.8</version></dependency>
然后修改web.xml,这里配置Struts2的过滤器
<web-app> <display-n ...
Log4j2 JNDI注入漏洞(CVE-2021-44228)
最近看一下Log4j2的这个比较出名的漏洞,相较于今天已经过去很久了。这个漏洞是21年十一二月份爆出来的洞,影响巨大,当时刚上大一,但是也有所耳闻。(一行代码让十几万程序员加班三天)近些年面试的时候也比较爱问这个,所以今天来分析一下一行代码是怎么能够命令执行的。
0x01 Log4j2简介log4j是Apache的一个开源项目,它一个用于记录日志信息的Java库,它提供了强大的日志记录功能,被广泛用于Java应用程序的日志管理。log4j2是log4j的升级版,旨在提供更强大、更灵活、更高效的日志记录功能。在java开发主流的框架中,比如springboot,大部分都是将log4j2作为日志管理工具。
Log4j2的基本开发使用不仅要知道log4j2是什么东西,也要知道它是怎么用的。
导入log4j2的相关依赖
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifac ...
2022蓝帽杯Ez_gadget题目分析
0x01 前言今天也来看一道关于fastjson的题目,不同于之前复现的题,蓝帽杯的这道更纯粹的考察fastjson的反序列化,而且是在开启AutoTypeSupport的情况下,题目难度也不是太高,但是也有很多需要学习的点。
0x02 题目分析主要就两个类
secret
生成十六位的随机字符串,定义了一个getter方法返回字符串。重点还是路由
JSONController
定义了一个跟路由,返回一个随机key。定义一个json路由,第一层if判断
if (str != null && Objects.hashCode(str) == secret.getKey().hashCode() && !secret.getKey().equals(str))
有点熟悉啊,有点神似php里的hash碰撞,但是不是一样的东西。这个if判断的意思就是两个不同字符串的hash值要相等,毋庸置疑,肯定是有的,问题是怎么找到,后面会讲。
第二个if就是一个黑名单,限制了用户的输入,它开启了AutoTypeSupport开关,最后就是pa ...
2023阿里云CTF-ezbean题目复现与分析
0x01 前言最近也不怎么想学习了,这道题的复现前天就开始了,一直鸽到了现在。感觉对fastjson还是不太熟,这道题复现完也不是很容易,里面有些细小的知识点还不太弄懂,先水一篇文章吧,后续再完善一下。
0x02 题目分析当时比赛后我直接把源码赋值粘贴在idea里,这样更好看。先看依赖
没啥特别的,就是1.2.60版本的fastjson
控制器中也只有一个路由,作为反序列化的入口点
另外重写了一个输入流的类,有黑名单的限制,这只是在传统的反序列化中做的限制,后面会说到。
另外还定义了一个javabean,代码就不全贴出来了,不过有一个getter方法值得我们注意
调用任意类的connect方法,这可以作为提示,也是突破口。
0x03 利用思路分析RMIconnetor类与JNDI注入前段时间看过二次反序列化,对这个类也不太陌生,它也可以二次反序列化,但是本题中不需要用到它的这个功能。跟进到它的connect方法来看一看
RMIconnetor#connect
我们需要走到这个findRMIServer方法里,就需要满足rmiServer为空,这个方法的参数是jmxSe ...
2023极客巅峰babyurl-初识二次反序列化
0x01 前言最近也不怎么看CTF了,主要是分析java和打一些渗透靶场,其实也没干多少事情。极客巅峰这个比赛本来我也是不知道的,也没有参加。比赛的时候组里的同学就发给我这一道java题,心想也算了解过一些java反序列化的东西,也没做过什么java反序列化的题目,就尝试一下吧。结果第一次听说二次反序列化,才有了下文。
0x02 题目分析附件就是一个jar包,用jd-gui也可以拖到idea反编译一下。是一个springboot框架,逻辑也比较简单,分析一下。
先看路由:
反序列化的入口点,只不过我们需要注意的是它使用的是自定义的输入流的类MyObjectInputStream。看看这个类实现了一个怎样的逻辑
重写了resolveClass方法,里面添加了一些黑名单,里面正好有题目中的两个模板类。
就是一个读文件的功能。再看两个模板类,它们都继承了Serializable接口
URLHelper
重写了readObject方法,看来入口类就是它了。调用了任意类的visitUrl方法,并把结果写进文件里。
URLVisiter
通过指定url访问其内部资源然后返回。代 ...
fastjson反序列化<=1.2.47绕过
0x01 前言上篇文章主要总结了fastjson在1.2.24版本的漏洞利用,在后续的版本中,fastjson做了一个漏洞的修复,导致原先的payload用不了了。本篇文章主要分析fastjson<=1.2.47版本下的绕过,重点分析在不开启AutoTypeSupport下的漏洞利用。
0x02 fastjson在1.2.25版本的修复我们可以先尝试打一下原来的payload
报错了,提示反序列化的类不支持,看一下它的源码是怎么修复的。
checkAutoType这里由原来的loadClass替换为checkAutoType函数,其实其他地方都大差不差,都是在这个checkAutoType函数中做了检测和限制。在后续高版本fastjson的修复也都是在这个函数中做进一步的优化。重点来分析一下checkAutoType函数内部的代码逻辑,直接看注释。
public Class<?> checkAutoType(String typeName, Class<?> expectClass) { if (typeName ...