问题标签 [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++ - 这个缓冲区溢出的后果?
所以在这里我相信我在查看别人的代码时发现了一个小的缓冲区溢出问题。它立即让我觉得不正确,并且有潜在的危险,但我承认我无法解释这个“错误”的实际后果,如果有的话。
我编写了一个测试应用程序来演示该错误,但发现(令我沮丧的是)无论溢出如何,它似乎都能正常运行。我想相信这只是偶然,但想要一些反馈来确定我的想法是否错误,或者这里是否真的存在问题,只是没有在我的测试应用程序中显示出来。
问题代码(无论如何我认为是):
现在,这对我来说很突出并且我想将其标记为可能的缓冲区溢出的原因是因为第一个strlen
. 由于指针算术,'不正确'的位置+ 1
将导致strlen
返回26
而不是27
(取“他的字符串长度为 27 个字符”的长度)。sprintf
,我相信,然后将 27 char 打印到缓冲区中并导致缓冲区溢出。
这是正确的评价吗?
我编写了一个测试应用程序来为我正在查看的代码的人演示这一点,并发现即使在调试器中字符串也会正确打印。我还尝试在此代码之前和之后将其他变量放在堆栈和堆上,以查看是否会影响相邻的内存区域,但仍能收到正确的输出。我意识到我新分配的堆内存可能不相邻,这可以解释缺乏有用的溢出,但我真的很想确认其他人的意见,如果这确实是一个问题。
由于这是一个非常简单的“问题”,如果您也可以通过某种参考来支持您的答案,那就太好了。虽然我重视并欢迎您的意见,但我不会接受“是的”作为最终答案。预先感谢您。
更新:很多很好的答案,还有很多额外的见解。不幸的是,我不能全部接受。感谢您分享您的知识并成为我的“第二意见”。我很感激帮助。
c++ - 强类型可以防止缓冲区溢出吗?
强类型,在这种情况下是char防止缓冲区溢出吗?
security - Buffer溢出攻击的防范技术有哪些?
防止缓冲区溢出攻击的想法是什么?我听说过 Stackguard,但到目前为止,这个问题是通过应用 stackguard 或与其他技术结合来完全解决的吗?
热身后,作为一个有经验的程序员
为什么你认为为缓冲区溢出攻击提供足够的 防御如此困难?
编辑:感谢所有答案并保持安全标签处于活动状态:)
buffer - 故意缓冲区溢出漏洞利用程序
我正在尝试为我的一个 comp sci 课程找出这个问题,我已经利用了所有资源,但仍然遇到问题,如果有人可以提供一些见解,我将不胜感激。
我有这个“目标”,我需要使用缓冲区溢出漏洞执行 execve(“/bin/sh”)。在buf[128]的溢出中,当执行不安全的命令strcpy时,一个指向缓冲区的指针出现在系统期望找到返回地址的位置。
目标.c
漏洞利用.c
外壳代码.h
我知道我需要用超过 128 个字节填充 argv[1],超过 128 个字节是返回地址,它应该指向缓冲区,以便在其中执行 /bin/sh。到目前为止是正确的吗?有人可以提供下一步吗?
非常感谢您的帮助。
linux - Linux 发行版容易受到缓冲区溢出的影响
我需要在课堂上演示缓冲区溢出。有人可以建议我分发和下载它的地方吗?
我尝试了 DVL,但它没有提供所需的输出。
c# - 堆/缓冲区溢出异常
只是好奇,在 C# 中是否有或是否有人遇到过堆/缓冲区溢出异常?
assembly - 如何解释以下 shellcode 漏洞利用的行为?
这是一个利用bufferoverflow漏洞的shellcode。它setuid(0)
使用 设置并生成一个 shell execve()
。以下是我解释它的方式:
任何人都可以清楚地解释整个步骤吗?
c++ - C++中的字符串溢出?这种无休止的哔哔声很奇怪
我开始在垃圾文件生成器上进行开发,但是由于某种原因,如果我使用大量文件,它将无限发出哔哔声,直到文件完成,我认为 ascii 表中的某处有一个 \a 字符,或者它正在溢出并导致错误提示音。有人想解释为什么这东西对我尖叫吗?
似乎在这一点上,这些字符最终会出现,但它只将其中的 1/4 写入文本文件。有谁知道为什么?
c - 缓冲区溢出问题
我正在尝试运行缓冲区溢出示例来运行一些代码,但问题是当我尝试运行代码只是为了获得缓冲区溢出时,Windows 会提示“程序已停止工作,Windows 正在检查程序的解决方案。因此,当我尝试确保它仅溢出一个字节时。程序只是运行,但不会暂停命令窗口以让我看到分段错误错误地址。据我所知我需要为了改变它并让它运行我想要的窗口作为传递的参数。这是一个简单的程序。
visual-studio-2010 - wchar_t 在 Visual Studio 中是 2 字节,存储 UTF-16。Unicode 感知应用程序如何处理 U+FFFF 以上的字符?
我们公司正计划让我们的应用程序支持 Unicode,并且我们正在分析我们将遇到的问题。
特别是,例如,我们的应用程序将严重依赖字符串的长度,我们希望将其wchar_t
用作基本字符类。
当处理必须在 UTF-16 中以 2 个 16 位为单位存储的字符时出现问题,即 U+10000 以上的字符。
简单的例子:
我有 UTF-8 字符串“蟂”(Unicode 字符 U+87C2,在 UTF-8 中:E8 9F 82)
所以,我设置了以下代码:
好的,这行得通,它分配了两次 16 位,我的缓冲区wchar_t
包含 { 0x87c2, 0x0000 }。如果我将它存储在 a 中std::wstring
并计算大小,我得到 1。
现在,让我们以字符 (U+104A2) 作为输入,在 UTF-8 中:F0 90 92 A2。
这一次,它为三个 wchar_t 分配空间并且 std::wstring::size 返回 2即使我认为我只有一个 character。
这是有问题的。让我们假设我们以 UTF-8 格式接收数据。我们可以简单地通过不计算等于的字节来计算 Unicode 字符10xxxxxx
。我们想将该数据导入到数组中wchar_t
以使用它。如果我们只是分配字符数加一,它可能是安全的……直到有人使用 U+FFFF 以上的字符。然后我们的缓冲区将太短,我们的应用程序将崩溃。
那么,对于相同的字符串,以不同的方式编码,计算字符串中字符数的函数会返回不同的值吗?
使用 Unicode 字符串的应用程序是如何设计的以避免这种烦恼?
谢谢您的回复。