사용 툴: cygwin
1) 문제
엄마! 리눅스에서 file descriptor가 뭐야?
2) 문제풀이
문제에 적혀있는대로 ssh fd@pwnable.kr 에 2222번 포트로 접속해준다.
비밀번호는 guest다.
SHJ@DESKTOP-CK691IG ~
$ ssh fd@pwnable.kr -p2222
fd@pwnable.kr's password:
Permission denied, please try again.
fd@pwnable.kr's password:
____ __ __ ____ ____ ____ _ ___ __ _ ____
| \| |__| || \ / || \ | | / _] | |/ ]| \
| o ) | | || _ || o || o )| | / [_ | ' / | D )
| _/| | | || | || || || |___ | _] | \ | /
| | | ` ' || | || _ || O || || [_ __ | \| \
| | \ / | | || | || || || || || . || . \
|__| \_/\_/ |__|__||__|__||_____||_____||_____||__||__|\_||__|\_|
- Site admin : daehee87@gatech.edu
- IRC : irc.netgarage.org:6667 / #pwnable.kr
- Simply type "irssi" command to join IRC now
- files under /tmp can be erased anytime. make your directory under /tmp
- to use peda, issue `source /usr/share/peda/peda.py` in gdb terminal
You have mail.
Last login: Mon Mar 2 10:15:22 2020 from 82.80.166.79
fd@pwnable:~$
첫 문제니까... 가져와봤다...
간zi 난다 ㅎ
fd@pwnable:~$ ls -al
total 40
drwxr-x--- 5 root fd 4096 Oct 26 2016 .
drwxr-xr-x 116 root root 4096 Nov 12 21:34 ..
d--------- 2 root root 4096 Jun 12 2014 .bash_history
-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
-rw------- 1 root root 128 Oct 26 2016 .gdb_history
dr-xr-xr-x 2 root root 4096 Dec 19 2016 .irssi
drwxr-xr-x 2 root root 4096 Oct 23 2016 .pwntools-cache
fd@pwnable:~$ cat flag
cat: flag: Permission denied
fd@pwnable:~$
flag가 대놓고 보이길래 열어봤는데 권한이 없다고 한다.
열어볼 건 fd와 fd.c
fd에는 setuid가 걸려있고 fd.c가 fd의 소스코드인 것 같아서 fd.c를 먼저 열어보았다.
fd@pwnable:~$ cat 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;
}
fd@pwnable:~$
마지막 if문을 살펴보면 strcmp 함수가 있다.
strcmp는 문자열을 비교하는 함수인데 같으면 0을 반환한다.
한마디로 buf가 LETMEWIN이면 flag를 뱉어내는 것 같다.
그 다음 read함수를 살펴보겠다.
* read함수 첫번째 인자값 0 : 표준 입력 1 : 표준 출력 2 : 표준 에러
- 여기서 첫 번째 인자가 의미하는 것이 file descriptor라고 한다. - 문제에서 buf는 파일에서 읽은 데이터를 저장할 메모리 공간이고, 32는 읽을 데이터의 크기이다. |
결론은 우리는 fd가 0으로 해서 LETMEWIN을 buf에 저장해야한다.
fd가 0이 되려면 argv[1]값으로 0x1234를 넣어줘야한다.
여기서 atoi가 문자열을 정수로 바꿔주는 역할을 하기 때문에 0x1234를 10진수로 나타낸 4660을 입력하겠다.
fd@pwnable:~$ ./fd 4660
LETMEWIN
good job :)
mommy! I think I know what a file descriptor is!!
fd@pwnable:~$
FLAG : mommy! I think I know what a file descriptor is!!
'WAR GAME > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] collision 문제풀이 (0) | 2020.03.05 |
---|