摘要:在本文中,将首先引入Java背部的原则 - 序列漏洞,然后在此基础上,如何在此基础上检测和扫描此类漏洞。
Java的依赖性序列化是近年来安全行业研究的关键领域之一。它可以在Apachecommons集合,JBOSS,Weblogic和其他常见的容器和库中找到。在库中发现了这种类型的漏洞,这种类型的漏洞易于使用。结果,它具有广泛的影响。
在本文中,将首先引入Java的背部原理 - 序列漏洞,然后在此基础上介绍如何在此基础上检测和扫描此类漏洞。
Java序列化是指将Java对象转换为字节序列的过程。序列化的字节数据可以保存在文件和数据库中;Java衍生物是指恢复字节序列为Java对象的过程。如下所示:
通过ObjectInputStream.ReadObject()和ObjectputStream.writeObject()方法实现了序列化和启用。
Java中的任何类,如果要序列化,则必须实现Java.io.serializable界面,例如:::
Java.io.Serializable实际上是一个空的接口。界面在Java中的独特作用是标记一个类,以使JRE确定可以序列化此类。
同时,Java支持类中的以下功能:
这两个函数不是Java.io.Serializable的接口函数,而是协议的函数。如果类实现这两个函数,则当序列化和深层化时,ObjectInputStream.ReadObject()和ObjectOutputStream.writeObject()将积极调用这两个函数。这也是交易的基本原因
例如:
该课程加深后执行命令。我们构建一个序列化对象。名称是恶意命令,因此在派生词时执行恶意命令。
在加深序列化的过程中,攻击者只能控制“数据”,无法控制如何执行它。因此,必须使用攻击应用程序的特定方案来实现攻击目的。例如,在上面的Extecleclass(Hello)中,使用此类的ReadObject函数中的命令执行场景以执行攻击
在这里,我们为漏洞重新测试测试构建一个漏洞目标范围:使用Spring-boot编写可以接收HTTP数据并识别的应用程序。
使用https://start.spring.io/来生成Spring-Boot应用程序,SELECT MAVEN项目,Java8
下载到当地,导入IDE,修改pom.xml以添加apache Commonscollections 3.1依赖项
修改demapplication.java作为以下代码
目前,我们在Apache Commons Collections漏洞中完成了一个验证射击范围,并开始射击范围应用程序
我们使用ysoserial生成攻击有效载荷:
然后使用httpie发送攻击有效载荷(POC)
目前,您可以在POC中看到命令
在1.2示例中,我们使用ySosorial有效载荷的Consoncollections5。在本节中,我们分析了此POC
可以完成的对象是Javax.Management.badattributeValueExpexception。在此类中,提供了ReadObject方法。
这里的valobj是tiedmapery(lazymap,“ foo”)和此类的tostring方法
其中
and.map是lazymap = lazymap.decorate(innermap,trransfererchain),in lazymap
当我看到发现钥匙时,this.factory.transform(键)被调用
由此构建的变压器链。我们有效载荷的效法最终将通过反射反思来执行命令。
在1中引入原理中,我们可以看到衍生漏洞需要依靠执行链来完成攻击有效负载执行。到设备漏洞的特征,漏洞扫描工具通常集中在在测试过程中检测已知漏洞,检测未知漏洞和安全工具的能力非常有限。通常,需要通过安全审核和代码审核找到专业人员。
Java的依赖系列漏洞取决于两个因素:
1.应用程序是否具有后序界面
2.应用程序是否包含漏洞组件
因此,还需要根据这两个因素对相应的漏洞扫描工具进行测试。
白色框代码审核工具,您可以找到呼叫链中是否有订单的操作的操作:
但是,依赖上述信息不足以确定是否存在漏洞,有必要确定代码中的代码中是否存在三重奏依赖项。分析包含漏洞的组件。
Web漏洞扫描仪的检测原理与白盒工具不同。
首先,要解决的漏洞扫描仪是确定加深序列化的请求。这里需要注意的是,爬行动物方法无法直接发现Web漏洞扫描。因此,例如,代理组件)以识别衍生界面,如下图所示
如今,Web漏洞扫描仪提供了一个代理组件来查找应用程序HTTP请求的应用程序。搜寻器组件可以触发通过前台页面输入代理组件的请求;但是,在API方案中,测试仪需要调用API调用以生成HTTP请求数据以生成HTTP请求数据。
拦截HTTP请求数据后,代理组件可以通过两种方式确定请求是否为序列化请求:
1. HTTP请求的内容类型,特别是contentType:application/x-java-serialized-object-object
2.检查请求数据的开头是否为0 XACED,有时序列化请求没有正确的内容类型。目前,您需要根据数据确定它是否是基于数据的序列化请求。
当确定接口是序列化接口时,漏洞扫描仪将发送检测有效载荷判断接口,以确定接口是否具有反向漏洞。此处的攻击有效负载类似于第1.2节中使用的yserial工具。通过背面显示(HTTP在没有攻击执行结果的情况下返回数据),因此它只能蒙蔽,也就基于响应时间是脆弱性。
本文分享了华为云社区的诚意,作者:alpha1e0。