stream.close();
throw e;
}
} else {
String path = url.getFile();
initialize(path); // 来到这里
}
if(Printer.trace) Printer.trace("HeadspaceSoundbank: constructor: url: " + url + " completed");
}
:: 漏洞利用
漏洞的原理虽然简单,但是利用却不是那么容易。首先,虽然漏洞是通过IE触发的,但是最终执行漏洞函数的进程为java.exe,所以无法通过简单的java script堆喷射来进行利用。如果要做到比较通用,直接在java.exe内进行java堆喷射会比较好,但是事实上问题也挺多的,最麻烦的就是java堆的大小默认只有64M,而且如果进行gc的频率过高,jvm会直接抛出异常。所以经过几次尝试后,暂时放弃了这条路。还有一条路是常规的栈溢出利用。但是这个方法也有几个问题。比较庆幸的是我们有足够大的空间来写Shellcode,可以直接用JMP ESP来进行Shellcode的定位。最棘手的是字符编码的问题,在利用的过程中,跳转地址和Shellcode的字节大小都必须在0x80以内(java现学的,可能存在盲点),否则会因为字符集的问题而转的乱七八糟的。Shellcode在0x80内比较好解决,因为esp刚好指向Shellcode,用alpha2编码可以使得Shellcode最终全部为可见字符。JMP ESP(CALL ESP)就比较麻烦了,因为比较稳定的opcode地址很多都在kernel32和ntdll上,而这两者的加载基址又比较郁闷(比如kernel32.dll为0x7c800000),又不能去找类似于shell32.dll这种不是很稳定的动态链接库,所以最后还是锁定了java自身的几个动态链接库,希望能通过java代码得到版本号,然后按照不同版本号来计算不同的opcode地址。
:: PoC
PoC中的opcode随便找的,测试环境为xp sp2,jre 6.0.160.1
////////////////////////////////////////////////////////////////////////////////////////////////
import java.applet.Applet;
import java.awt.Graphics;
import java.io.CharArrayWriter;
import java.io.PrintStream;
import java.lang.reflect.Array;
import java.net.URL;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Soundbank;
import javax.sound.midi.Synthesizer;
public class test extends Applet
{
pub <script type="text/java script">
- <script type="text/java script">BAIDU_CLB_fillSlot("771048");
- 点击复制链接 与好友分享! 回本站首页 <script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
- 您对本文章有什么意见或着疑问吗?请到 论坛讨论您的关注和建议是我们前行的参考和动力
- 上一篇: Sun Java运行时环境XML解析拒绝服务漏洞
- 下一篇: JAVA反向传播神经网络
- 相关文章
- <script type="text/java script">BAIDU_CLB_fillSlot("182716");
- <script type="text/java script">BAIDU_CLB_fillSlot("517916");
- 图文推荐
- <script type="text/java script">BAIDU_CLB_fillSlot("771057");




