问题标签 [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.
c++ - 为什么错误 C6386 缓冲区溢出 strsafe.h StringCch 函数?
所以我用我的 C++ 代码在 VS 2017 中运行了分析。它给了我一个缓冲区溢出,如下所示:
当我单步执行代码时,sTemp 是“0123”,第 4 位当然是 \0。
当我对代码运行分析时,我收到 C6386 错误:
为什么?我还尝试将数组更改为 10,将 StringCchCopy 更改为 5,但仍然出现相同的错误。
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”后系统如何优雅地继续?
任何帮助表示赞赏!
c - 遇到缓冲区溢出问题
外壳代码:https ://www.exploit-db.com/raw/42179
利用代码(python):
漏洞代码(C):
我使用的虚拟机是:ubuntu-9.04-server-amd64 (2.6.28-11)
.
我如何编译易受攻击的代码:
我似乎遇到的问题是我无法弄清楚如何让rip
寄存器转到正确的返回地址。
输出:
有人可以帮忙吗?
c++ - 试图创建类对象的基于堆栈的缓冲区溢出
史前史:我正在创建模板类(HashMap< KeyType, ValueType >),它应该使用哈希表实现映射的抽象。为了解决哈希表中的冲突,使用了链的方法。当我尝试使用构造函数HashMap()初始化main.cpp中的 HashMap 对象时出现错误。
错误:“堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出。”
所以,代码:
私有部分的一部分(仅所有成员变量和方法createBuckets(),在构造函数HashMap()中使用)
最奇怪的是错误很少发生,当它没有发生时,类会成功运行。如果我重新编译程序,则没有错误,并且在下一次重新编译之前不会发生。如果重要的话,我会使用 Visual Studia 2017 来编写这个程序。
我想这个问题是由在方法createBuckets中创建向量引起的,但我看不出有任何问题。
c - 静态代码分析工具报告的缓冲区溢出问题
我的一段代码:
当我运行静态代码分析工具时,我收到以下警告:
在循环的第 19 次迭代中:此代码可以写入 &dest[i * 2] 指向的缓冲区末尾。&dest[i * 2] 计算结果为 [dest + 38]。sprintf() 从 &dest[i * 2] 指向的缓冲区开头的偏移量 38 处开始最多写入 9 个字节,其容量为 41 个字节。写入的字节数可能超过超出该偏移量的分配字节数。溢出发生在堆栈内存中。
我的问题是:由于在每次循环迭代中,我们只从源到目标复制 2 个字节(考虑到机器上 unsigned int 的大小为 2 个字节),那么在最后一次迭代中复制 9 个字节的可能性在哪里?
c - c6386 写入时缓冲区溢出
- 函数名称:expandStack
- 输入:指向堆栈类型的指针 (Stack*)
- 输出:无
- 函数操作:函数展开堆栈
在这一行:expandStack[i].c = stack->content[i].c; 我收到一个“绿色警告”,说:“c6386 缓冲区在写入 'expandedStack' 时溢出:可写大小为 '2 * (stack->size) * sizeof(Element)' 字节,但可能会写入 '2' 字节。
问题是代码工作正常,它可以编译。
c - c6386 写入时缓冲区溢出 - 指针数组
我有两行错误:
getKey(d->pairsArray[i])
d->pairsArray[d->size - 1] = pair;
我似乎无法理解为什么。这些是结构:
它说可能会读取 8 个字节,但我不明白这怎么可能。我知道我可以忽略它,但我仍然想要一个 if 检查来阻止它。
c - 即使禁用了 ASLR 和堆栈编译器保护器,Linux 上的 ROP 也会失败
我关闭了 gcc 堆栈保护器的 ASLR 和 tern。
我编写了易受攻击的 C 代码并试图溢出缓冲区,因此我检查了崩溃需要多少字符。我试图将返回地址更改为另一个函数,但我收到一条消息:
这是我的 C 代码:
我找到了“sss”函数的地址,并尝试插入十六进制值。
这是我的地址:
要编辑我插入的退货地址:
c - 当溢出实际上永远不会发生时,Visual Studio 会发出缓冲区溢出警告
这是我的代码:
该表达式pArr[i] = 1;
给出 C6386 警告
警告 C6386 写入“pArr”时缓冲区溢出:可写大小为“num*sizeof(int)”字节,但可能写入“8”字节。
这很奇怪,因为for
循环的迭代次数和头部数组的大小都取决于num
所以溢出实际上永远不会发生。
然后有一个详细的解释:
i
可能等于 1
pArr
可能是NULL
(继续此循环)
无效写入pArr
,(超出其可写范围)
但这当然是视觉工作室的错误,pArr
不可能NULL
,因为这是进入循环的条件。
如何清除此警告?
谢谢你们
c++ - VS2019:[C6386] 缓冲区溢出而到
我不太确定为什么会收到警告或它的确切含义。将 for 循环中的 size-1 设置为 size-2 会删除警告,但我不明白为什么。