관리 메뉴

HeeJ's

fd :: pwnable.kr 본문

<CTF>/<pwnable.kr>

fd :: pwnable.kr

meow00 2021. 9. 21. 23:23

fd 문제에 접속했다.

실습 환경 : KaliLinux 2021.3

 

dir 명령어를 통해 현재 있는 디렉터리를 확인했다.

flag라는 파일을 발견해 cat을 통해 flag를 확인하려 했다.

 

하지만 권한이 없어 거부되었다.

 

fd.c를 읽어보니, flag를 직접 실행시키는 것이 아닌 조건을 맞추어 system으로 실행시키는 문제인 것 같다.

 

*atoi()

더보기

* atoi()

a to i 로 읽을 수 있다.

즉, char to int. 문자열을 정수타입으로 바꿔주는 함수이다.

 

우선 함수를 실행시킬 때 값을 입력해주어야 한다.

이 입력 값을 정수타입으로 바꿔준 후, 0x1234를 빼준다.

 

그리고 그 값(fd)이 read 함수의 인자로 들어가게 된다.

그 후, 입력한 문자열이 'LETMEWIN'과 동일하다면, flag를 보여주는 것 같다.

 

* 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)

 

fd가 0이라면 read()를 실행하지 않고 그냥 넘어갈 것같다.

 

fd가 0이려면, 0x1234가 되어야한다.

0x1234는 10진수로 4660이다.

 

fd를 실행시킨 후, 처음 인자로 4660, 두 번째 인자로 LETMEWIN을 넣으면

flag를 얻을 수 있을 것이다.

 

flag를 얻고 문제를 해결할 수 있었다.

'<CTF> > <pwnable.kr>' 카테고리의 다른 글

collision :: pwnable.kr  (0) 2021.09.22