
fd - 1 pt [writeup]
ssh fd@pwnable.kr -p2222๋ผ๊ณ ์ ๋ ฅํ์ฌ ์ ์์ ์ฑ๊ณตํ๋ค. (pw : guest)
ls -al์ ํตํด ๋ชจ๋ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๋ ฅํด์ฃผ์๋ค.
flag๋ฅผ ํ์ธํ ์ ์์ผ๋ ํ์ฌ id(fd)์ flag์ id(fd_pwn)์ด ๋ฌ๋ผ์ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ๋น์ฅ์ ํ์ธ์ ๋ชปํ๋ค.
fd.c๋ฅผ ํ์ธํด๋ดค๋ค.
์ฝ๋๋ฅผ ์ดํด๋ณด์
char buf[32];
32ํฌ๊ธฐ์ ๋ฌธ์ํ ๋ฐฐ์ด buf๋ฅผ ์ ์ธ
if(argc<2){
printf("pass argv[1] a number\n");
return 0;
}
์ธ์๊ฐ 1๊ฐ ์ดํ์ด๋ฉด "pass argv[1] a number"์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃ
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);
intํ ๋ณ์ fd์ argv[1]๊ฐ์ ๋ฌธ์์ด์์ intํ์ผ๋ก ๋ฐ๊พผ ๊ฐ์์ 0x1234๋ฅผ ๋บ ๊ฐ์ ์ ์ฅํด์ค
intํ ๋ณ์ len์ 0์ผ๋ก ์ด๊ธฐํ
len์ readํจ์๋ก fd๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ 32byte ์ฝ์ด๋ค์ฌ์ buf์ ์ ์ฅ
ssiz_t read(int fd, void *buf, size_t bytes)
- int fd : ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋์์ ๊ฐ๋ฆฌํค๋ ํ์ผ ๋์คํฌ๋ฆฝํฐ
- void *buf : ํ์ผ์ ์ฝ์ด๋ค์ฌ ์ ์ฅํ buffer(๋ฐฐ์ด)
- size_n bytes : ์ฝ์ด๋ค์ผ byte ์
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
exit(0);
}
buf์ ์ ๋ ฅ๋ ๊ฐ์ด "LETMEWIN\n"๊ณผ ๋น๊ตํ์ ๋ ๊ฐ๋ค๋ฉด good job :)๊ณผ ํจ๊ป flag๊ฐ ์ถ๋ ฅ๋๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋จ
(strcmp๋ ๋ฌธ์์ด์ ๋น๊ตํด์ ๊ฐ๋ค๋ฉด 0 ๋ฐํํ๋ ํจ์)
printf("learn about Linux file IO\n");
return 0;
"learn about Linux file IO"์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค
read ํจ์๋ฅผ ํตํด LETMEWIN์ ์ ๋ ฅํ๋ฉด flag๋ฅผ ์ป์ ์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ fd์ ์์น(๋ณดํต 0, 1, 2๋ stdin, stdout, stderr)๋ฅผ ํ์ค ์ ๋ ฅ(stdin)์ ํด๋นํ๋ 0๋ฒ์ผ๋ก ์ฎ๊ฒจ์ค์ผ ํ๋ค.
int fd = atoi( argv[1] ) - 0x1234;
0x1234๋ 10์ง์๋ก 4660์ด๊ธฐ ๋๋ฌธ์ argv[1]์ ๊ฐ์ 4660์ผ๋ก ์ฃผ๊ณ LETMEWIN์ ์ ๋ ฅํ๋ฉด ํ๋๊ทธ๋ฅผ ์ป์ ์ ์๋ค.
'Pwnable' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[pwnable] bof (0) | 2022.05.18 |
---|---|
[pwnable] shellshock (0) | 2022.05.18 |
[pwnable] leg (0) | 2022.05.06 |
[pwnable] File Descriptor (0) | 2022.05.04 |