美文网首页
pwnable.kr第一题:fd

pwnable.kr第一题:fd

作者: Cookie_hunter | 来源:发表于2018-09-10 20:45 被阅读0次

    pwnable.kr

    一、要点

    1.argcargv

    对于C语言int main(int argc char *argv[])来说,argc保存的是命令行总的参数个数(包括程序名),argv这是传入参数的数组.
    举个例子,当你执行: ./test 1 2 3 时,argc = 4argv[0] = test",argv[1] = 1,argv[2] = 2,argv[3] = 3

    2.atoi()

    atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。char ======> int

    3.read()

    UNIX/Linux平台上,对于控制台(Console)的标准输入标准输出标准错误输出,也对应了三个文件描述符(即fd = File Description )。它们分别是0,1,2。也就是说read(0,buf,32)表示从键盘读入至多32个字节到buf

    二、解题步骤

    1,查看源码

    命令:cat fd.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    char buf[32];
    int main(int argc, char* argv[], char* envp[]){
        if(argc<2){
            printf("pass argv[1] a number\n");
            return 0;
        }
        int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN\n", buf)){
            printf("good job :)\n");
            system("/bin/cat flag");
            exit(0);
        }
        printf("learn about Linux file IO\n");
        return 0;
    
    }
    
    

    2,分析

    由源码可知,首先agrc要大于等于2,根据提示我们要输入一个数字argv[1],且 argv[1] - 0x1234 = fd = 0,因为 fd 影响read()函数,而我们需要输入LETMIWIN才能完成解题,所以需要是fd = 0.

    3,解题

    注:0x1234 须转换为十进制数 4660
    flag = mommy! I think I know what a file descriptor is!!

    相关文章

      网友评论

          本文标题:pwnable.kr第一题:fd

          本文链接:https://www.haomeiwen.com/subject/lmdegftx.html