본문 바로가기

공부/보안

[pwnable.kr] fd

반응형

[!] hint

read 함수의 파일 디스크립터

 

 

 

fd - 1pt [writeup]

 

[*] 원격 접속의 종류 중 하나로 SSH는 멀리 떨어진 다른 컴퓨터에 접속하여 명령을 실행할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 말한다.

 

SSH는 호스트 주소(IP 또는 도메인)와 사용자 정보(Credential)가 있어야 한다.

 

ssh [user name]@[host name] [-p : 원격 호스트에 연결할 포트를 지정]

를 해주고 pw에 "guest"를 입력하면, 아래와 같이 출력된다.

 

서버에 연결이 되었고, ls 명령어를 통해 fd, fd.c, flag 파일이 있다는 것을 확인했다.

 

ls : 디렉토리 파일 표시 (도스의 dir 명령과 흡사)
ls -al : hidden 속성의 파일을 표시해주는 a 옵션과 파일 종류, 사용권한 등 자세한 정보를 보여주는 옵션

cat flag 의 명령어는 "Permisstion denied" 가 출력되며 거부된다.

 

그렇다면 cat 명령어를 사용하여 fd.c 를 읽어온다.

 

C언어 코드를 해석해보면, char buf[32] 를 전역변수로 할당해준다.

 

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
#include <stdio.h> // 표준 입출력 헤더파일
#include <stdlib.h>
#include <string.h> // 표준 문자열 헤더파일
char buf[32]; // char형의 배열을 32바이트의 크기로 선언했다.
int main(int argc, char* argv[], char* envp[]){
    if(argc<2){ // 인자로 받은 개수가 2보다 작다면 -> 하나만 받았다면
        printf("pass argv[1] a number\n");
        return 0;
    }
    int fd = atoi( argv[1] ) - 0x1234;
    // atoi는 아스키코드를 숫자로 바꾸는 함수이다. 0x1234는 10진수로 4660
    int len = 0// int형 변수 len을 0으로 초기화 해준다.
    len = read(fd, buf, 32);
    // read(파일 디스크립터, 버퍼, 버퍼의 크기)
    if(!strcmp("LETMEWIN\n", buf)){ 
    // strcmp 함수는 문자열을 비교했을때, 같으면 0을 반환하기에 "!"라면 1
        printf("good job :)\n");
        // 칭찬해준다. 칭찬을 받고 싶다.
        system("/bin/cat flag");
        // flag를 출력해준다.
        exit(0); // 프로그램을 종료해준다.
    }
    printf("learn about Linux file IO\n");
    return 0;
 
}
cs

 

argc : argument count : 인자의 갯수(양수 값)

argv : argument vector : 인자의 벡터(문자열의 배열은 argv[argc]로 끝나는데 이는 null 포인터를 포함, argv 배열의 모든 요소는 문자열에 대한 포인터)

envp : 환경 변수에 대한 포인터의 배열로 null 포인터에 의해 종료

 

인자가 한 개인 경우에는 "pass argv[1] a number\n"가 출력되고 종료된다.

 

파일 디스크립터 목적 stdio 스트림
0 표준 입력 stdin
1 표준 출력 stdout
2 표준 에러 stderr

 

입력을 받기 위해 read 함수의 fd가 0이 되어야 한다. 그렇다면 0x1234를 10진수로 바꿔서 보내면 fd는 0이 될 것이다.

 

fd가 0이 되었으므로, 표준 입력을 받을 것이다. 그다음 LETMEWIN 을 입력해주면 flag를 알 수 있다.

반응형

'공부 > 보안' 카테고리의 다른 글

[dreamhack] System Exploitation 3강  (0) 2021.03.07
나 보려고 정리해두는 gdb 명령어  (0) 2021.03.07
[dreamhack] System Exploitation 2강  (0) 2021.03.06
[dreamhack] System Exploitation 1강  (0) 2021.03.04
[pwnable.kr] - collision  (0) 2021.03.01