๐ ๋ณด์/๐พ Pwnable

Pwnable.kr :: Toddler's Bottle - mistake write up
๋๋จํ ํดํน ์ค๋ ฅ์ ํ์์๋ค๊ณ ๋งํ๋ mistake ๋ฌธ์ . ์ฌ์ค์ธ์ง ํ์ธํด๋ณด์. ํํธ๋ operator priority ๋ผ๊ณ ํ๋ค. ์์ค ์ฝ๋๋ฅผ ํ์ธํ์. ์์ค ์ฝ๋๋ฅผ ํ๋์ฉ ํ์ธํด๋ณด๋ฉด, ์ฐ์ open() ํจ์๋ก password ํ์ผ์ ์ฐ๋ค. ๊ทธ๋ฆฌ๊ณ open() ํจ์๊ฐ return ํ๋ file descriptor ๊ฐ์ด fd ๋ณ์์ ๋ค์ด๊ฐ๊ณ 0๊ณผ ๋์ ๋น๊ต๋ฅผ ํ๋ ์ค ์์๋๋ฐ .... ! ํํธ์์ ์ ์ ์๋ฏ์ด ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ์ดํด๋ณด์ .. ์ด ๋ถ๋ถ์์ ์๊ฐ์ ๋ง์ด ์ผ๋ค. if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0) ์ด ์กฐ๊ฑด์ ์์์ = ๊ณผ < ์ฐ์ฐ์์ ์ฐ์ ์์๋ < ์ฐ์ฐ์๊ฐ ๋๋ค. ์ฆ, open() ํจ์๊ฐ return ํ๋ fd ๊ฐ๊ณผ 0์ ๋จผ์ ..

Pwnable.kr :: Toddler's Bottle - leg write up
pwnable.kr ์ leg ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ๋ฌธ์ ๋ฅผ ๋ค์ด๊ฐ๋ฉด arm ์ ๋ฐฐ์์ผ ํ๋ค๊ณ ๋งํ๋ค. ํ์ง๋ง ๋ณธ์ธ์ leg ๊ฐ ๋ ์ข๋ค๊ณ ํ๋ค.. pwnable.kr ์ ๊ฐ์ฑ ์์ง์ ๋ฐ๋ผ๊ฐ๊ธฐ ๋ฒ๊ฒ๋ค... ์ฐ์ ARM architecture ์ ๋ํด ์์๋ณด์. ์๋ฒ ๋๋ ๊ธฐ๊ธฐ์์ ๋ง์ด ์ฌ์ฉ๋๋ RISC ํ๋ก์ธ์๋ก, ์ ์ ๋ ฅ์ ์ฌ์ฉํ๋๋ก ์ค๊ณํ์ฌ ARM CPU ๋ ๋ชจ๋ฐ์ผ์ด๋ ์ฑ๊ธ ๋ณด๋ ์ปดํจํฐ์์ ๋๋ ทํ ๊ฐ์ธ๋ฅผ ๋ณด์ธ๋ค๊ณ ํ๋ค. ์ถ์ฒ : https://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98 ARM ์ํคํ ์ฒ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์ 64/32๋นํธ ์ํคํ ์ฒ๋ฐํ2011๋ (10๋ ์ )(2011)๋ฒ์ Armv8-A, Armv8.1-A, Armv..

Pwnable.kr :: Toddler's Bottle - random write up
random ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ์ฒซ ๋ฒ์งธ fd ๋ฌธ์ ์ ๋์ผํ๊ฒ 1pt ์ง๋ฆฌ ๋ฌธ์ ์ด๋ค. ์ค์ ๋ก๋ ํฌ๊ฒ ์ด๋ ต์ง ์์ ๋ฌธ์ ์๋ค. ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์. ์ญ์๋ ์ธ ๊ฐ์ ํ์ผ์ด ์กด์ฌํ๋ค. ์์ค์ฝ๋๋ฅผ ๋ณด์. rand() ํจ์๋ฅผ ์ด์ฉํด ๋๋ค๊ฐ์ ๋ง๋ค์ด random ๋ณ์์ ์ ์ฅํ๊ณ scanf() ๋ก ์ ๋ ฅ๋ฐ์ ๊ฐ๊ณผ xor ์ฐ์ฐ์ ํด์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0xdeadbeef ์ด๋ฉด flag ๋ฅผ ์ถ๋ ฅํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ ๋ ์์์ผ ํ ๊ฒ์ด ํ๋ ์๋๋ฐ, rand() ํจ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๊ฐ์ด ์ ํด์ง๋ค. ์ฆ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๋ฒ ์คํ์์ผ๋ ๋์ผํ ๊ฐ์ด ๋์จ๋ค๋ ๊ฒ์ด๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ ๋งค๋ฒ ๋ค๋ฅธ ๋์๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด srand() ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ผ ์ฐ๋ฆฌ๋ rand() ํจ์๋ฅผ ์คํ์ํจ ๋ค ํด๋น ๊ฐ์ ์์๋ด๊ธฐ๋ง ํ๋ฉด ๋์ด๋ค. ์ญ..

Pwnable.kr :: Toddler's Bottle - passcode write up
pwnable.kr ์ ๋ค์ฏ ๋ฒ์งธ ๋ฌธ์ passcode ๋ฅผ ํ์ด๋ณด์. ssh ๋ก ์ ์ํด๋ณด์. ์ด์ ๋ฌธ์ ๋ค๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ ํ์ผ์ด ์กด์ฌํ๋ค. ์์ค์ฝ๋๋ฅผ ํ์ด๋ณด์. ์ฐ์ ๋์ฌ๊ฒจ ๋ด์ผ ํ ๋ถ๋ถ์ login() ํจ์ ๋ถ๋ถ์ด๋ค. scanf() ๋ก ์ ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ๋ถ๋ถ์ด ์๋๋ฐ, passcode ๋ณ์์ ์ ์๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ค. ์ฐ๋ฆฌ๋ ํํ scanf() ๋ฅผ ์ด์ฉํด ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์งํํ๋ค. scanf("%d", &passcode1); scanf() ํจ์์์ ๋ ๋ฒ์งธ ์ธ์์ ํด๋นํ๋ "&passcode1" ์ ์ ์๋ฅผ ์ ๋ ฅํ๋ผ๋ ์๋ฏธ์ด๋ค. ์ฌ๊ธฐ์ & (ampersand) ๋ ๋ณ์์ ์ฃผ์๊ฐ์ ๊ฐ๋ฆฌํจ๋ค. ์ฆ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ &passcode1 ์ passcode1 ..

Pwnable.kr :: Toddler's Bottle - bof write up
Pwnable.kr ์ ์ธ๋ฒ์งธ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ์ด๋ฒ ๋ฌธ์ ๋ Buffer Overflow ์ ๋ํ ๋ฌธ์ ์ด๋ค. Buffer Overflow ๋, ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์ ์ ์ฅํ ๋, ๋ฐ์ดํฐ๊ฐ ์ง์ ๋ ๋ฒ์ ๋ฐ๊นฅ์ ์ ์ฅ๋๋ ๊ฒ์ ์๋ฏธํ๊ณ , ๋ฒ์ด๋ ๋ฐ์ดํฐ๋ ์ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋๋ค. nc ๋ก ์ ์ํ๋ฉด bof ํ์ผ์ด ๋ฐ๋ก ์คํ๋๊ณ , ๊ทธ ์ ์ wget ์ผ๋ก bof ํ์ผ๊ณผ bof.c ์์คํ์ผ์ ๋ค์ด๋ฐ์๋ณด์๋ค. bof.c ์์คํ์ผ์ main ํจ์์ func ํจ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. main ํจ์์์๋ func ํจ์๋ฅผ ํธ์ถํ๋ ๊ฑฐ ์ด์ธ์ ๋ณ๋ค๋ฅธ ์ฝ๋๊ฐ ์๊ณ , 0xdeadbeef ๋ผ๋ ๊ฐ์ ์ธ์๋ก ๋๊ธฐ๋ฉด์ func ํจ์๋ฅผ ํธ์ถํ๊ณ ์๋ค. func ํจ์์์๋ 0xdeadbeef ๋ผ๋ ๊ฐ์ int ํ ๋ณ์ key ์๋ค๊ฐ ๋ฃ๊ณ , ov..

Pwnable.kr :: Toddler's Bottle - collision write up
Pwnable.kr ์ ๋๋ฒ์งธ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ์ด๋ฒ ๋ฌธ์ ๋ MD5 hash collision ์ ๋ํ ๋ฌธ์ ๋ผ๋ ํํธ๋ฅผ ์ฃผ๊ณ ์๋ค. ๊ทธ๋ฌ๋ฉด Hash ๋ ๋ฌด์์ด๊ณ Hash collision ์ด ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์์๋ณด์. Hash ๋ ์์์ ๊ธธ์ด๋ฅผ ๊ฐ๋ ์์์ ๋ฐ์ดํฐ์ ๋ํด ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ํ ๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ํด ํ ๊ฐ์ ์ถ๋ ฅ๊ฐ์ด ๋์ค๋๋ฐ, ์ด ์ ๋ ฅ๊ฐ์ ๋ฒ์๋ ๋ฌดํํ ๋ฐ ๋นํด ์ถ๋ ฅ๊ฐ์ ๋ฒ์๋ ์ ํํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ์ด ๋ค๋ฆ์๋ ๋ถ๊ตฌํ๊ณ ๋๋ฌผ๊ฒ ๋์ผํ ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ '์ถฉ๋' (Collsiion)์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค. ์ด์ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์. ์ญ์๋ flag ํ์ผ์ด ์กด์ฌํ๊ณ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ setUID ๊ฐ ๊ฑธ๋ ค์๋ col ํ์ผ์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ..

Pwnable.kr :: Toddler's Bottle - fd write up
1๋ฒ ๋ฌธ์ fd ๋ฅผ ํ์ด๋ณด์๋ค. fd ๋ File Descriptor ๋ฅผ ์๋ฏธํ๋ค. ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด ์ ์ ์๋ฏ์ด File Descriptor ๋ฅผ ๋ชจ๋ฅด๋ฉด ํ ์ ์๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ์์๋ "What is a file descriptor?"๋ผ๋ ํํธ๋ฅผ ์ฃผ๊ณ ์๋ค. ssh ๋ก fd@pwnable.kr ์ ์ ์ํด๋ณด์. ํ์ผ์ ์ดํด๋ดค๋๋ flag ํ์ผ์ ํ์ธํ ์ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ํ์ฌ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ์ง์ ๋ณผ ์๋ ์๊ณ , fd ํ์ผ์ setUID ๊ฐ ๊ฑธ๋ ค์์ผ๋ฏ๋ก fd ํ์ผ์ ์ด์ฉํ๋ฉด flag ๋ฅผ ์ถ๋ ฅํ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ฐ์ fd.c ํ์ผ์ ์์ค์ฝ๋๋ฅผ ํ์ธํด๋ณด์. main ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด๊ฐ ์๋ argc ๋ ๋ช ๋ น ์ธ์์ ๊ฐ์๋ฅผ ์๋ฏธํ๊ณ argv๋ ์ธ์์ ๋ฒกํฐ๋ฅผ ์๋ฏธํ๋๋ฐ, ์ธ..