2021. 2. 28. 22:26ㆍpwnable.kr
pwnable.rkr에 접속
좌측 상단에 PLAY 클릭!
fd 클릭
- 프로토콜 : ssh
- 아이디 : fd
- 호스트 : pwnable.kr
- 포트 : 2222
- Password : guest
SSH를 이용하여 원격 접속을 해야 한다.
원격 접속을 하기 위해 Putty를 설치한다.
[ Putty 다운로드 ]
Putty를 실행한 후,
Host Name(or Ip address)를 pwnable.kr로 Port는 2222로 Connection Type은 SSH로 해준다.
ID는 fd, PW는 guest를 입력하여 로그인한다.
ls -al 명령어를 통해 현재 디렉터리 내에 있는 파일들과 디렉터리의 권한을 확인한다.
fd.c 에 read 권한이 있는 것을 확인한다.
cat 명령어로 fd.c를 확인해보니, atoi함수에 argv[1]를 넣어 fd값을 설정해준 뒤, read함수를 표준 입력으로 만들어,
buf에 LETMEWIN을 입력하여 if문에 들어가서 system함수를 실행시켜 flag를 읽으면 될 것 같다.
우선, read가 표준 입력이 되게 하려면, fd값을 0으로 해주어야 한다.
따라서 atoi( argv[1] ) - 0x1234 의 값이 0이 되어야 한다.
※ read함수 파일의 데이터를 입력받는 함수 - 함수원형 : ssize_t read(int fd, void *buf, size_t nbytes); - 파라미터 fd : 데이터를 전송해 주는 대상을 가리키는 파일 디스크립터 buf : 수신한 데이터를 저장할 버퍼를 가리키는 포인터 nbytes : 수신할 최대 바이트 수 - return 값 성공 : 수신한 바이트 수 실패 : -1 ( fd에 0이 들어가면 표준입력(stdin), 1이 들어가면 표준출력(stdout)을 의미한다. ) |
※ atoi함수 문자열을 정수로 변환해주는 함수 - 함수원형 : int atoi(const char* str); - 헤더파일 : <stdlib.h> - return 값 성공 : 입력 문자를 숫자로 해석하여 생성되는 int 값 실패 : 0 ( 문자열 "1234"를 입력하게 되면 정수 1234로 바꾸어 준다. ) |
※ strcmp함수 두 문자열을 비교하는 함수 - 함수원형 : int strcmp(const char* str1, const char* str2); - 헤더파일 : <string.h> - return 값 음수 : str1이 str2보다 작음 0 : str1이 str2와 같음 양수 : str1이 str2보다 큼 ( fd.c 코드에서 strcmp에 !(not)을 해준 이유는 strcmp의 리턴값이 0이기 때문이다. ) |
16진수로 적힌 0x1234를 10진수로 나타내면,
4660이라는 수가 나온다.
따라서 argv[1]에 4660을 넣어주면, fd값이 0이 되므로, read함수를 표준 입력으로 만들어 줄 수 있다.
./fd 4660을 입력하여 실행을 시켜주면, 표준 입력을 할 수 있게 되고,
이때 LETMEWIN을 입력해준다.
입력 후, Enter를 누르면 "good job :)"이라는 메시지와 함께 flag를 알려준다.
이렇게 얻은 flag는 pwnable.kr에 접속하여, flag? 에 입력하여 주면 된다!
[ pwnable.kr fd Clear ]
'pwnable.kr' 카테고리의 다른 글
[pwnable.kr] bof (0) | 2021.03.03 |
---|---|
[pwnable.kr] collision (0) | 2021.03.02 |