问题标签 [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.
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# 中禁用这种保护?
c - 如何在 GCC、windows XP、x86 中编写缓冲区溢出漏洞利用程序?
上面的演示来自这里:
http://insecure.org/stf/smashstack.html
但它在这里不起作用:
我不明白为什么它是 8 虽然作者认为:
一个小数学告诉我们距离是 8 个字节。
我的 gdb 转储称为:
在我的情况下,距离应该是 - = 5,对吗?但它似乎不起作用..
为什么局部变量function
需要56个字节?(sub $0x38,%esp
)
visual-c++ - 'sprintf' 方法是否有默认缓冲区长度?
我使用 sprintf 方法将数据格式化为我想写入文件的字符串,在 C++ 控制台应用程序中使用 VS 2008。输入是一个特定的消息,它有各种变量和值(例如:类型'int'和值' 10' / 键入字符串和值“abc”等)当我发送两条消息时,它工作得很好。但是当我发送两个以上的消息时,它会给出一个运行时错误,说0xC0000005: Access violation reading location 0xabababab。为什么会这样?是因为方法 'sprintf' 具有默认缓冲区长度吗?我该如何克服这个问题?
wcf - 作为 WCF 合同中的字节数组的 [DataMember] 是否存在安全隐患?
我是否将我的服务暴露于缓冲区溢出攻击?如果是这样,您将如何防御这种情况?
c - 学生缓冲区溢出图解(linux、C)
我的朋友是一年级 CS 学生的老师。我们想向他们展示缓冲区溢出利用。但是现代发行版受到简单缓冲区溢出的保护:
在 debian 上(责备它)
关于现代商业红帽
对于来自互联网的更多合成示例,相同的检测器失败了。
我们如何使用现代非 GPL 发行版演示缓冲区溢出(类中没有 debian)
我们怎么能
- 禁用堆栈中的金丝雀字检查?
- 禁用检查 strcpy/strcat 的变体?
- 写一个工作缓冲区溢出的例子(用纯 C 语言)?
c - 关于缓冲区溢出
我是道德黑客世界的新手,最重要的事情之一是堆栈溢出,无论如何我编写了一个有 char name [400] 语句的易受攻击的 C 程序,当我尝试使用 401A 运行程序时它没有'不会溢出,但是我正在关注的书说它必须溢出并且逻辑意义上说是这样,所以出了什么问题???
assembly - 汇编程序中的 Printf 不打印
我有一个使用缓冲区溢出来破解程序的作业(通过反汇编,程序是用 C++ 编写的,我没有源代码)。我已经解决了它,但我有一个问题。我必须在屏幕上打印一些消息,所以我找到了 printf 函数的地址、堆栈上的“HACKED”地址和“%s”地址(按此顺序)并调用了该函数。调用的代码顺利通过,但没有打印任何内容。
我试图模拟程序中其他地方的环境,但一定有问题。你知道我做错了什么,我没有输出吗?非常感谢
编辑:
该程序在 Windows XP SP3 32b 上运行,用 C++ 编写,Intel asm
有“黑客”代码
程序开始:
这段代码真的很难看,因为我是汇编程序的新手,而且由于缓冲区溢出错误,不能有空字节
c - 在缓冲区溢出方面需要帮助
我有一个缓冲区溢出,我绝对看不到(在 C 中)。首先,它只发生在大约 10% 的时间里。它每次从数据库中提取的数据在执行之间似乎并没有太大的不同……至少差异不足以让我找到任何可辨别的模式来确定它何时发生。来自 Visual Studio 的确切消息是这样的:
hub.exe 中发生缓冲区溢出,损坏了程序的内部状态。按 Break 调试程序或按 Continue 终止程序。
有关详细信息,请参阅帮助主题“如何调试缓冲区溢出问题”。
如果我调试,我发现它被破坏了__report_gsfailure()
,我很确定这是来自编译器上的 /GS 标志,并且还表示这是堆栈而不是堆上的溢出。我还可以看到它在离开时抛出的功能,但我看不到任何会导致这种行为的东西,该功能也已经存在了很长时间(10 多年,尽管有一些小的修改)据我所知,这从未发生过。
我会发布函数的代码,但它相当长并且引用了许多专有函数/变量/等。
我基本上只是在寻找一些关于我应该寻找的我没有的想法,或者一些可能有帮助的工具。不幸的是,我发现的几乎所有工具都只能帮助调试堆上的溢出,除非我弄错了,否则它在堆栈上。提前致谢。
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 设置。
提前致谢。