ret2libc3(但是有坑)
仅供个人学习参考
题目:https://raw.githubusercontent.com/GNchen1/Pages/main/Img/pwn
checksec
ida查看,有栈溢出
有个gift函数,这个有大用处
这题会发现按正常ret2libc3来打,会打不通
问题出在init
init函数里面,stdout设置成了全缓冲模式,这种情况下,只有缓冲区满了或者调用fflush才会输出,所以要在调用puts输出libc地址后再调用fflush,然后才能接受到地址
1 | int setvbuf(FILE *stream, char *buf, int mode, size_t size); |
stream: 是一个指向 FILE 结构体的指针,表示要设置缓冲方式的流,比如 stdin, stdout, stderr 等。
buf: 是一个指向用于存储数据的缓冲区的指针。根据不同的值,它可以是一个已分配的缓冲区的指针,也可以是 NULL 来禁用缓冲。
mode: 表示缓冲模式,可以取以下值:
_IOFBF:完全缓冲(Full buffering),数据在填满缓冲区或者调用 fflush 函数时才会写入文件,对应的数字是 0。
_IOLBF:行缓冲(Line buffering),数据在换行符 \n 出现时写入文件,对应的数字是 1。
_IONBF:无缓冲(No buffering),数据立即写入文件,没有缓冲,对应的数字是 2。
exp如下:
1 | from pwn import * |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.