워게임/pwnable.kr

[pwnable.kr] fd

zz! 2025. 7. 30. 23:11
728x90

 슬라임이 맨 처음 문제이다.

저는 wsl을 사용을 하기 때문에, ssh fd@pwnable.kr -p2222 접속을 하고 시작하면 되겠습니다.

ls 명령어를 통해서, 현재 디렉토리에서 파일이 어떤 것이 있는지 확인을 합니다.

fd , fd.c , flag 파일이 있습니다. 어차피 cat flag 해도 flag는 출력이 안될것 같으니, 바로 소스코드를 확인을 했습니다.

system("/bin/cat flag"); 를 실행을 하도록 해당 조건문으로 진입을 하게 하면 될 것 같습니다.

여기서 이 코드들이 핵심입니다.

int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);

if(!strcmp("LETMEWIN\n", buf))

그렇다면, 문제를 해결 하기 위해서는 어떠한 지식이 필요할까요?

그냥 위에 코드가 해석이 가능하면 문제는 쉽게 해결이 가능합니다.

atoi(argv[1]) - 0x1234

argv는 사용자가 입력한 argument가 저장이 됩니다. 우리가 입력한 argument - 0x1234가 fd 변수에 넣습니다.

fd 변수는 read 함수에 파일 디스크립터로 사용이 되고 있습니다.

파일 디스크립터

프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값입니다. 

프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일디스크립터는

표준 입력 (standard input) 0

표준 출력 (standard output) 1

표준 에러 (standard error) 2

입니다. 이제 문제를 해결하기 위한 지식은 어느정도 공부했습니다.

atoi(argv[1]) - 0x1234 이 부분이 0이 되어야 하고, LETMEWIN이 있어야합니다.

0x1234는 decimal로 4660입니다. 

그러면,  아래와 같이 한다면 플래그를 얻을 수 있습니다.

728x90