学习文献:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/others/#stack-smash
以前遇见过一次这种情况,但是是不求甚解的完成了,这次慢慢分析一下原理
栈保护和NX字段都开启了,这里科普一下栈保护,我喜欢叫它金丝雀,链接:https://blog.csdn.net/qq_42192672/article/details/82776113
大概清楚了这个保护的机制以后,显然如果我们利用栈溢出覆盖 argv[0] 为我们想要输出的字符串的地址,那么在 __fortify_fail
函数中就会输出我们想要的信息
接下来就是怎么覆盖了
_IO_getc(stdin)可以栈溢出
memset中可以看见在while循环结束之后执行的语句,如下