小白一只,有错误的地方还请各位师傅指正。
Stack37(32位)
每天下午抖音(47253061271)直播刷pwn题,欢迎各位师傅讨论
反汇编
在这里刷新了标准输入输出流,将缓冲模式设置为_IONBF,不经过缓冲区。
补充:
setvbuf 是一个 C标准库函数,用于控制输出流的缓冲行为。它允许你设置流的缓冲方式、缓冲区的大小,以及是否使用自定义缓冲区。这个函数可以用于 stdin、stdout 或 stderr 等标准输入输出流,也可以用于其他文件流。
函数原型
int setvbuf(FILE *stream, char *buffer, int mode, size_t size);
1
参数说明:
stream:
这是一个指向 FILE 类型的指针,表示需要设置缓冲区的流。常见的值有:
stdout:标准输出流
stdin:标准输入流
stderr:标准错误流
也可以是其他打开的文件流(通过 fopen 等函数获得)。
buffer:
这是一个字符数组指针,指向你希望用于缓冲的自定义缓冲区。如果传入 NULL,库函数将自动为该流分配缓冲区。
mode:
缓冲模式,用于指定缓冲区的工作方式。常见的缓冲模式有:
_IOFBF:全缓冲模式(Fully Buffered)。数据会被缓存在内存中,直到缓冲区满或者程序结束时才会写入目标设备。
_IOLBF:行缓冲模式(Line Buffered)。每当遇到换行符时,缓冲区会自动刷新,将内容写入目标设备。
_IONBF:无缓冲模式(No Buffering)。数据会立即写入设备,不使用任何缓冲区。
size:
指定缓冲区的大小(以字节为单位)。在全缓冲模式和行缓冲模式下,数据会被暂存于这个大小的缓冲区中。无缓冲模式下,这个参数被忽略。
返回值:
如果设置成功,setvbuf 返回 0。
如果出现错误(如无效的流或不允许的缓冲区大小),则返回非零值。
原文链接:C_C++:setvbuf()函数详解-CSDN博客
发现有溢出,可以写入14字节,但是可以读入0x32字节,距离栈底0x12
后门函数
总体思路,可以通过溢出,将ret地址覆盖为后门函数地址
Exp:
Stack38
64位:
只是改为64位的elf文件,只需要加上ret,其他的和32位相同。
Exp:
补:from exp import *这里的exp是自己写的针对pwn题模版的py文件