http://pwnable.kr/
there are flag files corresponding to each challenges (similar to CTF), you need to read it and submit to pwnable.kr to get the corresponding point. in order to read the flag file, you need some skills regarding programming, reverse-engineering, bu
pwnable.kr
์ฒซ ๋ฒ์งธ ๋ฌธ์ fd *.*
์๋ง๋ฅผ ์ฐพ๋ ํ ์์ด๊ฐ ๋งํ๋ค์
"ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ๋ญ์ผ?? ๋จ><"
ํ์ง๋ง ์๋ง๋ ๋ต์ด ์๊ณ ...
์ฐ๋ฆฌ๊ฐ ์๋ ค์ค์ผ ํ ๊ฑฐ ๊ฐ์ต๋๋ค
ssh ์ ์ ๋ฐฉ๋ฒ์ ๋ฌธ์ ์๊ฐ ๋ถ๋ถ์ ์น์ ํ๊ฒ ์ ํ์์ต๋๋ค. (intro.png)
fdํ์ผ์ setuid๊ฐ ๊ฑธ๋ ค์๊ณ , flagํ์ผ์ ์ฝ๊ธฐ ์ํด์ fdํ์ผ์ ๊ณต๋ตํด์ผ ํ ๋ฏํ๋ค์.
์ฝ๋๋ฅผ ๋ณด๋ฉด, buf๋ณ์์ "LETMEWIN"์ด๋ผ๋ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ ์์ผ๋ฉด,
flag ํ์ผ์ ์ฝ์ด์ฌ ์ ์๊ฒ ๋ค์.
12๋ฒ ์ค์ ๋ณด๋ฉด read(fd, buf, 32);๋ผ๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
์ฐ์ , read ํจ์๋ฅผ ์์์ผ๊ฒ ์ฃ ?
๊ตฌ๊ธ๋ง์ ํตํด ์ฝ๊ฒ ๋ณผ ์ ์๊ฒ ์ง๋ง, ์๊ฐํด ๋๋ฆด ๋ฐฉ๋ฒ์ด ํ๋ ์๊ฐ๋ฌ๋ค์
๋ฐ๋ก linux man page์ ๋๋ค
์์ "man man"์ ์ ๋ ฅํด ๋ด ์๋ค.
์ค๋ช ๋ถ๋ถ์ ๋ณด๋ฉด section ์๊ฐ๊ฐ ๋์ค์ฃ
์ฌ๊ธฐ์ ์ง๋ฌธ, ์ง๊ธ ๋๊ฐ ์ด์๋จ์ ์์ด? system call์ธ read๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ๋ช ๋ฒ section์ ์ฐธ์กฐํด์ผ ํ ๊น์?
q๋ฅผ ๋๋ฅด๊ณ , ๋ค์ ์๋ก ๋ณต๊ทํ์์๋ค
์์ "man 2 read"๋ฅผ ์ ๋ ฅํด ๋ด ์๋ค
์ง์ข~ ์ฌ์ค ๊ทธ๋ฅ man readํด๋ ๋จ
์ธ์๋ค์ ํ์ธํด ๋ด ์๋ค.
์ธ์ | fd | buf | count |
์ฉ๋ | ํ์ผ ๋์คํฌ๋ฆฝํฐ | ์ ์ฅ๋ ๋ณ์ | ํฌ๊ธฐ |
ํ์ผ ๋์คํฌ๋ฆฝํฐ? ๋ฌธ์ intro์์ ๋ณธ๊ฑฐ ๊ฐ๊ธฐ๋..?
์ํคํผ๋์๋ฅผ ๋ณด๋ฉฐ๋
0 → standard input
1 → standard output
2 → standard error
๋ผ๊ณ ๋์ด์๋ค์.
์ฝ๊ฒ ๋งํด์, "0์ ์ ๋ ฅ(ํค๋ณด๋) 1์ ์ถ๋ ฅ(๋ชจ๋ํฐ) 2๋ ์๋ฌ"๋ผ๋ ์๋ฆฌ์ ๋๋ค.
์ฐ๋ฆฌ๋ buf ๋ณ์์ "LETMEWIN"์ ์ ๋ ฅํด ๋ฃ์ด์ผ ํ๋, fd๋ 0์ด ๋์ด์ผ๊ฒ ๋ค์ ใ ใ
๋ค์ ์ฝ๋๋ก ๋์์์, 10๋ฒ์งธ fd๋ฅผ ์ธํ ํ๋ ๋ผ์ธ์ ๋ด ์๋ค.
10 int fd = atoi( argv [1] ) - 0x1234;
atoi๋ ๋ ๋ญ์ฌ..
'str → int' ํ ๋ณํ ํจ์๋ค์^^
๊ทธ๋ ๋ด, fd๊ฐ 0์ด ๋๊ธฐ ์ํด์ argv [1]์ 0x1234๋ฅผ ์ ๋ ฅํด ์ฃผ์ด์ผ๊ฒ ๋ค์.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ atoi๋ 10์ง์ ํ์์ผ๋ก ๋ฐ๊ฟ ์ฃผ๊ธฐ ๋๋ฌธ์, "4660"์ ์ ๋ ฅํด ์ฃผ์ด์ผ๊ฒ ์ฃ ?
+) 0x1234 == 4660
๋ง์ง๋ง์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์คํํด์ผ ํ ์ ์ฐจ๋ฅผ ์ ๋ฆฌํด๋ด ์๋ค.
argv [1]์ "4660" ์ ๋ ฅ | → | "LETMEWIN" ์ ๋ ฅ |
๋ ์ธ ๊ณ .