티스토리 뷰
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
- 0xdeadbeef
- 명령어
- C
- my-pass
- ftz
- Python
- wargame.kr
- c언어
- lob
- 워게임
- pwnable.kr
- 설치
- WebHacking
- 웹해킹
- Lord of SQL Injection
- 자바
- cobolt
- webhacking.kr
- 우분투
- wargame
- BOF
- MySQL
- pwnable
- 1번
- java
- attackme
- Los
- lord of sqlinjection
- 파이썬
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |