问题标签 [buffer-overflow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3426 浏览

c# - Java 和 C# 中的内存管理有何不同?

我正在阅读2010 CWE/SANS Top 25 Most Dangerous Programming Errors,其中一个条目是 for Buffer Copy without Checking Size of Input。它建议使用具有功能的语言来防止或减轻此问题,并说:

例如,许多执行自己的内存管理的语言,如 Java 和 Perl,不会受到缓冲区溢出的影响。其他语言,例如 Ada 和 C#,通常提供溢出保护,但程序员可以禁用该保护。

我不知道 Java 和 C# 在内存管理方面存在任何有意义的差异。为什么 Java 不受缓冲区溢出的影响,而 C# 只防止溢出?以及如何在 C# 中禁用这种保护?

0 投票
7 回答
2094 浏览

c++ - c++ 是否存在缓冲区溢出 helloworld?

我尝试了this question提供的代码,但它不起作用。

如何设计一个溢出来包裹我的头?

更新:

0 投票
6 回答
8368 浏览

c - 如何在 GCC、windows XP、x86 中编写缓冲区溢出漏洞利用程序?

上面的演示来自这里:

http://insecure.org/stf/smashstack.html

但它在这里不起作用:

我不明白为什么它是 8 虽然作者认为:

一个小数学告诉我们距离是 8 个字节。

我的 gdb 转储称为:

在我的情况下,距离应该是 - = 5,对吗?但它似乎不起作用..

为什么局部变量function需要56个字节?(sub $0x38,%esp

0 投票
2 回答
472 浏览

visual-c++ - 'sprintf' 方法是否有默认缓冲区长度?

我使用 sprintf 方法将数据格式化为我想写入文件的字符串,在 C++ 控制台应用程序中使用 VS 2008。输入是一个特定的消息,它有各种变量和值(例如:类型'int'和值' 10' / 键入字符串和值“abc”等)当我发送两条消息时,它工作得很好。但是当我发送两个以上的消息时,它会给出一个运行时错误,说0xC0000005: Access violation reading location 0xabababab。为什么会这样?是因为方法 'sprintf' 具有默认缓冲区长度吗?我该如何克服这个问题?

0 投票
1 回答
615 浏览

wcf - 作为 WCF 合同中的字节数组的 [DataMember] 是否存在安全隐患?

我是否将我的服务暴露于缓冲区溢出攻击?如果是这样,您将如何防御这种情况?

0 投票
3 回答
3292 浏览

c - 学生缓冲区溢出图解(linux、C)

我的朋友是一年级 CS 学生的老师。我们想向他们展示缓冲区溢出利用。但是现代发行版受到简单缓冲区溢出的保护:

在 debian 上(责备它)

关于现代商业红帽

对于来自互联网的更多合成示例,相同的检测器失败了。

我们如何使用现代非 GPL 发行版演示缓冲区溢出(类中没有 debian)

我们怎么能

  • 禁用堆栈中的金丝雀字检查?
  • 禁用检查 strcpy/strcat 的变体?
  • 写一个工作缓冲区溢出的例子(用纯 C 语言)?
0 投票
4 回答
403 浏览

c - 关于缓冲区溢出

我是道德黑客世界的新手,最重要的事情之一是堆栈溢出,无论如何我编写了一个有 char name [400] 语句的易受攻击的 C 程序,当我尝试使用 401A 运行程序时它没有'不会溢出,但是我正在关注的书说它必须溢出并且逻辑意义上说是这样,所以出了什么问题???

0 投票
2 回答
1370 浏览

assembly - 汇编程序中的 Printf 不打印

我有一个使用缓冲区溢出来破解程序的作业(通过反汇编,程序是用 C++ 编写的,我没有源代码)。我已经解决了它,但我有一个问题。我必须在屏幕上打印一些消息,所以我找到了 printf 函数的地址、堆栈上的“HACKED”地址和“%s”地址(按此顺序)并调用了该函数。调用的代码顺利通过,但没有打印任何内容。

我试图模拟程序中其他地方的环境,但一定有问题。你知道我做错了什么,我没有输出吗?非常感谢

编辑:

该程序在 Windows XP SP3 32b 上运行,用 C++ 编写,Intel asm

有“黑客”代码

程序开始:

这段代码真的很难看,因为我是汇编程序的新手,而且由于缓冲区溢出错误,不能有空字节

0 投票
5 回答
6714 浏览

c - 在缓冲区溢出方面需要帮助

我有一个缓冲区溢出,我绝对看不到(在 C 中)。首先,它只发生在大约 10% 的时间里。它每次从数据库中提取的数据在执行之间似乎并没有太大的不同……至少差异不足以让我找到任何可辨别的模式来确定它何时发生。来自 Visual Studio 的确切消息是这样的:

hub.exe 中发生缓冲区溢出,损坏了程序的内部状态。按 Break 调试程序或按 Continue 终止程序。

有关详细信息,请参阅帮助主题“如何调试缓冲区溢出问题”。

如果我调试,我发现它被破坏了__report_gsfailure(),我很确定这是来自编译器上的 /GS 标志,并且还表示这是堆栈而不是堆上的溢出。我还可以看到它在离开时抛出的功能,但我看不到任何会导致这种行为的东西,该功能也已经存在了很长时间(10 多年,尽管有一些小的修改)据我所知,这从未发生过。

我会发布函数的代码,但它相当长并且引用了许多专有函数/变量/等。

我基本上只是在寻找一些关于我应该寻找的我没有的想法,或者一些可能有帮助的工具。不幸的是,我发现的几乎所有工具都只能帮助调试堆上的溢出,除非我弄错了,否则它在堆栈上。提前致谢。

0 投票
1 回答
1896 浏览

c - 跳进argv?

我正在尝试使用 shellcode 并偶然发现了 nop-slide 技术。我写了一个小工具,它以缓冲区大小为参数并构造一个像这样的缓冲区:[ NOP | SC | RET ],NOP 占据缓冲区的一半,然后是 shellcode,其余的则填充(猜测的)返回地址。它与他著名论文中描述的工具 aleph1 非常相似。

我的易受攻击的测试应用程序与他的论文中的相同:

我测试了它并且很好,它有效:

但老实说,我不知道为什么。好的,保存的 eip 按预期被覆盖,但我认为它不是跳转到缓冲区的某个地方,而是跳转到了 argv。

gdb 在调用 strcpy()之前显示了以下地址:

little_array 的地址:

strcpy() 之后:

那么,这里发生了什么?我使用了一个 604 字节的缓冲区来溢出 little_array,所以他肯定用猜测的地址 0xbffff458 覆盖了保存的 ebp、保存的 eip 和 argc 以及 argv。

然后,返回后,EIP 指向 0xbffff458。但是 little_buffer 位于 0xbffffefe8,相差 1136 字节,所以他肯定没有执行 little_array。我使用stepi命令执行,然后,在 0xbffff458 及以后,他执行 NOP 并到达 shellcode。

我不太确定为什么会这样。首先,我是否正确,他在 argv 中执行我的 shellcode,而不是 little_array?加载器(?)将 argv 放在堆栈的什么位置?我以为它紧跟在 argc 之后,但是在 argc 和 0xbffff458 之间,有 620 个字节的间隙。他怎么可能成功地“降落”在地址 0xbffff458 的 NOP-Pad 中,这比保存的 eip 0xbffff1ec 高得多?

有人可以澄清一下吗?我实际上不知道为什么这是有效的。我的测试机器是没有 ASLR 的 Ubuntu 9.10 32 位机器。受害者有一个可执行堆栈,使用 execstack -s 设置。

提前致谢。