System hacking/pwnable.kr

PWNABLE.KR [fd]문제

Roronoa 2022. 9. 19. 20:41
반응형

fd 문제

https://pwnable.kr/play.php

 

https://pwnable.kr/play.php

 

pwnable.kr

위의 링크에 들어가면 문제를 풀 수있다.

 

문제 설명

[그림 1] fd 문제 설명

영어를 한번 해석해 보겠다.

엄마 리눅스 파일디스크립트가 뭐야?   - 리눅스 파일 디스크립트에 대한 문제인 것 같다.-

너 혼자 못풀면 링크를 보고 따라해라!!

ssh로 fd@pwnable.kr -p2222로 접속해야한다. 계정의 비밀번호는 guest이다.

문제 풀이

[그림 2] ssh 접속

ssh로 fd@pwnable.kr -p2222로 접속하였다.

계정의 비밀번호는 guest이다.

 

[그림 3] 내용 확인

ls -l 명령어로 디렉토리안에 있는 파일을 자세하게 출력하였다. 파일을 확인해 보니 setUID로 설정되어있는 fd라는 실행파일이 있고, fd.c파일과 flag파일도 보인다.

fd파일을 실행해보니 매개변수가 없다고 뜬다.(매개변수 필요함)

flag파일을 확인해보니 Permission denied로 접근이 제한된다.

실행파일 fd를 알기위해 fd.c의 코드들을 살펴봐야 할 것 같다.

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;

}

소스코드를 보면 매개변수가 2개 이하일경우 매개변수로 숫자를 넣어달라고 한다.

if문안에 LETMEWIN이라는 단어와 buf를 비교하여 같을경우 flag를 읽을 수 있다. buf의 값을 쓰기 위해서는 read함수에 fd값을 0으로 값을 설정을 해야 buf에 값을 입력할 수 있다.(fd 값이 0이면 표준 입력이므로 사용자로부터 입력을 받을 수 있다.)

fd값을 0으로 만들기 위해서는 atoi(argv[1]) -0x1234값이 0이되어야한다. atoi함수는 문자스트링을 정수로 바꾸는 함수이므로 argv[1]에 0x1234의 10진수 값인 4660을 넣어주면 될것이다.

[그림 4] flag 확인

이 문제는 파일디스크립터를 제대로 이해하고 있는지 묻는 문제이다.

반응형

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

PWNABLE.KR [collision]문제  (0) 2022.09.29