java漏洞
文章平均质量分 84
主要涉及java组件漏洞
Thunderclap_
Good Good Study , Day Day Up!
展开
-
JAVA代码审计关键字汇总
JAVA代码审计关键字汇总。原创 2023-03-13 10:26:28 · 1071 阅读 · 1 评论 -
Java反序列化漏洞——jdbc反序列化漏洞利用
如果攻击者能够控制JDBC连接设置项,那么就可以通过设置其指向恶意MySQL服务器进行ObjectInputStream.readObject()的反序列化攻击从而RCE。原创 2023-03-08 11:17:37 · 1131 阅读 · 0 评论 -
Java反序列化漏洞——CommonsBeanutils1链分析
在创建类的对象的时候可以为comparator赋予特定的比较器,值得注意的是如果没有设定自定义的comparator,其默认为ComparableComparator对象,当然,在调用链中,将会调用他的compare方法。接收两个参数 bean (类对象)和 name(属性名),方法会返回这个类的这个属性的值,但是他不是直接通过反射取值,而是通过反射调用getter方法获取属性,进而经过恶意的构造,我们可以触发任意的getter方法。getter方法以get开头,setter方法以set开头。原创 2023-02-20 09:51:55 · 1664 阅读 · 0 评论 -
Java反序列化漏洞——CommonsCollections4.0版本—CC2、CC4
因为这条利⽤链中的关键类org.apache.commons.collections4.comparators.TransformingComparator ,在commonscollections4.0以前是版本中是没有实现Serializable 接⼝的,⽆法在序列化中使⽤。实际上是可用的,比如CC6的链,引入的时候因为⽼的Gadget中依赖的包名都是org.apache.commons.collections ,⽽新的包名已经变。其他的代码不需要改变,即可创建出新版本下的利用链。原创 2023-02-18 18:46:15 · 1726 阅读 · 0 评论 -
Java反序列化漏洞——CommonsCollections3链分析
CC1链中我们是通过调用Runtime.getRuntime.exec()来执行系统命令,而另一个方向我们可以通过TemplatesImpl加载字节码的类,通过调⽤其newTransformer() 方法,即可执⾏这段字节码的类构造器,我们在类构造器中加入恶意代码,即可执行任意命令。利⽤InstantiateTransformer 来调⽤到TrAXFilter 的构造⽅法,再利⽤其构造⽅法⾥的templates.newTransformer() 调⽤到TemplatesImpl ⾥的字节码。原创 2023-02-17 18:00:53 · 943 阅读 · 0 评论 -
Java反序列化漏洞——CommonsCollections6链分析
实际上在java.util.HashMap#readObject 中就可以找到HashMap#hash() 的调⽤,去掉了最前⾯的两次调⽤,在HashMap的readObject⽅法中,调⽤到了hash(key) ,⽽hash⽅法中,调⽤到了key.hashCode()。ysoserial中,是利⽤java.util.HashSet#readObject 到HashMap#put() 到HashMap#hash(key),最后到TiedMapEntry#hashCode()。getValue方法。原创 2023-02-17 16:50:49 · 598 阅读 · 0 评论 -
Java反序列化漏洞——CommonsCollections1链分析
我们知道,如果一个类的方法被重写,那么在调用这个函数时,会优先调用经过修改的方法。因此,如果某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,且这个Map变量是可控的,我么就可以实现攻击目标。LazyMap的漏洞触发点和TransformedMap唯一的差别是,TransformedMap是在写入元素的时候执行transform,而LazyMap是在其get方法中执行的factory.transform。原创 2023-02-17 14:50:32 · 1203 阅读 · 0 评论 -
Java反序列化——CommonsCollections中基础知识
Apache Commons Collections中实现了TransformedMap ,该类可以在一个元素被添加/删除/或是被修改时(即key或value:集合中的数据存储形式即是一个索引对应一个值,就像身份证与人的关系那样),会调用transform方法自动进行特定的修饰变换,具体的变换逻辑由Transformer类定义。在实例化这个InvokerTransformer时,需要传入三个参数,第⼀个参数是执行的方法名,第⼆个参数是这个函数的参数列表的参数类型,第三个参数是传给这个函数的参数列表。原创 2023-02-17 11:10:09 · 438 阅读 · 0 评论 -
log4j漏洞源码分析
log4j漏洞源码代码思路调试分析原创 2023-02-15 10:29:12 · 375 阅读 · 0 评论 -
java渗透测试基础之——RMI
RMI全称是Remote Method Invocation(远程方法调用),是专为Java环境设计的远程方法调用机制,远程服务器提供API,客户端根据API提供相应参数即可调用远程方法。由此可见,使用RMI时会涉及到参数传递和结果返回,参数为对象时,要求对象可以被序列化。目的是为了让两个隔离的java虚拟机,如虚拟机A能够调用到虚拟机B中的对象,而且这些虚拟机可以不存在于同一台主机上。RMI ClientRMI Serverjava.rmi:提供客户端需要的类、接口和异常;原创 2023-02-10 14:14:59 · 1051 阅读 · 0 评论 -
java字节码以及ClassLoader类加载机制
上面提到ClassLoader 能够加载字节码的关键就在于loadClass findClass defineClass 这三个方法因为 loadClass 实现了双亲委派机制, Java 官方不推荐直接重写该方法 (除去一些特殊情况, 比如 tomcat 和 jdbc 就破坏了这种机制)而defineClass 是一个 native 方法, 底层由 C++ 实现所以我们的重点就是重写 findClass 方法, 并最终在里面调用 defineClass。原创 2023-02-09 15:40:16 · 669 阅读 · 0 评论 -
java静态代理和动态代理
代理类和被代理类通常会存在关联关系(即上面提到的持有的被带离对象的引用),代理类本身不实现服务,而是通过调用被代理类中的方法来提供服务。创建一个接口,然后创建被代理的类实现该接口并且实现该接口中的抽象方法。在代理类中持有一个被代理对象的引用,而后在代理类方法中调用该对象的方法。但是静态代理的缺点也暴露了出来:由于代理只能为一个类服务,如果需要代理的类很多,那么就需要编写大量的代理类,比较繁琐。被代理类被传递给了代理类HelloProxy,代理类在执行具体方法时通过所持用的被代理类完成调用。原创 2023-02-09 14:19:21 · 154 阅读 · 0 评论 -
shiro的payload长度限制绕过
yishiro反序列化漏洞常规利用点在数据包的header头中,在这里直接插入目标代码,生成的payload是很长的,肯定会超过中间件 header 长度限制,如何解决这个问题呢?将如上base64编码的内容复制到burpsuite中,作为calssData的值,在发送请求,即可执行字节码中的内容,弹出计算器。新建项目修改pom,添加如下两个依赖,一个是tomcat的,一个是springframework的。通过以往的构造payload的exp.py代码如下,构造header头的类构造器。原创 2023-02-08 11:28:26 · 2968 阅读 · 3 评论 -
shiro无依赖利用链及exp编写
因为shiro是存在commons-beanutils的依赖的,这样我们可以通过构造原生的CB1的链进行攻击shiro,但是我们通过ysoserial的CB1的链会发现其实并不会成功。原因是因为CB1的链里面其实是依赖于commons.collections包里面的部分内容的。如下发现是在我们构造BeanComparator的时候会调用,当没有显式传入Comparator 的情况下,则默认使用ComparableComparator。原创 2023-02-08 11:07:35 · 1337 阅读 · 0 评论 -
shiro反序列化漏洞利用以及exp编写
为了让浏览器或服务器重启后用户不丢失登录状态,Shiro支持将持久化信息序列化并加密后保存在Cookie的rememberMe字段中,下次读取时进行解密再反序列化。但是在Shiro 1.2.4版本之前内置了一个默认且固定的加密Key,导致攻击者可以伪造任意的rememberMe Cookie,进而触发反序列化漏洞。原创 2023-02-08 11:02:21 · 703 阅读 · 0 评论 -
shiro漏洞原理以及检测key值原理
Shiro 1.2.4及之前的版本中,AES加密的密钥默认硬编码在代码里(SHIRO-550),Shiro 1.2.4以上版本官方移除了代码中的默认密钥,要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。升级shiro版本并不能根本解决反序列化漏洞,代码复用会直接导致项目密钥泄漏,从而造成反序列化漏洞。针对公开的密钥集合,我们可以在github上搜索到并加以利用。原创 2023-02-08 10:32:21 · 5257 阅读 · 0 评论 -
利用ClassLoader#defineClass动态加载字节码
利用ClassLoader#defineClass直接加载字节码,底层调用原理。原创 2023-02-07 10:56:08 · 2854 阅读 · 0 评论 -
利用TemplatesImpl加载字节码
调用了 TemplatesImpl#newTransformer() 并且它也是 public 类型的,如下也成功触发。TemplatesImpl 类中已经没有调用 getTransletClasses() 的方法了,而 getTransletInstance() 方法在。com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl 这个类中定义了一个内部类。Java中默认情况下,如果一个。方法中被调用了,所以构造如下链,P牛用的就是如下的链。原创 2023-02-06 14:40:24 · 438 阅读 · 0 评论 -
BCEL classloader
BCEL的全名应该是Apache Commons BCEL,属于Apache Commons项目下的一个子项目。Apache Commons大家应该不陌生,反序列化最著名的利用链就是出自于其另一个子项目——Apache Commons Collections。就这个库的功能来看,其使用面远不及同胞兄弟们,但是他比Commons Collections特殊的一点是,它被包含在了原生的JDK中,位于com.sun.org.apache.bcel。原创 2023-02-06 14:33:43 · 681 阅读 · 0 评论 -
Java代码审计基础—反射(渗透测试)
Java代码审计基础——反射原创 2022-08-26 16:10:40 · 1380 阅读 · 0 评论 -
java中的命令执行汇总
命令执行漏洞只关注 第一个或者如果该参数完全可控,或者是/bin/bash(Linux)或cmd(Windows)等运行shell解析器的命令、后面的部分可控,则可以注入。如果的哥参数是bat或者sh脚本文件,后面的参数可控,则需要根据脚本如何使用可控参数来判断是否可以注入。ScriptEngine接口:可使用ScriptEngine.eval解析多种脚本,比如JavaScript,而JavaScript中可以执行java命令。原创 2022-08-21 22:26:18 · 6433 阅读 · 0 评论 -
idea java代码审计必备插件
idea代码审计常用插件原创 2022-07-05 21:55:15 · 3793 阅读 · 2 评论 -
java代码审计基础知识、反编译、idea使用技巧
java代码审计基础知识、反编译、idea使用技巧原创 2022-07-03 20:03:58 · 1522 阅读 · 0 评论