以下代码的一个版本显示在this presentation about heap spraying(此链接导致powerpoint下载)以及this lecture video by Dan Boneh中。
<SCRIPT language="text/javascript">
shellcode = unescape("%u4343%u4343%...");
oneblock = unescape("%u0C0C%u0C0C");
cause-overflow(overflow-string); //overflow buf[]
</SCRIPT>
此处未实现cause-overflow()
函数,但我认为它只会在整个堆中写入shellcode + nop
。
shellcode
实际上是机器代码的exec(/bin/sh)
,还是shellcode
某些shell代码的内存位置?
oneblock
是NOP幻灯片吗?
(更一般地说,这段代码在做什么?为什么会导致堆喷雾?)
P.S。不是作业;我只是javascript的菜鸟。
答案 0 :(得分:1)
(无法从此计算机打开这两个链接中的任何一个。)
我从来没有在Javascript中使用堆喷涂 - 这个想法真的很可怕。
它与shell代码无关(因为它不在shell中运行),而是直接到机器语言 - CPU的本机代码。
这是一种相当原始的,有些不准确的描述方式的方式,但它得到了基础知识。
堆没什么特别的。它只是计算机内存。堆栈也没什么特别的,它只是计算机内存。程序空间也没什么特别的,它只是计算机内存。
通常[*],正在运行的程序保存在“程序空间”中。程序创建的大事保存在“堆”中,程序生成的临时内容保存在“堆栈”中。 (简化 - 处理它。)
缓冲区溢出,粉碎堆栈或喷涂堆或任何最新技巧的想法......以某种方式用精心设计的错误数据填充计算机内存并强制计算机停止在程序空间中运行,而不是在精心设计的错误数据中运行。
涉及相当谨慎的
知识[*]是的,正在做出一些努力来改变它并使计算机受到更多保护