栈溢出进阶(上)

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返回一个负值



posted @ 2022-01-17 22:34  vi0let  阅读(50)  评论(0编辑  收藏  举报