echo_back
- 这题看了大佬的wp才写出来的,触及到了我的知识盲区。。。
- 参考链接 : http://p4nda.top/2018/05/13/ciscn-ctf-2018/#comments
- x64 ELF | Full Relro , nx , stack canary , pie
- 功能分析:
- 输入一个最长为7个字节的姓名 | 限制设定一次,但可利用漏洞输入多次,没有必要
- echo_back , 输入最长为7个字节的字符串 | 格式化字符串
- 漏洞点:
- 7个字符的格式化字符串
- 利用思路:(3.4. 需要参考scanf 源码,可看参考链接中详细解释,我自己也只是简略的了解了一下,留待以后填这个scanf源码学习的坑。。。)
- 1.栈上有libc地址 , 栈地址 和 函数地址 | 可使用格式化字符串进行leak
- 2.7个字符的格式化字符串,只能设置指定地址1字节为 10以内的值 ,或者 设置指定地址 1,2,4 字节为 0。考虑到修改ret地址为 libc 需要大于10,所以选择第二种用法
- 3.修改 stdin 文件指针中的 _io_buf_base 最低字节为 0 ,将缓冲区设置到 stdin 文件结构体内部,从而可以覆盖 相关指针。将 _io_buf_base 覆盖为 栈ret地址 ,
- 4.然后利用getchar()将 _io_read_ptr 抬高到 与 _io_read_end 相等,再次触发,将main 函数 ret地址覆盖为one_gadget
- 执行退出getshell
网友评论