fd


Solution

Given a C file. Let's do some basic checking on it.

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;

}

Based on the source code given, we can see there are 2 lines that are very interesting.

Line 10
  • atoi() function in C converts a string to an integer

  • it takes argv[1] as its argument and substract it with 0x1234 which is 4660 in decimal

  • the result is stored in variable fd

Line 13
  • it compares a strings in variable buf with "LETMEWIN\n"

  • that's it

Between the lines, we can see there is a read() function which takes file descriptor, some buffer and number of bytes. We need to make the file descriptor equals 0 so that we can write a string to the program and pass the if statement in Line 13.

So we input 4660 which then it will substract with 0x1234 and returns 0. Then write LETMEWIN to the program.

Yeah. Nice challenge btw 👍


Flag

mommy! I think I know what a file descriptor is!!

Last updated