[pwnable.kr] [fd] Write-up
2025. 6. 18. 14:22ㆍ보안/포너블
728x90
Mommy! what is a file descriptor in Linux?
try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:
https://youtu.be/971eZhMHQQw
ssh fd@pwnable.kr -p2222 (pw:guest)
ssh 명령을 통해 문제에 접속할 수 있다.
접속하면 세가지의 파일이 있는데 fd 파일을 보자
다 깨져있다. 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");
setregid(getegid(), getegid());
system("/bin/cat flag");
exit(0);
}
printf("learn about Linux file IO\n");
return 0;
}
코드를 보면 입력인자가 2개 미만이면(파일이 첫 번째 인자이니 입력 값이 존재하지 않으면)
숫자를 넣으라는 문구를 출력하고,
인자로 값을 입력하면 atoi명령어를 통해 문자일 경우 숫자로 변환하여 0x1234(4660)을 빼서 fd 변수에 넣어준다.
fd(file descriptor)가 가리키는 파일을 32 byte 읽어들여 buf에 저장한다.
file descriptor - 시스템으로부터 할당 받을 파일을 대표하는 정수 값
file descriptor | 목적 | Stream |
0 | 표준 입력 | stdin |
1 | 표준 출력 | stdout |
2 | 표준 에러 | stderr |
표준 입력을 받아야하니 fd 값을 0으로 해주기 위해 입력 인자를 4660으로 해주면 될 것 같다.
다음 입력이 나오면, 코드에 따라 LETMEWIN을 입력해주면 플래그가 나오게 된다.
728x90
'보안 > 포너블' 카테고리의 다른 글
[Dreamhack] Basic_Crypto1 Write-up (0) | 2025.04.03 |
---|---|
[DreamHack] welcome (0) | 2024.12.27 |
[DreamHack] Welcome Hackers (0) | 2024.12.17 |