渗透测试入门必读:什么是Java CC链攻击

什么是Java CC链

什么是Java的CC链

  • 当我们使用 Java 程序时,经常需要导入其他类库,这些类库通常包含许多不同的类和方法。在 Java 中,类之间的依赖关系可以形成一种调用链,在这种调用链中,一个类的方法会调用另一个类的方法,而后者又会调用另一个类的方法,如此循环下去。这种调用链被称为**“调用链”(Call Chain)**。

  • 在 Java 中,如果应用程序的一个类直接或间接地调用另一个类的敏感方法(例如连接到网络、读取文件等),那么这种依赖关系就会被称为**“CC chain(Control-Flow to Call Chain)”,也叫做控制流问题或调用链问题**。

  • 这种问题通常被视为 Java 应用程序中最常见的漏洞之一,攻击者可以通过利用 Java 应用程序中一个或多个不安全的依赖关系,将其嵌入攻击代码,实现远程执行恶意代码的攻击。因此,为了确保 Java 应用程序的安全性,必须认真检查应用程序中所有的 CC 链,并采取措施来解决存在的安全漏洞。

Java的CC链举例子

  • Java的不同类之间的相互调用可能会形成一条CC(控制流到函数调用)链,如果攻击者能够利用这些调用链的漏洞,从一个Java对象的方法调用控制权泄露到另一个Java对象,那么攻击者就可以利用这个漏洞来执行具有恶意目的的代码。攻击者可以利用这种漏洞来窃取敏感数据、攻击网络连接以及利用目标系统的资源,对系统造成严重的影响。
  • 例如,如果一个Web应用程序中的Java代码,接收来自用户提交的数据,然后在后台执行Java类库中的某个方法,而这个方法又会调用其他的Java类库或代码,那么这些Java类库或者代码之间的调用关系就形成了CC链。攻击者可以利用应用程序中的任何CC链中存在的漏洞来执行任意代码。这类问题是Java应用程序中的常见漏洞之一,必须采取措施进行识别和修复以确保应用程序的安全性。

构造CC链举例

  • 首先,要构造一个cc链,需要找到3个或更多的类,它们的构造函数之间存在调用关系。例如A调用B,B调用C,这样的关系。
  • 然后,攻击者需要找到这些类中,安全检查较少或存在漏洞的构造函数。比如构造函数直接执行从网络接收的数据,或者通过反序列化将接收的数据直接反序列化成对象
  • 最后,攻击者精心构造数据,传递给最初的构造函数。在对象构造的过程中,由于构造函数调用关系,这个数据最终被恶意构造函数所使用,导致远程代码执行。
  • 一个典型案例是JDK中的AnnotationInvocationHandler。这个类的构造函数反序列化接收的annotation数据,如果数据被攻击者恶意构造,可以导致远程代码执行。利用这个漏洞的cc链如下:

AnnotationInvocationHandler (constructed with malicious annotation data)
-> MyAnnotation (AnnotationProxy is constructed)
-> Element (the annotation is “added” to this element)

  • 另一个例子是Spring的SpEL表达式注入SpEL表达式可以执行Java方法。如果 SpEL表达式来自用户输入,攻击者可以构造表达式执行恶意方法。利用这个漏洞的cc链可以是:

Constructor (accepts SpEL expression as argument)
-> SprinELResolver (resolves the SpEL expression)
-> MethodExecutor (executes the method invoked in the expression)

  • 找出cc链并不难,难点在于找到链中存在漏洞或者安全检查不严的构造函数,然后通过精心构造的参数触发这个漏洞,达到RCE的效果。这也是防范cc链攻击的关键所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值