问题标签 [stack-smash]

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 投票
1 回答
384 浏览

buffer-overflow - 带有非执行堆栈的 BOF

我试图通过这个“游戏”的第 2 级http://smashthestack.org/faq.html (通过黑盒服务器上的 ssh 连接),它包含一个基本的缓冲区溢出。

在目录 /home/level2 中(每个级别都有一个目录,其中包含一个包含该级别密码的文件)有一个名为 getowner 的可执行文件及其源代码:

拥有可执行文件的用户是level3

因此,如果我可以利用缓冲区溢出并生成一个 shell 作为 level3,我可以读取文件 /home/level3/password,获取密码并赢得关卡:我说的对吗?

所以

1)我尝试在环境变量中上传shellcode并伪造文件名变量以修改堆栈中的返回地址以返回shellcode,但如您所见

堆栈中的代码无法执行。

2)然后,我尝试使用 Return-to-libc 攻击并调用系统(/bin/bash),但在生成的 shell 中我仍然是 level2 用户:(

其中system()的地址中的0xb7ee59b0,0xb7edb420是exit()的地址,0xbffffe32是字符串/bin/bash的地址。

我有其他选择还是我弄错了?

0 投票
2 回答
2446 浏览

ios - 如何检测 iOS 应用程序中是否启用了堆栈粉碎保护

我希望能够检查是否在基于 Xcode 9 且目标为 iOS 11 的 iOS 应用程序中启用了堆栈粉碎保护(-fstack-protector-all)。

我构建了一个在“其他 C 标志”中启用了 -fstack-protector-all 的应用程序,它确实构建并运行了,但是如何验证堆栈粉碎保护是否已启用?

那里有很多较旧的(2013 年及更早的)资源提到otool -Iv appName |grep stack_chk,但我在我的应用程序二进制文件上运行了它,并且在输出中找不到 stack_chk。

是否有与该命令等效的现代命令?考虑到 Xcode 中的当前默认设置,-fstack-protector-all 是否还需要?

0 投票
0 回答
41 浏览

c++ - 使用 CString 时堆栈粉碎错误

我正在做一个小项目,我完全被卡住了。我正在处理的函数的目的是根据一些预设规则重新排列和更改 Cstring。我的问题在于我提出的交换算法的第二部分。

第一个 for 循环执行完美,输出很好,但第二个 for 循环总是搞砸并最终给我发送一个堆栈粉碎错误。更多参考,sentence 是传递给函数的 cstring,temp1 和 temp2 也是 cstrings。任何指向正确方向的帮助或要点都是天赐之物。谢谢!

0 投票
0 回答
124 浏览

assembly - 关于汇编中的内存地址

我现在正在学习 coursera 课程,但我对其中一个阅读材料有疑问。

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


我们可以看到,当调用 function() 时,RET 将为 0x8004a8,我们想跳过 0x80004ab 处的赋值。我们要执行的下一条指令是 at 0x8004b2。一个小数学告诉我们距离是 8 个字节。

正如它所说,我们需要做的是为 RET 分配值 0x8004b2。显然,距离将是 10,因为 0x8004b2 减去 0x8004a8 等于 10。

怎么可能是 8 个字节?我哪里错了?

0 投票
2 回答
144 浏览

c++ - 如何在 C++ 应用程序中重现“检测到堆栈粉碎”

我在嵌入式 Linux 应用程序中不断收到此错误。我正在尝试定位问题,并将其缩小到以下代码段。

我想解决这个问题,如果不是,我会感谢一些可能导致它的指针。

非常感谢任何有关如何重现此堆栈粉碎问题的建议:

提前致谢。

0 投票
1 回答
198 浏览

c - C中的堆栈粉碎/缓冲区溢出

我有这个代码

该错误仅在我们到达指令时发生return 0。我找不到它的确切位置。我只能说所有信息都是由我(而不是用户)提供的,并且我根据我预测的长度定义了变量。
这是井字游戏的一部分。这是变量

价值观:

strcat()strcpy()函数有关系吗?

0 投票
0 回答
32 浏览

c++ - 有意的友元类重定义和-fstack-protector

我一直在尝试测试不同.cpp文件中朋友类的多个定义是否有效。为此,我在main_class.hpp文件中定义了一个主类:

然后我定义main_class_friend了两次,首先是在main_friend_class1.cpp文件中:

和相应的公共测试功能:

然后我定义了第二个main_class_friend内部main_friend_class2.cpp和一个相应的公共测试函数:

最后我在 main 中调用test1并运行:test2

编译程序(没有错误g++),然后运行它。输出是:

对我来说真正奇怪的是,它ab由内部的构造函数初始化的,main_friend_class2.cpp而不是定义函数的main_friend_class1.cpp地方test1

然后我发现当一个程序用-fstack-protectorflag编译时,可以很容易地调试堆栈粉碎。所以我再次编译它,然后程序的输出是:

所以没有更多的堆栈粉碎问题,但是test1test2函数都使用main_friend_class2.cpp文件中的构造函数。

这附近发生了什么?我不明白。如果没有缓冲区溢出,为什么会出现堆栈粉碎错误,因为没有使用任何缓冲区?

我的第二个问题是:有没有办法定义多次main_class_friend,但是在不同的文件中使用它们以使它们对于使用类的文件“私有”?

0 投票
1 回答
1343 浏览

c - C:检测到堆栈粉碎,但在返回语句之前一切正常

好的,所以在 stackoverflow 上有很多堆栈粉碎检测到的问题,我查看了其中的 6-7 个,但无法清除我的问题。

我在 C 中有一个名为 encryptor 的 void 函数,它接受一个 char 数组,并更新该数组。

这是相应的 int 主要代码:

由于程序流在 return 语句之前到达 print 函数,并且在检测到堆栈粉碎之后,这可能是什么原因

我尝试使用 gdb 调试器,但它显示

程序收到信号 SIGABRT,已中止。0x00007ffff7a55860 in raise () from /usr/lib/libc.so.6

任何人都可以帮助我找出(或任何方式找出)这个错误的原因(我不认为它是因为缓冲区溢出或到达打印功能的东西)

谢谢

0 投票
1 回答
140 浏览

c - execv() 系统调用创建堆叠粉碎错误

每当我在代码中使用 execv() 时,它都可以正常工作并且没有错误,但仍然会导致堆栈粉碎在运行时使程序崩溃。我在这里做错什么了吗?这是带有 execv() 的函数:

这是我从中获取 args 和 cmd 的地方。这可能是由我在这里所做的事情引起的吗?

函数调用发生在这里。命令是用户从标准输入输入的。只需要位于/bin/ 中的基本命令。类似 ls -l 或 cat 文件。

0 投票
1 回答
961 浏览

c - 函数返回时 C 中的堆栈粉碎

我有一个小程序,可以将 12 小时时间转换为 24 小时时间。

在 timeConversion 函数返回后,我立即看到“堆栈粉碎”。我知道代码的逻辑有效,但无法弄清楚堆栈粉碎。