PWNABLE-fd

这道题比较简单,但我还是从里面学到了一些我不清晰的C语言知识

题目信息

image-20211129161641566

ssh连接

根据题目信息给的连接方式(ssh)连接到目标机器

1
ssh fd@pwnable.kr -p2222

image-20211129161931529

查看目录文件

image-20211129162154208

不出所料,flag读取文件的权限果然是没有的

查看fd.c文件

image-20211129163002538

分析代码

  • argc:参数个数

  • argv[]:参数数组

  • envp[]:环境参数数组

  • if(argc<2){
                    printf("pass argv[1] a number\n");
                    return 0;
            }
    

    只要大于一个参数就可以绕过这个if语句

  • atoi函数:将字符串转化为int型

  • read函数:ssize_t read(int fd, void * buf, size_t count);

    fd为文件指针,但有以下几种特例:

    fd == 0:从标准输入读取

    fd == 1:从标准输出读取

    fd == 2:从标准错误输出读取

    buf为读取内容的存放空间

    count为读入字节数

  • if(!strcmp("LETMEWIN\n", buf)):当buf内容与前者相同时,条件成立

测试

  1. 使fd == 0:即argv[1] == 4660(0x1234的10进制),让读取内容来源是我们的输入内容
  2. 输入LETMEWIN

image-20211129190341521

得到结果