[pwnable.kr] fd(1 pt) :: Write-Up
두비니
·2019. 11. 8. 20:04
Mommy! what is a file descriptor in Linux?
- try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:
https://youtu.be/971eZhMHQQw
ssh fd@pwnable.kr -p2222 (pw:guest)
fd@prowl:~$ ls
fd fd.c flag
fd@prowl:~$ cat flag
cat: flag: Permission denied
fd, fd.c, flag파일이 있네요.
보아하니 flag파일이 있는데 당연히도 권한이 없구요.
그래서 fd.c파일을 열어보았습니다.
fd@prowl:~$ nl fd.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 char buf[32];
5 int main(int argc, char* argv[], char* envp[]){
6 if(argc<2){
7 printf("pass argv[1] a number\n");
8 return 0;
9 }
10 int fd = atoi( argv[1] ) - 0x1234;
11 int len = 0;
12 len = read(fd, buf, 32);
13 if(!strcmp("LETMEWIN\n", buf)){
14 printf("good job :)\n");
15 system("/bin/cat flag");
16 exit(0);
17 }
18 printf("learn about Linux file IO\n");
19 return 0;
20 }
보면 argv[1]의 값으로 fd를 정하고, read를 받네요.
그럼 여기서 read함수에 대해서 알아보도록 합시다.
#include <unistd.h>
ssize_t read (int fd, void *buf, size_t len) |
||
입력 인자 |
int fd |
open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 |
void* buf |
파일에서 읽은 데이터를 저장할 메모리 공간 |
|
len |
읽을 데이터의 크기(Byte 단위) |
|
반환값 |
ssize_t |
파일 읽기 성공 : 0 보다 큰 수 읽을 데이터 없을 시 : 0 (EOF : End Of File 파일의 끝을 만났을 때) |
다음은 read함수의 원형입니다. 보면 fd는 open() 시스템 콜로 열린 파일을 기리키는 지정 번호임을 알 수 있죠?
조금만 더 알아봅시다.
위의 글을 읽고 오면
0번은 표준 입력으로, 우리가 입력할 때 쓰는 키보드를 뜻하고,
1번은 표준 출력으로, 보통 모니터를 뜻합니다.
2번은 표준 에러로, 그냥 에러가 발생한다고 알려주는 것 같아요
그러면 다시 c코드로 돌아와서,
10번 줄에서 buf에 정상적으로 값을 입력해주고싶으면, fd가 0이 되어야겠죠?
fd를 첫번째 전달인자(argv[1])에서 0x1234를 뺀 값으로 하는 것으로 보아, fd는 0x1234의 dec값인 4660을 입력하면 되겠습니다.
그 뒤의 13번의 if문을 보면 LETMEWIN과 비교해서 if문안에 들어가네요. strcmp함수는 같을때 0을 반환하기 때문에 LETMEWIN을 입력해주면 되겠네요.
mommy! I think I know what a file descriptor is!!
'War Games > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] random(1 pt) :: Write-Up (0) | 2020.02.24 |
---|---|
[pwnable.kr] passcode(10 pts) :: Write-Up (0) | 2020.01.28 |
[pwnable.kr] flag (7 pts) :: Write-Up (0) | 2019.11.10 |
[pwnable.kr] bof(5 pts) :: Write-Up (0) | 2019.11.09 |
[pwnable.kr] collision(3 pts) :: Write-Up (0) | 2019.11.09 |