pwnable.kr之fd(1)

入坑pwn,发现很棒的pwn题目站点 http://pwnable.kr/

第一题fd 1point

1、登录ssh

2、查看flag,无读取权限

3、查看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;

}

几个要点:

  • 程序至少需要一个参数
  • atoi(arg1) 参数转整型,然后减去0x1234为fd值
  • read(fd,buf,32) == LETMEWIN

所以:

  • arg1 = 0x1234 = 4660,此时fd = 0
  • read()输入字符为“LETMEWIN”

注意:atoi(str)字符串需要十进制表示

运行得到flag

您可能还喜欢...