实验室看到的一个问题

1.PNG
可以先思考思考为啥?学弟问的问题,明显就是没有做好交互,但为啥会一起发送呢?

我去网上找了找相关知识,
B12262FE6DF289C7494B2771A7C12E24.png

突然来了点思路,但还是不确定,不如自己去写过c程序试试呗。
2.PNG

源码如下:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
    char* buf;
    unsigned int nbytes;
    puts("[+]Please inputs the length of your name");
    scanf("%d",&nbytes);
    puts("[+]What's u name?");
    read(0,buf,nbytes);

    return 0;
}

结合scanf遇到空格符会停下,我构造payload

payload = b'-1' + b'\x0a' + b'aaaaaaaaaaaaaaaaaaaa'

3.PNG

可以看到换行符后面的内容也读入进去了。

现在回来看看问题。猜测会不会是scanf和read的缓冲区不一样呢?
4.PNG

问了问chatgpt,得到了准确的答案。我也学习到了,io流和标准输入流的缓冲区不一样。

下次还是要做好交互吧!