collision_WriteUp
๋ณด์๋ฉด.. ์ด๋ฒ์ ์๋น ๊ฐ MD5 hash์ ์ด์ฉํด์ ์ถฉ๋๋ ํ๋ฃจ๋ฅผ ๋ง๋ค์์ด?
๋๋ ์ด๋ฐ๊ฑธ ์ํด์! ๋ผ๋ ๊ฑฐ ๊ฐ์๋ฐ.. ๋ญ..
ํด๋น C file์ ์ดํด๋ณด๋ฉด.. hashcode์ 0x21DD09EC๋ก ์ ์ฅ๋์ด ์์ผ๋ฉฐ,
ํต์ฌ์ check_password์
๋๋ค.
๋๋จธ์ง๋ ์ธ์๋ฅผ 2๊ฐ.. ์ฆ 1์ด์ ๋ฃ์ผ์๊ณ ์ฒซ ์ธ์๋ฅผ ๋ฃ์์๋ ๊ธธ์ด๊ฐ 20์ค..๋ก ๋ง์ถฐ์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ check_password์ ๋ณ์กฐ๋ ์ธ์์ ์ hashcode์ ๋น๊ตํฉ๋๋ค.
์ฆ, ์ธ์๊ฐ์ด 20์ด์ฌ์ผํ๋ฉฐ, hashcode์ check_password์ ํจ์๋ฅผ ๊ฑฐ์น ๊ฐ์ด ๊ฐ์์ผํฉ๋๋ค.
Exploit design
์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, IP(argv[1]์ ์ธ์๊ฐ)์ ๋ฐ์์ 5๊ฐ๋ก ์ชผ๊ฐ์
๋๊ฐ์ ๊ฐ์ 5๋ฒ int(4byte)๋ก ๋์ ํ ์ถ๋ ฅํฉ๋๋ค.
์ ํ์๋๋ก๋ฉด ์๋ hex๊ฐ์ด 5๋ก ๋ฐ์ดํฐ ๋๋์ํ๋ก ์ชผ๊ฐ์ ธ์ ๋ฐฐ์ด(ํฌ์ธํฐ)๋ก ์ ๊ทผ
์์๋ก 'ABCDE'๋ฅผ 5๋ก ๋๋์ด A..B..C..D..๋ก ์ถ๊ฐํ์ฌ ๋ฃ์ต๋๋ค.
๊ทธ๋์ res์ hashcode๋ถ๋ถ์ ์ฌ์ด์ฆ๋ ๋์ผํ๋ฏ๋ก ๋ฌธ์ ์๊ฒ ์ง์(์๋ค๋ฉด type?)
๊ณ์ฐ๊ธฐ๋ก ๊ฐ๋จํ ๊ณ์ฐํ๋ฉด..
๊ฐ์ ์ฐจ์ด๊ฐ ๋๋๋ฐ ์๋ง ๋๋์
์ ํ์๋, ๋๋จธ์ง๊ฐ ์กด์ฌ(์์๋ก 12/5)ํ๋ฏ๋ก
ํด๋น ์ฐจ์ด์ธ 4๋ฅผ ๋ํด์ฃผ๋ฉฐ(hash-hash/5), 5๋ฒ์ ๋์ ๋ฐํํ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฃ์ด์ค๋ค๋ฉด
payload์ ํํ๊ฐ.. ๋๋ต
6C5CEC8 * 0x4 + 21DD09E8+4(21DD09EC-21DD09E8)
= 6C5CEC8*0x4+21DD09DC
./col `python -c 'print("\xC8\xCE\xC5\x06"*4+"\xCC\xCE\xC5\x06")'`๋ก
๋ฃ์ด์ ์คํํด๋ด
์๋ค์ฐธ๊ณ ๋ก ์ฝ๊ฐ ๋ค๋ฅธ๊ฑด ๋ฐ๋ก ๋ฆฌํ์๋์ ํ์์ผ๋ก ์ ์ถํด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค.
(๊ทธ ์ด์ ๋ ๋ค๋ค ์์ค๊ฑฐ๋๊น..)
pwntool๋ก ์์ฑํ๊ธฐ์๋.. ์ด์ fd๋ ๋น์ทํ๋๊น ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
argv๋ก ๋ฃ๊ธฐ์๋ ์ ๊ฑฐ ๋ค ํด์ฃผ๊ณ ๋ฐ๊ฟ์ผํด์ ๊ท์ฐฎ๋ค์..
์ฐธ๊ณ ๋ก hash collision์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ์๋ ค์ค๋ ค๊ณ ๋ง๋ ๋ฌธ์ ๊ฐ์๋ฐ์.
hash์ ํน์ง์.. ์๋ ๋งํฌ๋ค์ ํตํด ๋ณด์๋ฉด ์ ์ ์์ต๋๋ค.
๊ทธ๋์ hash collision์ ํด์ฌ๊ฐ์ ์ถฉ๋๋ก์จ ํฐ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค(๊ทธ๋ด์ผ์ ๋งค์ฐ ํฌ๋ฐํ๋)
๋น์ทํ ๋ณด์์ ์ธก๋ฉด์ ๋ฌธ์ ๋ก์จ๋ race condition์ด ์๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐ชโPwnable.kr' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Rookiss]echo1 (0) | 2022.11.20 |
---|---|
[Toddle]fd (0) | 2022.11.19 |
[Toddle]passcode (0) | 2022.11.19 |
[Toddle] flag (0) | 2022.11.19 |
[Toddle]bof (0) | 2022.11.19 |