fd

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


#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.
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