fastjson1x学习研究
环境搭建好久没写java了,也没写这安全方面的研究blog了,趁这段空闲期休息并思考了一下未来方向,觉得自己的竞争力与兴趣依旧在这个方向,所以继续“深造”吧——安全的本质是攻防对抗,而安全研究是攻防的明珠,是最一线武器的来源,所以接下来把这件事做好吧。
Gradle的使用一点小的知识补充,首先我们把有漏洞的fastjson版本通过gradle/maven引入进来,这里看到配置文件里引入依赖还写得compile,但中央仓库里推荐使用implementation,所以二者有啥区别呢?
123456dependencies { compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.0.2' // compile与implementation的区别:前者会传递依赖,后者不传递。故前者使模块间耦合增加。 implementation group: 'com.alibaba', name: ...
网站劫持原理
网站劫持原理及实例分析技法介绍DNS记录劫持
攻击DNS服务商的后台
利用DNS泛解析
搜索引擎快照劫持
TODOList
数据安全学习书籍《数据安全架构设计与实战》 作者:郑云文
引申内容
网站劫持原理
经验之谈
TIP1:
对于“业务代码访问数据”这块耦合过高,未采用【前端-业务逻辑-DAL】分层结构的存量业务系统,可采用DB Proxy的改造方式。
原理如下图:
fastjson反序列化漏洞分析
fastjson支持AutoType功能,即在序列化的字符串中加入@type字段,fastjson就会将数据反序列化为它指定的类型对象。当Server端存在可用的代码执行链时,如TemplatesImpl或JdbcRowSetImpl,就可以RCE。
参考链接
https://xz.aliyun.com/t/8979
https://xz.aliyun.com/t/9052
https://www.freebuf.com/column/180711.html
Tomcat AJP本地文件包含(CVE-2020-1938)漏洞分析
漏洞描述编号:CVE-2020-1938/CNVD-2020-10487
细节:Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。
POC:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
影响范围
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
漏洞成因两个配置文件Tomcat在部署时有两个重要的配置文件conf/server.xml、conf/web.xml。其中server.xml定义了tomcat启动时涉及的组件属性,比如,默认会开两个connector(用于处理请求的组件,这里你可以理解为端点):
123456789101112<!-- A "Connector" represents an endpoint by which reque ...
Ysoserial工具解读(六)
这一篇主要讲述Java RMI(及其实现协议JRMP)相关的反序列化漏洞,内容有点多,断断续续地写了一个月。文章里预测的几种攻击方式几乎都得到了验证,但通过RMI从服务端攻击客户端的实验目前失败了(具体原因还在探寻中),而Ysoserial则利用JRMP的DGC协议实现。
基础知识RMI是什么RMI(Remote Method Invocation,远程方法调用)类似于RPC(Remote Process Call,远程过程调用),常被用在分布式环境中(如阿里的Dubbo框架)。假设A主机需要处理大量的计算任务,而B主机这会儿没有任务,这时可以用RMI将一部分任务分给B来做,提高效率。
客户端(A主机)和服务端(B主机)之间的通信实际交给位于各自JVM的Stub(存根)和Skeleton(不知道怎么翻译,但官方说明jdk8以后不再依赖这个组件)执行,而在这期间,RMI registry注册表扮演着图书管理员的角色。具体的实现过程如下图:
当Server有一个Service对象提供给外部调用时,它需要先向注册表登记
当Client需要调用Service对象时,就要先去注册表查询可用 ...
Ysoserial工具解读(五)
这篇博客介绍CommonsBeanutils1的构造方式,相比于之前分析过的其他Payload。这次利用的beanutils.BeanComparator、beanutils.PropertyUtils类的调用链更长,但最终又会回到之前介绍过的调用链上。
CommonsBeanutils1的Payload构造方式123456789101112131415161718192021222324252627/* 先贴小段代码:*/public Object getObject(final String command) throws Exception { final Object templates = Gadgets.createTemplatesImpl(command); // 其他都是操作,只不过这里将TransformingComparator类换成了BeanComparator类 // mock method name until armed final BeanComparator comparator = new BeanCompara ...
Ysoserial工具解读(四)
这篇博客介绍CommonsCollections5、6的构造方式,Apache的这个jar包(版本3.1、4.0)总算要分析完了。这两个java文件都利用了org.apache.commons.collections下的TiedMapEntry和LazyMap两个类。不同的是5在外层利用了BadAttributeValueExpException类,而6利用了HashSet类。
CommonsCollections5的Payload构造方式其实,CommonsCollections5的代码正是本系列第一篇https://l1nf3ng.github.io/2019/03/27/Java反序列化漏洞解析/ 所讲的那个构造方式,主要针对jdk8u60之后sun.reflect.annotation.AnnotationInvocationHandler 这个类被删除的情况。其调用链这里不再重复分析,值得一提的是这次重新分析的过程中的乌龙事件:
我在IDEA的debug下给javax.management.BadAttributeValueExpException的readObject ...
Ysoserial工具解读(三)
前面两篇已经介绍了不少基础知识,接下来可以加快分析的速度了。今天分析CommonsCollections3.java和CommonsCollections4.java中用到的类,主要是InstantiateTransformer类和TrAXFilter类。
CommonsCollections3的Payload构造方式1234567891011121314151617181920212223242526272829/* 先贴代码为敬:*/import javax.xml.transform.Templates;import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;import org.apache.commons.collections.functors.InstantiateTransformer;public Object getObject(final String command) throws Exception { Object templatesImpl = Gadgets.cre ...
Ysoserial工具解读(二)
今天再来分析CommonsCollections2.java中用到的类,主要包括PriorityQueue、TemplatesImpl。
基础知识Java的字节码操作这里介绍两个库Asm和Javassist,两者相比较:Asm库很轻量化,但需要对JVM的汇编指令有一定了解,这个库正是冰蝎修改字节码用的库。相比于Asm,Javassist就对新手友好了很多,它是JBoss项目的子项目,被Jboss用来实现动态代理。你不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。 例如,使用Javassist代码创建一个这样的类:
123456789101112131415161718192021222324252627282930import javassist.ClassPool;import javassist.CtClass;import javassist.CtMethod;import javassist.CtNewMethod;/** * 想模拟的Java类: * public class Target{ * public void talk(){ * ...