我现在正在尝试从站点pwnable.kr进行缓冲区溢出练习, 我找到了应该输入到 gets 函数但得到“检测到堆栈粉碎”的字符串,然后我在 rickgray.me中找到了解决方案
他们建议 (python -c 'print "A" * 52 + "\xbe\xba\xfe\xca"'; cat -) | nc pwnable.kr 9000
这有效,不知何故添加“cat -”命令克服了金丝雀。我不明白为什么会这样
我现在正在尝试从站点pwnable.kr进行缓冲区溢出练习, 我找到了应该输入到 gets 函数但得到“检测到堆栈粉碎”的字符串,然后我在 rickgray.me中找到了解决方案
他们建议 (python -c 'print "A" * 52 + "\xbe\xba\xfe\xca"'; cat -) | nc pwnable.kr 9000
这有效,不知何故添加“cat -”命令克服了金丝雀。我不明白为什么会这样
这避免了堆栈粉碎检测,因为堆栈 cookie/canary 的检查仅发生在函数的结尾处。
由于您发布的挑战需要直接在堆栈上粉碎用于同一函数中的逻辑检查的东西,因此在您收到 shell 时不会检查金丝雀。
金丝雀主要防止堆栈粉碎覆盖返回地址。
关于存在 cat 命令以允许输入/输出重定向的问题的评论是正确的,否则外壳会打开并立即关闭。