티스토리 뷰

System/Pwnable.kr

[Pwnable.kr] fd

MitNy 2017. 8. 14. 20:28



pwnable.kr 의 첫번째 문제 fd는 Mommy! what is a file descriptor in Linux?


ssh로 문제에 접속해서 먼저 파일 목록부터 봤다.


fd@ubuntu:~$ ls -l

total 16

-r-sr-x--- 1 fd_pwn fd   7322 Jun 11  2014 fd

-rw-r--r-- 1 root   root  418 Jun 11  2014 fd.c

-r--r----- 1 fd_pwn root   50 Jun 11  2014 flag



이렇게 fd fd.c flag 파일이 있는 것을 볼 수 있다.

flag 파일은 Permission denied 가 뜨기 때문에 접근할 수 없지만

fd 파일은 실행할 수 있고 fd.c 파일은 읽을 수 있다.


fd.c 파일을 먼저 읽어보자.



fd@ubuntu:~$ vi 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;


}



코드를 해석해보면

buffer는 32고 인자가 2보다 적으면 "pass argv[1] a number\n"가 출력되면서 종료된다.

변수 fd는 argv[1] 를 atoi 함수를 통해 문자열을 정수로 변환시킨 값에서 0x1234를 뺀 값이다.

len은 fd에서 32바이트만큼 읽어들여 buf 변수에 저장한 값이다.

그 다음 buf와 LETMEWIN을 strcmp 함수로 비교해서 같으면 goob job :) 메시지와 함께 flag 파일을 실행시킨 후 종료한다.

buf와 LETMEWIN이 같지 않으면 learn about Linux file IO 메시지가 출력되고 종료한다.


★ strcmp 함수는 둘의 값이 같을때 0을 반환하지만 if문에서 0을 거짓으로 보기 때문에 ! 를 붙여주는 것



# 0x1234 hex값을 10진수로 바꿔보면 4660이다.



fd 는 입력한 숫자에서 4660을 뺀 값이므로,

입력하는 숫자를 4660으로 해주면 fd는 0이 되게 된다.

fd가 0이 된 상태에서 LETMEWIN 을 입력하면 fd에는 그대로 LETMEWIN이 들어가게 된다.

그 후에 fd에 있는 32바이트 만큼을 buf에 저장하면 buf에는 LETMEWIN이 저장되고, strcmp 함수를 통해 비교하면 일치하게 되는 것이다.




fd@ubuntu:~$ ./fd 4660

LETMEWIN

good job :)

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



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



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

[Pwnable.kr] random  (0) 2017.10.12
[Pwnable.kr] bof  (0) 2017.08.30
[Pwnable.kr] collision  (0) 2017.08.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함