问题标签 [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.
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的地址。
我有其他选择还是我弄错了?
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 是否还需要?
c++ - 使用 CString 时堆栈粉碎错误
我正在做一个小项目,我完全被卡住了。我正在处理的函数的目的是根据一些预设规则重新排列和更改 Cstring。我的问题在于我提出的交换算法的第二部分。
第一个 for 循环执行完美,输出很好,但第二个 for 循环总是搞砸并最终给我发送一个堆栈粉碎错误。更多参考,sentence 是传递给函数的 cstring,temp1 和 temp2 也是 cstrings。任何指向正确方向的帮助或要点都是天赐之物。谢谢!
assembly - 关于汇编中的内存地址
我现在正在学习 coursera 课程,但我对其中一个阅读材料有疑问。
链接:http: //insecure.org/stf/smashstack.html
我们可以看到,当调用 function() 时,RET 将为 0x8004a8,我们想跳过 0x80004ab 处的赋值。我们要执行的下一条指令是 at 0x8004b2。一个小数学告诉我们距离是 8 个字节。
正如它所说,我们需要做的是为 RET 分配值 0x8004b2。显然,距离将是 10,因为 0x8004b2 减去 0x8004a8 等于 10。
怎么可能是 8 个字节?我哪里错了?
c++ - 如何在 C++ 应用程序中重现“检测到堆栈粉碎”
我在嵌入式 Linux 应用程序中不断收到此错误。我正在尝试定位问题,并将其缩小到以下代码段。
我想解决这个问题,如果不是,我会感谢一些可能导致它的指针。
非常感谢任何有关如何重现此堆栈粉碎问题的建议:
提前致谢。
c - C中的堆栈粉碎/缓冲区溢出
我有这个代码
该错误仅在我们到达指令时发生return 0
。我找不到它的确切位置。我只能说所有信息都是由我(而不是用户)提供的,并且我根据我预测的长度定义了变量。
这是井字游戏的一部分。这是变量
价值观:
strcat()
和strcpy()
函数有关系吗?
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++
),然后运行它。输出是:
对我来说真正奇怪的是,它a
是b
由内部的构造函数初始化的,main_friend_class2.cpp
而不是定义函数的main_friend_class1.cpp
地方test1
。
然后我发现当一个程序用-fstack-protector
flag编译时,可以很容易地调试堆栈粉碎。所以我再次编译它,然后程序的输出是:
所以没有更多的堆栈粉碎问题,但是test1
和test2
函数都使用main_friend_class2.cpp
文件中的构造函数。
这附近发生了什么?我不明白。如果没有缓冲区溢出,为什么会出现堆栈粉碎错误,因为没有使用任何缓冲区?
我的第二个问题是:有没有办法定义多次main_class_friend
,但是在不同的文件中使用它们以使它们对于使用类的文件“私有”?
c - C:检测到堆栈粉碎,但在返回语句之前一切正常
好的,所以在 stackoverflow 上有很多堆栈粉碎检测到的问题,我查看了其中的 6-7 个,但无法清除我的问题。
我在 C 中有一个名为 encryptor 的 void 函数,它接受一个 char 数组,并更新该数组。
这是相应的 int 主要代码:
由于程序流在 return 语句之前到达 print 函数,并且在检测到堆栈粉碎之后,这可能是什么原因
我尝试使用 gdb 调试器,但它显示
程序收到信号 SIGABRT,已中止。0x00007ffff7a55860 in raise () from /usr/lib/libc.so.6
任何人都可以帮助我找出(或任何方式找出)这个错误的原因(我不认为它是因为缓冲区溢出或到达打印功能的东西)
谢谢
c - execv() 系统调用创建堆叠粉碎错误
每当我在代码中使用 execv() 时,它都可以正常工作并且没有错误,但仍然会导致堆栈粉碎在运行时使程序崩溃。我在这里做错什么了吗?这是带有 execv() 的函数:
这是我从中获取 args 和 cmd 的地方。这可能是由我在这里所做的事情引起的吗?
函数调用发生在这里。命令是用户从标准输入输入的。只需要位于/bin/ 中的基本命令。类似 ls -l 或 cat 文件。
c - 函数返回时 C 中的堆栈粉碎
我有一个小程序,可以将 12 小时时间转换为 24 小时时间。
在 timeConversion 函数返回后,我立即看到“堆栈粉碎”。我知道代码的逻辑有效,但无法弄清楚堆栈粉碎。