๐ดโ ๏ธ CTF ๐ดโ ๏ธ/๐งฎ ์ํธํ ๐งฎ (17) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Dream Hack - Pwnable] baby-bof Buffer Over Flow ํ๋ก๊ทธ๋จ์ด ํน์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ์ธ ๋ ๋ฐ์ ์ทจ์ฝ์ ์ ๊ณต๊ฒฉ์๊ฐ ์ ์์ ์ธ ์ฝ๋๋ฅผ ์คํํ๊ฑฐ๋ ์์คํ ์ ๋์์ ๋ณ์กฐํ๋ ๋ฐ ์ด์ฉ๊ฐ๋ฅ ํ์ด๋ฐฉ๋ฒ 1. name์ ์ ๋ ฅ๋ฐ์์ ์์ฑ | 7ffdc4799ed0 | 7ffdc4799ed8 | ์ ์ ๋ ฅํ ๋ฐ์ดํฐ๊ฐ stack ์์ ์ ์ฅ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. $ nc host3.dreamhack.games 17378 the main function doesn't call win function (0x40125b)! name: AAAAAAAAA GM GA GE GV AAAAAAAAA!! : | addr| value| | 7ffdc4799ed0| 4141414141414141| | 7ffdc4799ed8| 400041.. [Dream Hack - Crypto] RSA-wiener Wiener ๊ณต๊ฒฉ ์๋(Wiener)์ ๊ณต๊ฒฉ์ RSA ์ํธํ ๋ฐฉ์์์ ๋ฐ์ํ๋ ์ทจ์ฝ์ฑ์ ์ด์ฉํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค. RSA๋ ๊ณต๊ฐํค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ํฐ ์์์ธ ๋ ๊ฐ์ ์์๋ฅผ ๊ธฐ๋ฐ์ ํ๋ค. ํ์ง๋ง ์๋์ ๊ณต๊ฒฉ์ ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋, RSA์ ๊ฐ์ธํค๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค. ์๋์ ๊ณต๊ฒฉ์ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์กฐ๊ฑด์ ํ์๋ก ํ๋ค: ์์ p์ q๊ฐ n = p x q๋ก๋ถํฐ ๊ณ์ฐ๋์์ ๋, p์ q์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์์ n์ ๊ณ์ฐํ๋ ๋ฐ ์๋นํ ๋น์ฉ์ด ๋ค์ง ์๋ ๊ฒฝ์ฐ. e๊ฐ ๋งค์ฐ ํฐ ๊ฒฝ์ฐ. ๋ณดํต RSA์์๋ ๊ณต๊ฐ ์ง์ e๋ก ์์ ์์, ์ฃผ๋ก 3 ๋๋ 65537(2^16 + 1)์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง e๊ฐ ๋งค์ฐ ํฐ ๊ฒฝ์ฐ์๋ ์๋์ ๊ณต๊ฒฉ์ด ์ ์ฉ๋ ์ ์๋ค. ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฒฝ์ฐ, ์.. [Dream Hack - Crypto] fuzzy flag ํ์ด ๋ฐฉ๋ฒ 1. flag์ 0~51 ์ค ํ๋์ ์ซ์๊ฐ ๋จ๋์ผ๋ก ๋ํด์ง๋ ํํ์ด๋ค. ๋ฐ๋ผ์ flag์ ascii ์ฝ๋ ๊ฐ ๋ณด๋ค ์์ ๊ฐ์ ์ถ๋ ฅ๋ ์ ์๋ค. fuzzy = [c + randbelow(len(string.ascii_letters)) for c in flag] 2. ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํ์ฌ ๊ฐ index์ ๊ฐ์ฅ ์์ ๊ฐ๋ง ์ ์ฅํ๋ค. 3. ์์ ๊ฐ๋ง ์ ์ฅ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณํํ๋ฉด! flag๋ฅผ ์ป์ ์ ์๋ค. ํ์ด ์ฝ๋ from pwn import * import time ## 185 ๊ธ์ min_data_list = [255] * 185 for count in range(0, 216) : p = remote("host3.dreamhack.games", 21384) data = p.recvline().decode.. [Dream Hack - Crypto] chinese what? ํ์ด ๊ณผ์ M ๊ณ์ฐ: M์ ๋ชจ๋ pi (์ฌ๊ธฐ์๋ p1, p2, p3) ๊ฐ์ ๊ณฑํ ๊ฐ์ ๋๋ค. M = p1 * p2 * p3 mi ๊ณ์ฐ: mi๋ M์ ํด๋น ์์ pi๋ก ๋๋ ๋ชซ์ ๋๋ค. m1 = M // p1, m2 = M // p2, m3 = M // p3 ์ญ์ ๊ณ์ฐ: mi์ ์ญ์ yi๋ mi๋ฅผ ๋ชจ๋๋ก pi๋ก ๋๋ ๋๋จธ์ง์ ๊ณฑํ์ ๋ 1์ด ๋๋ ๊ฐ์ ๋๋ค. ์ญ์์ ๋ชจ๋๋ก ์ฐ์ฐ์์ ๋๋์ ์ ์ญํ ์ ํฉ๋๋ค. ์ญ์์ ํ์ฅ๋ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค. ๋ณต์: ์ด์ ์ญ์๊ณผ mi ๊ฐ์ ์ฌ์ฉํ์ฌ flag ๊ฐ์ ๋ณต์ํฉ๋๋ค. flag = (c1 * y1 * m1 + c2 * y2 * m2 + c3 * y3 * m3) % M ํ์ด ์ฝ๋ from Crypto.Util.number import long_.. [Dream Hack - Crypto] ICM2022 ํ์ด ๊ณผ์ 1. enc ํจ์์์ q ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ์์ ๋ง์กฑํ๋ค. 2. n = 3, key2 = 95 ์ผ๋, q = -200640142664324295933714 ์ ๋ง์กฑํ๋ p, key1 ์ ๊ตฌํ์! 3. key1 < key2 ์ด๋ฏ๋ก 0 ≤ key1 < 95 ์ด๊ณ , ์์์ key1 ๊ฐ์ ๋ํ p ๊ฐ์ ํ์ธํ์ฌ flag๋ฅผ ์ถ๋ก ํ์!! 4. p ๊ฐ์ ํ์ธํ๋ dec ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ ๋ง์กฑํ๋ค. 5. dec ๋ฅผ ํตํด p ๋ฅผ ๊ตฌํ๊ณ , enc ์ p ๋ฅผ ๋์ ํ์ฌ q_test ๊ตฌํ ํ ๊ธฐ์กด p ๊ฐ๊ณผ ๋น๊ตํ๋ค. ํ์ด ์ฝ๋ import random from fractions import Fraction # ์ฃผ์ด์ง ๊ฐ p๋ฅผ n, key1, key2๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํํ๋ ํจ์ def enc(p, n, key1.. [Dream Hack - Crypto] darimchal_001 ๋ฌธ์ ํด์ pwd ^ KEY = JOKER ๋ฅผ ๋ง์กฑํ๋ฉด ๋ณตํธํ๊ฐ ๋๋ค. ์ฝ๋ ํด์ #include #include #include // ์ด๊ธฐํ๋ ๊ฐ์ผ๋ก ์ ์ํ ๋ฌธ์์ด ์์๋ค #define JOKER "\\x40\\x53\\x06\\x03\\x43\\x52\\x54\\x3b" #define KEY "023661dd4\\0" #define TRUE 1 #define FALSE 0 #define OK 0 #define ERRO -1 // ์ํํธ์จ์ด ์ด๋ฆ๊ณผ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ ํจ์ void __print_sw_title (char *sw_name); // ์ฃผ์ด์ง ๋น๋ฐ๋ฒํธ๊ฐ ์ ํจํ์ง ํ์ธํ๋ ํจ์ int __is_valid_pwd (char *pwd); // ์ฃผ์ด์ง ๋น๋ฐ๋ฒํธ๋ฅผ ํค๋ฅผ ์ด์ฉํด ๋๋ ํํ๋ ํจ์ cha.. [Dream Hack - Crypto] ROT128 ๋ฌธ์ ํด์ flag.png ๋ฅผ ์ ๊ณต๋ ์ฝ๋๋ก ์ํธํํ์ฌ encfile ์ ์์ฑํ์๋ค. png ํ์ผ์ 128byte ๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด์ utf-8๋ก ์ธ์ฝ๋ฉ ๋ ์ํธํ ํ์ผ์ ์์ฑํ๋ค. ์ํธํ๋ ํ์ผ์ byte ๋จ์๋ก ์ฝ์ด์ ๋ค์ ์ผ์ชฝ์ผ๋ก 128byte ๋งํผ ๋ฐ์ด bin ํ์ผ์ ์์ฑํ๋ค. ์ฝ๋ ํด์ # ์ด๊ธฐ 0๋ถํฐ 255๊น์ง์ ์ซ์๋ฅผ 16์ง์๋ก ํํํ ๋ฆฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)] # print(hex_list) # 'flag.png' ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ๋ชจ๋๋ก ์ด์ด์ ๋ด์ฉ์ ์ฝ์ด์ต๋๋ค. with open('flag.png', 'rb') as f: plain_s = f.read() # 'plain_s' ๋ฐ.. [Dream Hack - Crypto] Robot Only ํ์ด ๋ฐฉ๋ฒ ๋ก๋ด์์ ์ธ์ฆ ์ถ๋ ฅ๋๋ ํ ํฐ์ ์ฌ์ ๋ ฅ ๋ฐฐํ ์ ํตํด ๋์ ๋ฒ๋ฐฐํ ํ๋ ๋์ด ๊ฐ์ง๊ณ ์๋ ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋๋ ๊ฒ์ ํ์ธ. ์์์ ๋์ ๋ฐฐํ ํ์ฌ ๋ฐฐํ ์์ ์ง๋ ๊ฒฝ์ฐ, money - bet ์์ ํตํด ์คํ๋ ค ๋์ ์ป์ ์ ์๋ ๊ฒ์ ํ์ธ bet = int(input('how much money do you want to bet (your money: ${0})? '.format(money))) if money < bet: print('you don\\'t have enough money (your money: ${0}).'.format(money)) return ๋์ฃผ๊ณ flag๋ฅผ ์ฐ๋ค. ์ฝ๋ from pwn import * import time p = remote("host3.dreamhack... ์ด์ 1 2 3 ๋ค์