问题标签 [buffer-overrun]

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 回答
269 浏览

c++ - 为什么错误 C6386 缓冲区溢出 strsafe.h StringCch 函数?

所以我用我的 C++ 代码在 VS 2017 中运行了分析。它给了我一个缓冲区溢出,如下所示:

当我单步执行代码时,sTemp 是“0123”,第 4 位当然是 \0。

当我对代码运行分析时,我收到 C6386 错误:

为什么?我还尝试将数组更改为 10,将 StringCchCopy 更改为 5,但仍然出现相同的错误。

0 投票
1 回答
335 浏览

stack - execve缓冲区溢出成功完成后的CPU执行流程?..int 0x80 成功完成后?

我正在学习 Linux 下的缓冲区溢出 shellcode 方法。https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/

我使用的 shellcode 以 movb $0x0b, %a1 和 int $0x80 结尾。shellcode 执行,我得到我的命令提示符。我读过很多地方 execve 和 int 0x80 “不返回”。好吧.. 好吧,但是当 execve 进程成功并退出时(也就是我在命令行提示符下输入“exit”),~does~ 程序执行流在哪里?

我认为调用程序的堆栈框架已替换为新的 execve 代码信息。新的 execve 代码是否保留了被覆盖进程的返回地址并返回到该地址,就好像它是它自己的一样?(所以它确实有点返回 .. 到借来的地址?)就 int $0x80 而言,在 int 0x80 指令之后的下一个字节处不会继续执行吗?如果不是,下一个字节是什么?

在缓冲区溢出问题和 int 0x80 的上下文中,比如说(例如)一个 517 字节的 hack 会覆盖一个 24 字节的缓冲区。字节将替换缓冲区之外的堆栈内存地址的值,包括指向堆栈中更高的可执行代码的返回地址。但是故意的代码会在内存中更高的 100 个其他堆栈字节上踩踏,破坏不相关的外部范围进程的堆栈帧。使用这些被破坏的堆栈帧,当......

1)当shell从int 0x80返回并执行更多不属于hack的堆栈数据时。现在有什么未指定的字节可能是无效的 CPU 操作码。

2)外部堆栈帧的上下文已被破坏,那么在我的shell命令提示符下输入“exit”后系统如何优雅地继续?

任何帮助表示赞赏!

0 投票
0 回答
119 浏览

c - 遇到缓冲区溢出问题

外壳代码:https ://www.exploit-db.com/raw/42179

利用代码(python):

漏洞代码(C):

我使用的虚拟机是:ubuntu-9.04-server-amd64 (2.6.28-11).

我如何编译易受攻击的代码:

我似乎遇到的问题是我无法弄清楚如何让rip寄存器转到正确的返回地址。

输出:

有人可以帮忙吗?

0 投票
0 回答
219 浏览

c++ - 试图创建类对象的基于堆栈的缓冲区溢出

史前史:我正在创建模板类(HashMap< KeyType, ValueType >),它应该使用哈希表实现映射的抽象。为了解决哈希表中的冲突,使用了链的方法。当我尝试使用构造函数HashMap()初始化main.cpp中的 HashMap 对象时出现错误。

错误:“堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出。”

所以,代码:

私有部分的一部分(仅所有成员变量和方法createBuckets(),在构造函数HashMap()中使用)

最奇怪的是错误很少发生,当它没有发生时,类会成功运行。如果我重新编译程序,则没有错误,并且在下一次重新编译之前不会发生。如果重要的话,我会使用 Visual Studia 2017 来编写这个程序。

我想这个问题是由在方法createBuckets中创建向量引起的,但我看不出有任何问题。

0 投票
1 回答
119 浏览

c - 静态代码分析工具报告的缓冲区溢出问题

我的一段代码:

当我运行静态代码分析工具时,我收到以下警告:

在循环的第 19 次迭代中:此代码可以写入 &dest[i * 2] 指向的缓冲区末尾。&dest[i * 2] 计算结果为 [dest + 38]。sprintf() 从 &dest[i * 2] 指向的缓冲区开头的偏移量 38 处开始最多写入 9 个字节,其容量为 41 个字节。写入的字节数可能超过超出该偏移量的分配字节数。溢出发生在堆栈内存中。

我的问题是:由于在每次循环迭代中,我们只从源到目标复制 2 个字节(考虑到机器上 unsigned int 的大小为 2 个字节),那么在最后一次迭代中复制 9 个字节的可能性在哪里?

0 投票
2 回答
2458 浏览

c - c6386 写入时缓冲区溢出

  • 函数名称:expandStack
  • 输入:指向堆栈类型的指针 (Stack*)
  • 输出:无
  • 函数操作:函数展开堆栈

在这一行:expandStack[i].c = stack->content[i].c; 我收到一个“绿色警告”,说:“c6386 缓冲区在写入 'expandedStack' 时溢出:可写大小为 '2 * (stack->size) * sizeof(Element)' 字节,但可能会写入 '2' 字节。

问题是代码工作正常,它可以编译。

0 投票
0 回答
266 浏览

c - c6386 写入时缓冲区溢出 - 指针数组

我有两行错误:

  1. getKey(d->pairsArray[i])
  2. d->pairsArray[d->size - 1] = pair;

我似乎无法理解为什么。这些是结构:

它说可能会读取 8 个字节,但我不明白这怎么可能。我知道我可以忽略它,但我仍然想要一个 if 检查来阻止它。

这些是我写的行的错误

0 投票
1 回答
108 浏览

c - 即使禁用了 ASLR 和堆栈编译器保护器,Linux 上的 ROP 也会失败

我关闭了 gcc 堆栈保护器的 ASLR 和 tern。

我编写了易受攻击的 C 代码并试图溢出缓冲区,因此我检查了崩溃需要多少字符。我试图将返回地址更改为另一个函数,但我收到一条消息:

这是我的 C 代码:

我找到了“sss”函数的地址,并尝试插入十六进制值。

这是我的地址:

要编辑我插入的退货地址:

0 投票
2 回答
162 浏览

c - 当溢出实际上永远不会发生时,Visual Studio 会发出缓冲区溢出警告

这是我的代码:

该表达式pArr[i] = 1;给出 C6386 警告

警告 C6386 写入“pArr”时缓冲区溢出:可写大小为“num*sizeof(int)”字节,但可能写入“8”字节。

这很奇怪,因为for循环的迭代次数和头部数组的大小都取决于num所以溢出实际上永远不会发生。

然后有一个详细的解释:

i可能等于 1
pArr可能是NULL(继续此循环)
无效写入pArr,(超出其可写范围)

但这当然是视觉工作室的错误,pArr不可能NULL,因为这是进入循环的条件。

如何清除此警告?
谢谢你们

0 投票
2 回答
116 浏览

c++ - VS2019:[C6386] 缓冲区溢出而到

我不太确定为什么会收到警告或它的确切含义。将 for 循环中的 size-1 设置为 size-2 会删除警告,但我不明白为什么。