JNI 绕过RASP
在学习RASP的时候,其中有一种绕过RASP的方法是,使用JNI,让Java调用底层C语言,从而绕过危险函数的Hook检查 JNI(Java Native Interface),其作用是让Java程序可以去调用C语言的程序,Java的实现是基于C语言实现的,在很多底层方法中,我们也经常能看到一些 n…
ARTICLE INDEX
篇研究记录,按年份分组、发布时间倒序排列。使用分类与标签继续缩小技术范围。
在学习RASP的时候,其中有一种绕过RASP的方法是,使用JNI,让Java调用底层C语言,从而绕过危险函数的Hook检查 JNI(Java Native Interface),其作用是让Java程序可以去调用C语言的程序,Java的实现是基于C语言实现的,在很多底层方法中,我们也经常能看到一些 n…
今天简单学习一下JSP木马的免杀思路,学习文章如下: zhuanlan.zhihu.com 现在对于大部分的检测来说,大部分还是基于特征检测为主的,jsp中常见的关键特征:loadClass、ClassLoader、newInstance、invoke、defineClass,Runtime等等。…
TongWeb 是东方通(Beijing Tongtech Co., Ltd.)自主研发的企业级应用服务器,全面支持 Java EE(现 Jakarta EE)标准,兼容主流开发框架,广泛应用于金融、电信、政府、能源等关键行业的信息化和数字化转型。TongWeb 具备高性能、高可用、分布式和集群部署…
在EL表达式中,想要进行命令执行,只需要一下一行表达式即可 1 ${java.lang.Runtime.getRuntime().exec( "calc" );} 这句表达式作用相当于jsp的一句话木马,但是只是能做到检测和盲打,在一些不出网的情况下,我们没办法进行反弹shell,不方便于EL表达式…
在看代码审计知识星球时,学到了一种新的XXE的利用方式:Error Based XXE,一般在无回显的情况下使用 先来说报错XXE的前提条件:目标服务器开启了报错(报错XXE当然要报错了) 漏洞环境: github.com 首先贴出来Error Based XXE的Poc 1 2 3 4 5 6 <…
这个特性在CTF比赛中好像挺常见的,之前打ctf的时候遇到过 toUpperCase 是javascript中将小写转换成大写的函数。 toLowerCase 是javascript中将大写转换成小写的函数 用ai来写一个fuzz脚本,看一看哪些字符在经过 toUpperCase 转换后,是大写字母…
前两天看到geoserver出来个新的xxe漏洞,就去看了一下,突然想去看看在java中的xxe除了http和file协议,还能利用什么协议,就找到了篇文章,学了一个小trick 文章链接: 1oecho.github.io jar协议URL格式: jar:<url>!/{entry} ,其中 <u…
闲来无事,来复现一下华夏ERP的历史漏洞,之前在知识星球中看到过这个系统的鉴权绕过的文章 感觉是很小的一套系统了,之前审计的代码有的太大了 github链接:[github.com 下载好后配置好数据库,导入sql文件启动即可,很简单 这套系统是SpringBoot框架,上来先看pom.xml文件,…
GGeoServer 是一个开源的地理信息服务器,用于发布和共享地理空间数据。它是由 GeoTools 库驱动的,GeoTools 是一个用于处理地理数据的 Java 库。GeoServer 允许用户从各种数据源(如 Shapefile、PostGIS、Oracle Spatial、ArcSDE 等…
Nacos 是一个由阿里巴巴开源的动态服务发现、配置管理和服务管理平台,它帮助开发者更轻松地构建、交付和管理微服务应用,实现了服务的注册发现、健康监测以及动态配置管理,让微服务架构中的服务治理与配置更新变得更加高效和灵活。 1 2 3 4 app="nacos" && port="8848" ico…
前面学习Hessian反序列化时,发现只有Rome反序列化这一条链是我学习过的,现在来补一补没有学过的链子 该链依赖于 spring-aop 和 aspectjweaver 两个包,在pom.xml文件中导入以下依赖 或者在springboot的 spring-boot-starter-aop 中自…
最近来学习一下Hessian反序列化,感觉这个组件也是非常常见的,看了看感觉有点类似于RMI的远程方法调用,但是触发点并不是 readObject 了,变成了 hashCode/equals/compareTo 其中之一 Hessian 是一种基于二进制的轻量级网络传输协议,用于在不同的应用程序之间…
在《Java安全share》星球中,jsjcw师傅给出了 在高版本JDK下的spring原生链 POC,当时就想去研究一下这条链子,可惜其中有很多知识点我都没有接触过,所以这条链子的学习周期拉的长了一些 新建一个JAVA项目,JDK版本为17 向pom.xml文件中导入如下依赖 1 2 3 4 5…
最近在分析《高版本JDKSpring原生反序列化链》时,其中有一个知识点为《JACKSON链的不稳定性》,前来学习一下(有个很奇怪很奇怪的事情,为什么我的Jackson链子十分的稳定, outputProperties 总是第一名……初步猜测为本人电脑环境问题) 在调用该Jackson链,调用任意类…
最近爆出来一个《高版本JDK下的Spring原生反序列化链》,本来想着学习一下最前沿的新东西,看了一下其它师傅的分析文章,好多没见过的知识点,慢慢补吧... 这里我使用JDK17,因为最新的Spring原生反序列化链是基于JDK17的 该链子的入口点为`EventListenerList#readO…
Jackson 是一个开源的Java序列化和反序列化工具,可以将 Java 对象序列化为 XML 或 JSON 格式的字符串,以及将 XML 或 JSON 格式的字符串反序列化为 Java 对象。 本次Jackson反序列化使用Jackson版本为2.7.9,导入依赖如下 1 2 3 4 5 6 7…
最早的最早,从分布式概念出现以后,工程师们,制造了一种,基于Java语言的 远程方法调用 的东西,它叫RMI(Remote Method Invocation),我们使用Java代码,可以利用这种技术,去跨越JVM,调用另一个JVM的类方法。 因为任何东西都是基于socket, RMIClient…
好久之前的文章了,忘记发了 只需JDK7u21 JDK7u21的核心点就是`sun.reflect.annotation.AnnotationInvocationHandler` 我们可以看到 AnnotationInvocationHandler 中的 equalsImpl 方法 其中有一个明显的…
好早以前写的文章了 在之前打比赛时,遇到一个redis未授权访问的题目,搜搜索索写进去文件了,但是最后没搞出来,好可惜了,所以学了学Redis Redis在默认情况下,会绑定 0.0.0.0:6379 ,如果没有添加防火墙规则等相关策略,则Redis会暴露在公网,如果在 没有密码认证 (一般为空)情…
最近看了看了一些数据库驱动,想起来经常利用的H2数据库的驱动,但是还没分析过源码,所以今天来浅析一下 H2数据库是一款用Java编写的轻量级开源关系型数据库,支持嵌入式和服务器模式。它以其高性能、便捷性和灵活性,广泛应用于开发和测试环境。 h2数据库是纯Java的,因此跨平台使用更加方便。 在使用…
最近面试了几家实习,都问了基于SqlServer的SQL注入,所以今天想补一下基础。 搭建SqlServer,我们的环境和版本如下: Windows Server 2012 SqlServer 2012 这里的SqlServer环境搭建比较简单,可以参考该链接进行安装 blog.csdn.net M…
之前学习过通过Mysql驱动进行JDBC反序列化,最近有听到JDBC不出网的利用方式,今天来学习一下 受影响版本如下: < 42.2.25 >= 42.3.0,< 42.3.2 首先在本地构造一个触发漏洞的环境,在pom.xml中导入PostgreSQL依赖 1 2 3 4 5 6 7 8 9 10…
常见的有两种,Controller内存马和Interceptor内存马,有了前面学习Tomcat的Filter、Servlet、Listener和Valve内存马的学习,学习Spring内存马感觉到是比较轻松的 Spring的相关基础,都是之前在一点点瞎学习和审计SpringBoot系统中学到的,也…
基于Tomcat的内存马类型有四种:Filter、Servlet、Listener和Agent。 在之前的面试中,有个问题是:如果不是基于Tomcat的Java网站,该如何注入内存马。当时没有了解到Agent内存马,现在才知道, Agent内存马是不受Tomcat框架限制的,因此来学习研究一下 学了…
在审计一套源码的时候,mt告诉我的漏洞中,有一个从来没见过没听过的漏洞 —— Groovy脚本执行,今天简单看一下吧 导入依赖如下: 1 2 3 4 5 < dependency > < groupId > org.codehaus.groovy </ groupId > < artifactId…
最近在审计系统的时候,复现一个SSTI模板注入的漏洞,感觉SSTI的危害程度挺高的,因为感觉不是很了解原理,所以详细来学习一下SSTI漏洞 SSTI(服务器端模板注入),在模板引擎解析模板时,因为代码实现的不严谨,可以将恶意代码注入到模板中,从而达到执行任意代码的功能。 Java中常用的模板有三个:…
之前面试的时候,有问过我:”在黑盒测试中,找到一个反序列化过程的点,你该怎么找可用的Gadget“,当时不太清楚有这种方式,回答所有gadget都爆破一下……今天来看一下如何用URLDNS链探测可用Gadget 虽然将所有的gadget都测试一遍的方法也是可行的,但是单纯的盲测工作量会非常巨大,而且…
文章首发于: freebuf.com 已经好久没有写博客了,这段时间花了点时间学了点内网的知识,内网相关笔记后续可能会发了。这两天渗透的时候,进入到了一个若依系统中,发现有接口可以通过数据库连接源连接,想到了之前看过但是还没学习的JDBC反序列化的链子,今天学习一下。(要是之前就学了是不是这个就能打…
XStream 是一个 Java 库,用于简化 Java 对象与 XML 之间的相互转换(序列化与反序列化)。它允许开发人员将 Java 对象直接转换为 XML 格式,或从 XML 恢复为原始对象,无需编写复杂的解析代码。 这里我们来看如何使用XStream进行序列化和反序列化操作 首先定义接口 1…
Log4j感觉还是比较好利用的,在shagou大佬的面试中,给出一个log4j漏洞绕过payload,要求分析研判,虽说能一眼看出时log4j的利用,但是也是头一次见了。 JDK8u65 Log4j 2.14.1 CC3.2.1 在8u191后,Log4j还是可以利用的,但是要用高版本的绕过手段 依…
免责声明:本文只用作技术分析和学习,任何利用本文内容进行非法攻击的行为均与作者无关!!! (也是写上免责声明了哈哈哈) 文章首发于 freebuf.com Apache Tomcat在特定配置下,存在反序列化漏洞。 攻击者通过构造恶意的请求,利用特定配置 **文件会话持久机制 **将恶意序列化数据写…
今天复现一下WebLogic XMLDecoder的漏洞,CVE-2017-10271是通过 void 、 new 标签,对CVE-2017-3506(也是XMLDecoder反序列化的漏洞)补丁的绕过 环境配置版本如下: JDK7u21 webLogic 10.3.6 XmlDecoder/Xml…
之前见过好多次WebLogic的漏洞,但是一直没来得及学(其实是懒),这段时间有来学习一下 环境配置中JDK版本和Weblogic版本如下 JDK7u21 WebLogic1036 环境的搭建使用 QAX A-team中提供的脚本: github.com JDK安装包下载地址: oracle.com…
对于我们之前学习的Tomcat内存马,只算是做了一些简单的实验,并未能够完全应用,只能通过文件上传jsp的方式来注入内存马,也是存在文件落地的现象的,并非真正的内存马 所以这篇文章,我们来学习利用反序列化来实现真正的内存马注入,本文会使用CC11链来进行内存马的注入,实现真正的无文件落地内存马,在使…
CVE-2025-32462-Linux sudo本地提权漏洞复现 sudo 是 Linux 系统中用来管理权限的核心工具,用来授权用户临时获取 root 或者其他用户权限执行命令,既保障系统安全又便于操作。 CVE-2025-32462的Linux sudo 本地权限提升漏洞在于 sudo 的 -…
RARLAB公司的WinRAR压缩软件中发现了一个严重安全漏洞,CVE-2025-6218(路径穿越漏洞),攻击者可通过构造恶意的压缩文件,实现在压缩文件解压时可以将文件释放到受害者系统的敏感路径下(例如自启动目录),进而实现远程代码执行或者持久化控制。 攻击需要目标用户访问恶意网页或打开恶意压缩文…
大多数的WAF受限于性能影响,当request足够大时,WAF就可能因为性能原因而做出让步,超出检查长度的内容,将不会被检查。这一点在一些CTF的题目中有所体现。 虽然这样可以绕过检测,但是我们的序列化数据是二进制数据,直接加入垃圾数据破坏了序列化的结构,在readObject反序列化的时候并没有反…
该回显方法是基于 proc/self/fd/i 的攻击 在Linux环境下,可以通过文件描述符 proc/self/fd/i 获取到网络连接,在Java中我们可以直接通过文件描述符获取到一个Stream对象,对当前网络进行读写操作,可以釜底抽薪在根源上解决回显问题。简单来说就是利用linux文件描述…
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的S…
今天该学习SnakeYaml这条链子了,大概看了一遍文章,相比于刚学的ROME,难度还是有的 根据了解,SnakeYaml是Java的yaml解析类库,支持Java对象的序列化与反序列化(看见和FastJson比较像哈),我们来了解一下简单的yaml语法 YAML对于大小写是敏感的 使用缩进代表层级…
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。 JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。 使用Java程序访问数…
在 Spring3 中引入了 Spring 表达式语言(Spring Expression Language,简称 SPEL),这是一种功能强大的表达式语言,支持在运行时查询和操作对象图,可以与基于 XML 和基于注解的 Spring 配置还有 bean 定义一起使用。 在 Spring 系列产品中…
今天来学习 EL表达式注入 EL(全称 Expression Language)表达式语言 作用 : 简化JSP页面内的Java代码 主要作用为 **获取数据 。**从域中获取数据,然后将数据展示出来 用法 : 使用的前提是通过page标签设置不忽略EL表达式 1 <%@ page contentT…
tomcat的内部结构 tomcat由Connector和Container两部分组成 Connector主要负责对外的网络交互,当收到网络请求时,它将请求包包装为Request,再将Request交给Container进行处理,最终返回给请求方 tomcat中的Container有四种,分别为 e…
Java Web 开发中的监听器(Listener)就是 Application、Session 和 Request 三大对象创建、销毁或者往其中添加、修改、删除属性时自动执行代码的功能组件。 Listener三个域对象 ServletContextListener HttpSessionListe…
从图中可以看出,我们的请求会经过 filter 之后才会到 Servlet ,那么如果我们动态创建一个 filter 并且将其放在最前面,我们的 filter 就会最先执行,当我们在 filter 中添加恶意代码,就会进行命令执行,这样也就成为了一个内存 Webshell 首先在IDEA中创建Ser…
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 它在应用程序中的位置如下图所示,很类似于中间件 客户端发起http请求,比如get类型 Servlet容器接收到请求…
今天学习一下FastJson 中 1.2.62 - 1.2.68 的反序列化漏洞,思路的话和之前一样基于黑名单的绕过,但是大部分还是在 AutoType 开启的情况下,且基本都基于存在其他的依赖的条件下 需要开启AutoType FastJson <= 1.2.62 JNDI注入可利用的 JDK 版…
这篇主要是讲一下Fastjson中版本>= 1.2.25后补丁的绕过方式 tips: 都必须开启AutoTypeSupport才能成功 想要绕过后续版本,我们就一定要知道哪里做了修改 修补方案就是将 DefaultJSONParser.parseObject() 函数中的 TypeUtils.loa…
JDK8u65 1.2.22 <= Fastjson <= 1.2.24 pom.xml 文件导入如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <dependency> <groupId>com.unboundid</groupId> <…
Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库,用于将数据在 JSON 和 Java Object 之间互相转换。 提供两个主要接口来分别实现序列化和反序列化操作。 JSON.toJSONString 将 Java 对象转换为 json 对象,序列化的过程。…
**JNDI(Java Naming and Directory Interface,Java命名和目录接口)**是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名…
在Java高版本中,在 RegistryImpl 类中新加了一个 registryFilter 方法,里面对所传入的序列化对象的类型进行了限制 1 2 3 4 5 6 7 8 9 10 11 12 if (String.class == clazz || java.lang.Number.class…
前面我们进行了RMI源码层面的分析,这里我们来讨论RMI的攻击方式 根据源码层面分析,我们有以下几种基本攻击方式 客户端 打 注册中心 客户端 打 服务端 客户端 不管是服务端或者客户端,与注册中心交互主要是下面这句话 1 r.bind( "remoteObj" ,remoteObj); 除了 bi…
分析完CC1-7,继续分析一下CC11,CC11使用字节码加载,它其实是CC2+CC6的组合变形 漏洞版本:cc组件3.1-3.2.1 这里我把CC链子的流程图放上来,实际根据CC1-7,可以衍生出来很多CCN CC2链流程 1 2 3 4 5 6 7 8 9 10 /* Gadget chain:…
今天我们精进shiro的反序列化!!! 之前有做过相关的shiro550与721的复现,不过都是利用工具的,没有理解里面的原理 550的话是由于他的密钥是固定的,是可以爆破的,经过Base64和AES解密以后,可以将里面的内容构造为恶意代码,从而达到RCE的目的 在登录界面有remember me的…
cc5的后半部分和之前是一样的,只是在调用LazyMap的get方法时,使用的是 TiedMapEntry 的 toString 方法,相当于是提供了一个新的入口 这里 TiedMapEntry 的同 toString 方法调用了 getValue 方法,而 getValue 方法调用了map的 g…
cc7与cc5大同小异,也是后面部分不变,变的只是入口的地方 cc7这里的入口点使用了 Hashtable 这里我们简单分析一下,入口类是 Hashtable 的 readObject ,调用本身的 reconstitutionPut 方法,进入 reconstitutionPut 看一下(这里我们…
之前这里没有搞明白,这次这里动态调试了一下,发现应该是差不多了,回来补一下 在这里add之后进行了下列操作,就是将add的元素,放入了queue数组中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 priorityQueue.add(templ…
之前讲的几条链子,都是在commons-collections3.2.1版本之前的攻击链,cc4是在commons-collections4.0版本中的一条链子 实际上,这条链子还是换汤不换药,只是中间执行的方式换了一下,后面还是命令执行和代码执行两种方式 这里用到的是 TransformingCo…
ysoserial中使用 TrAXFilter 类,来触发 newTransformer 方法,最后也可以成功进行类加载 这里我们也进行分析一下 我们来看`TrAXFilter`的构造函数,构造时需要传入一个templates ,然后调用他的`newTransformer`方法,但是这个类并没有继承…
CC3这条链子和前面的两条链有些不同,在这条链子中我们使用了 动态类加载 替换掉了 Runtime.exec ,由 命令执行 换为了 代码执行 我们来回顾一下动态类加载: ClassLoader中的 loadclass 调用 findClass , findCLass 调用 defineClass…
tips:cc6这条链是不受jdk版本限制的 cc6的入口换成了 HashMap 的 readObject 方法,这条链实际是要调用 LazyMap的get方法 ,后面的部分就和ysoserial中的cc1后半链一样了 当时我们说URLDNS链中讲到了 HashMap 的 readObject 方法…
ysoserial中的cc1和我们前面所说后半部分是一样的,这里就不细说 在ysoserial中的cc1是用LazyMap替换了 TransformedMap 现在使用 LazyMap 的 get 方法去触发 ChainedTransformer 的 transform 方法 下面为LazyMap的…
Java反序列化原理: 接受任意对象,执行readObject方法 若有一个A的readObject方法,调用了O1.method1方法,则我们可以修改这个O1 且在O1.method1方法中,调用了O2.method2方法,则我们可以修改这个O2 …… 最后调用了危险方法(Runtime.getR…