๋ฌธ์ ๋ฅผ ํด๋ฆญํ๋ฉด ssh๋ฅผ ์ ์ํ ์ ์๋ ๋ช ๋ น์ด๊ฐ ์์ผ๋ ๋ณต์ฌํด์ cmd์์ ์ ์ ๋ ฅํ๋ค.
๋น๋ฐ๋ฒํธ๋ (guest)
ํธ์คํธ์ ์ ์์ ํ๊ณ ํ์ผ ๋ชฉ๋ก์ ํ์ธํ์๋๋ฐ ๋ด๊ฐ ์ฐพ๊ณ ์ถ์ด ํ๋ flag๊ฐ ๋ณด์ธ๋ค.
ํ์ง๋ง flag๋ fd_pwn์ด๋ผ๋ ์ ์ ๋ง ์ด์ด๋ณผ ์ ์๊ฒ ๊ถํ์ด ์ค์ ๋์ด ์์์(ํ์ฌ ๋ด ์ด๋ฆ์ fd)
ํ์ผ๋ค ์ค์์ fd์๋ setuid๊ฐ ์ค์ ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ด๋๋ฏผ ๊ถํ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ๊ฒ ๊ฐ๋ฅํ๋ค.
๋ง์นจ fd์ ์์ค ์ฝ๋๋ก ๋ณด์ด๋ fd.c์ ๋ด์ฉ๋ฌผ์ ์ดํด๋ณธ๋ค.
fd.c์ ๋ด์ฉ๋ฌผ์ ํ์ธํ๋ฉด ์ฌ์ฉ์๋ก๋ถํฐ ์ซ์๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ฐ
int fd = atoi( argv[1] ) - 0x1234; <-- ๊ทธ๊ฑธ ์ฌ๊ธฐ์ ๋์ ์ ํด์
len = read(fd, buf, 32); <-- ๋ค์ read ํจ์์๋ค ๊ฑด๋ค์ฃผ์ด์
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ ๋๋ฉด ํ๋๊ทธ๋ฅผ ์ถ๋ ฅํด์ค๋ค.
์ดํดํ๊ณ ํ๊ธฐ ์ํด์๋ ๋ฌธ์ ์ ์ด๋ฆ์ธ fd(ํ์ผ ๋์คํฌ๋ฆฝํฐ)์ ๋ํด์ ์์๋ ํ์๊ฐ ์๋๋ฐ,
ssize_t read(int fd, void *buf, size_t nbyte); <- ์ฌ๊ธฐ read ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก fd ๊ฐ์ ๋ฐ๋๋ฐ
์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ํด ํ์ค ์ ๋ ฅ์ธ 0๋ฒ์ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค์ ์๋ก ๊ฐ์
int fd = atoi( argv[1] ) - 0x1234;
์ฌ๊ธฐ์๋ +0x1234 ์ฆ ์ ์๋ก ๋ณํํ๋ฉด 4660์ ์ ๋ ฅํด์ผ read ํจ์๋ก ๋ถํฐ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ค.
์ด๋ ๊ฒ 4660์ ์ ๋ ฅํ๋ฉด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋๋ฐ ์ฌ๊ธฐ์๋ค "LETMEWIN"์ ์ ๋ ฅํ๊ณ ์ํฐ(\n)๋ฅผ ์ณ์ค๋ค.
๊ทธ๋ฌ๋๋ flag์ ๋ด์ฉ์ ์ถ๋ ฅํด์คฌ๋ค.
"mommy! I think I know what a file descriptor is!!"
์ฐธ๊ณ :
https://minsoftk.tistory.com/40
open, close, read ํจ์์ ๋ํ์ฌ
ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค :) ํจ์๋ค์ ๊ณต๋ถํ๊ธฐ ์ ์ฌ์ ์ง์ ํจ์๋ค์ ๊ณต๋ถํ๊ธฐ์ ์์ ํ์ผ๋์คํฌ๋ฆฝํฐ๋ผ๋ ๊ฐ๋ ์ ๋จผ์ ์ดํดํ๊ณ ์์ผ๋ฉด ์ข๋ค. ํ์ผ ๋์คํฌ๋ฆฝํฐ(File
minsoftk.tistory.com