stack smash
原理:在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 canary 被修改的话,程序就会执行 __stack_chk_fail
函数来打印 argv[0] 指针所指向的字符串,正常情况下,这个指针指向了程序名。所以说如果我们利用栈溢出覆盖 argv[0] 为我们想要输出的字符串的地址,那么在 __fortify_fail
函数中就会输出我们想要的信息。
多进程下的爆破
fork
pid_t fork(void)
创建一个新的进程,操作系统会复制父进程的地址空间中的内容给子进程,调用fork函数后,子进程与父进程的执行顺序是无法确定的。子进程无法通过fork()来创建子进程。
该函数有三种返回值:
1、在父进程中,fork返回新建子进程的进程id
2、在子进程中,fork返回0
3、如果出现错误,fork返回一个负值