Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 6. 18. 00:12
Pwnable (1. fd) Wargame/Pwnable
728x90

이번 포스트에서는 Pwnable의 fd 문제에 대해 다루겠다.

 


문제 코드는 다음과 같다.

#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;

}

## 문제 해석 :

문제 코드를 살펴 보니, 우리가 기입한 첫 번째 argv에 0x1234를 뺀 후의 값이 file descriptor 값이 되어 read() 함수에 들어간다.

 

또한 read() 함수에 저장 된 buf의 값 중 "LETMEWIN"과 같다면 Flag를 획득할 수 있는 것으로 보인다.

## 문제 풀이 :

먼저 File Descriptor에 대한 정의를 정리하겠다.

번호 설명 이름 파일스트립
0 표준 입력 STDIN_FILENO stdin
1 표준 출력 STDOUT_FILENO stdout
2 표준 에러 STDERR_FILENO stderr

여기서 우리는 표준 입력을 통해 "LETMEWIN"을 입력하므로써 문제를 풀어보도록 하겠다.

 

0x1234의 10진수 값이 4660이기 때문에 4660을 그대로 argument로 넣으면 4660(0x1234) - 0x1234 = 0이 성립하므로 우리가 원하는 표준입력(0)을 얻을 수 있다.

 

## 최종 결과 : 

공격 실행

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

'Wargame > Pwnable' 카테고리의 다른 글

Pwnable (6. random)  (0) 2022.07.04
Pwnable (5. passcode)  (0) 2022.07.03
Pwnable (4. flag)  (0) 2022.07.02
Pwnable (3. bof)  (0) 2022.06.22
Pwnable (2. collision)  (0) 2022.06.19
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!