关于Java getSoundBank函数堆栈溢出漏洞(二)

2014-11-23 23:26:15 · 作者: · 浏览: 1
entException e) {
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("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)
您对本文章有什么意见或着疑问吗?请到 论坛讨论您的关注和建议是我们前行的参考和动力
上一篇: Sun Java运行时环境XML解析拒绝服务漏洞
下一篇: JAVA反向传播神经网络
相关文章
<script type="text/java script">BAIDU_CLB_fillSlot("182716");
<script type="text/java script">BAIDU_CLB_fillSlot("517916");
图文推荐
<iframe src="http://www.2cto.com/uapi.php tid=43214&catid=85&title=udjT2kphdmEgZ2V0U291bmRCYW5ruq/K/bbR1bvS57P2wqm2tA==&forward=http://www.2cto.com/kf/200912/43214.html" width="100%" height="100%" id="comment_iframe" name="comment_iframe" frameborder="0" scrolling="no">
<script type="text/java script">BAIDU_CLB_fillSlot("771057");
排行
热门