๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐ˜์‘ํ˜•

๐Ÿด‍โ˜ ๏ธ CTF ๐Ÿด‍โ˜ ๏ธ/๐Ÿงฎ ์•”ํ˜ธํ•™ ๐Ÿงฎ

(17)
[Dream Hack - Crypto] Double DES Double Encryption์•”ํ˜ธํ‚ค ์ „์ˆ˜์กฐ์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด? ์•”ํ˜ธํ‚ค ํฌ๊ธฐ๋ฅผ ๋Š˜์ด๋ฉด ๋œ๋‹ค!์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Cipher1 = Enc(Plan, key1)๊ฐ•ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : Cipher2 = Enc(Cipher1, key2)๋ธ”๋ก ํฌ๊ธฐ๋Š” ๊ทธ๋Œ€๋กœ, ์•”ํ˜ธํ‚ค ํฌ๊ธฐ๋Š” 2๋ฐฐ๋กœ ๊ฐ•ํ™”ํ•˜์˜€๋‹ค. ๊ณผ์—ฐ ๋‘๋ฐฐ์˜ ์•ˆ์ •์„ฑ์„ ๊ฐ€์งˆ๊นŒ?Cipher1 = Enc(Plan, key1) → ํ‚ค ํฌ๊ธฐ 2^n ์ผ ๋•Œ, Cipher2 = Enc(Cipher1, key2) → ํ‚ค ํฌ๊ธฐ 2^2n์„ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ MITM attack ์„ ์ด์šฉํ•˜๋ฉด 2^(n+1)๋กœ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.MITM (Meet In The Middle) ์ด๋ž€?์ฃผ์–ด์ง„ (ํ‰๋ฌธ(P), ์•”ํ˜ธ๋ฌธ(C)) ์Œ์— ๋Œ€ํ•˜์—ฌ, ์•”ํ˜ธํ‚ค key1, key2๋ฅผ ์ฐพ๋Š” ๊ณต๊ฒฉํ‰๋ฌธ P ๋ฅผ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  key1์œผ๋กœ ์•”ํ˜ธํ™” ..
[Dream Hack - Crypto] Private Storage RC4 ์•”ํ˜ธํ™” ๊ณผ์ • RC4๋Š” 256 byte ๋น„๋ฐ€ํ‚ค ๋Œ€์นญํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋™์ผํ•œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณตํ˜ธํ™”ํ•œ๋‹ค. ์•”ํ˜ธํ™” ๊ณผ์ •์€ KSA(Key Scheduling Algorithm)์™€ PRGA(Pseudo-Random Generation Algorithm) ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ํ‚ค ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ https://www.youtube.com/watch?v=kfdvlaOD1ig&t=172s S๋ฐฐ์—ด: 0๋ถ€ํ„ฐ 255๊นŒ์ง€ ๊ฐ’์„ ๊ฐ€์ง. K๋ฐฐ์—ด: key ๊ฐ’์„ ๊ฐ€์ง. KSA ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ‚ค ์Šค์ผ€์ค„๋ง ์ˆ˜ํ–‰. PRGA ์•Œ๊ณ ์ฆ˜์„ ํ†ตํ•ด ํ‚ค์ŠคํŠธ๋ฆผ ๋„์ถœ. ์•”ํ˜ธํ™” ์•”ํ˜ธ๋ฌธ = ํ‰๋ฌธ xor ํ‚ค์ŠคํŠธ๋ฆผ ๋ณตํ˜ธํ™” ํ‰๋ฌธ = ์•”ํ˜ธ๋ฌธ xor ํ‚ค์ŠคํŠธ๋ฆผ ๋ฌธ์ œ ํ’€์ด RC4์—์„œ๋Š” ๋™์ผํ•œ key๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋™์ผํ•œ ํ‚ค์ŠคํŠธ๋ฆผ..
[Dream Hack - Crypto] Padding Oracle PKCS#7 ํŒจ๋”ฉ ํŒจ๋”ฉ ๊ธธ์ด ๊ณ„์‚ฐ: ํŒจ๋”ฉ์€ ๋งˆ์ง€๋ง‰ ๋ธ”๋ก์˜ ๊ธธ์ด๊ฐ€ ๋ธ”๋ก ํฌ๊ธฐ์™€ ๋‹ค๋ฅผ ๋•Œ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ํŒจ๋”ฉ์˜ ๊ฐ’์€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ํŒจ๋”ฉ ๊ฐ’์˜ ์ผ๊ด€์„ฑ: ํŒจ๋”ฉ ๊ฐ’์€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋กœ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฐ”์ดํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด 0x01, 2๋ฐ”์ดํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด 0x02๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ํŒจ๋”ฉ์„ ๋‚˜์ค‘์— ์ œ๊ฑฐํ•  ๋•Œ ์–ด๋””๊นŒ์ง€๊ฐ€ ํŒจ๋”ฉ์ธ์ง€ ์‰ฝ๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ”์ดํŠธ๊ฐ€ ํŒจ๋”ฉ์ธ ๊ฒฝ์šฐ: ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๊ฐ€ ๋ธ”๋ก ํฌ๊ธฐ์˜ ์ •ํ™•ํ•œ ๋ฐฐ์ˆ˜์ผ ๋•Œ, ๋ธ”๋ก ํฌ๊ธฐ๋งŒํผ์˜ ํŒจ๋”ฉ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ถ”๊ฐ€๋˜๋Š” ๋ชจ๋“  ๋ฐ”์ดํŠธ ๊ฐ’์€ ํŒจ๋”ฉ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŒจ๋”ฉ ์ œ๊ฑฐ ์‹œ ์œ ํšจ์„ฑ ํ™•์ธ: ํŒจ๋”ฉ ์ œ๊ฑฐ ์‹œ์—๋Š” ์ถ”๊ฐ€๋œ ํŒจ๋”ฉ ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ..
[Dream Hack - Crypto] Pyploit pdb.set_trace() ํ•จ์ˆ˜ pdb.set_trace()๋Š” Python์˜ ๋””๋ฒ„๊น… ๋ชจ๋“ˆ์ธ pdb๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ๋Œ€ํ™”ํ˜• ๋””๋ฒ„๊น… ์„ธ์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ๋ถ€๋ถ„์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ, ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ด ์ผ์‹œ์ ์œผ๋กœ ์ค‘๋‹จ๋˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๋“ฑ์˜ ๋””๋ฒ„๊น… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. UTF-8 UTF-8(Unicode Transformation Format - 8-bit)์€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์ด๋‹ค. ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž์˜ ๊ฒฝ์šฐ, UTF-8 ์ธ์ฝ”๋”ฉ ์‹œ 1 byte๋ฅผ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ , ํ•œ๊ธ€์˜ ๊ฒฝ์šฐ 3 byte๋ฅผ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ 3์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ฌธ์ œ ํ•ด์„ 1. Encrypt ์ž…๋ ฅ..
[Dream Hack - Crypto] [LINE CTF 2021] babycrypto1 CBC ๋ชจ๋“œ AES์˜ CBC (Cipher Block Chaining) ๋ชจ๋“œ๋Š” ๋ธ”๋ก ์•”ํ˜ธํ™” ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ ๋ธ”๋ก์„ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์ด์ „ ๋ธ”๋ก์˜ ์•”ํ˜ธ๋ฌธ๊ณผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. IV(Initialization Vector) ์„ ํƒ: ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋œ IV๋Š” ์ฒซ ๋ฒˆ์งธ ๋ธ”๋ก์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ธ”๋ก ๋‹จ์œ„ ์•”ํ˜ธํ™”: ํ‰๋ฌธ์„ ๋ธ”๋ก ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ฐ ๋ธ”๋ก์€ ์ด์ „ ๋ธ”๋ก์˜ ์•”ํ˜ธ๋ฌธ๊ณผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค AES ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ๋‹ค. ์ฃผ์–ด์ง„ ์ฝ”๋“œ ํ•ด์„ 1. token + b'test' ๋ฅผ aes_key ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. aes_key = get_random_bytes(AES.block_size) token = b64encode(get_random_bytes(A..
[Dream Hack - Crypto] X-Time Pad One-Time Pad One-Time Pad ๋Š” ์ผํšŒ์„ฑ ํŒจ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด์•ˆ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์•”ํ˜ธ ์‹œ์Šคํ…œ์ด๋‹ค. ํ‰๋ฌธ๊ณผ ํ‚ค์˜ ๊ธธ์ด๊ฐ€ ์„œ๋กœ ๋™์ผํ•ด์•ผ ํ•˜๋ฉฐ, ํ‚ค๋Š” ๋‹จ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. ์•”ํ˜ธํ™” ๊ณผ์ •์—์„œ ํ‰๋ฌธ๊ณผ ํ‚ค ๊ฐ„์˜ XOR ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ œ ํ•ด์„ flag_enc = FLAG ^ key FLAG ๊ฐ’์„ ์ฝ์–ด์™€์„œ key ์™€ xor ํ•œ ํ›„ flag_enc ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. new_key = key ^ rand_bit key์— ๋ฌด์ž‘์œ„ํ•œ bit์—ด์„ ๋”ํ•ด์„œ ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, rand_bit์˜ ๊ธธ์ด๊ฐ€ 64byte์ด๋ฏ€๋กœ new_key์˜ ๊ธธ์ด๋„ 64byte์— ๊ทผ์ ‘ํ•  ๊ฒƒ์ด๋ผ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค. input_enc = {input} ^ new_key ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์— ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ xor ํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๊ฐ’์„ ์ถœ๋ ฅ..
[Dream Hack - Crypto] likeb64 Base64 ์ •๋ฆฌ Base64๋Š” 6๋น„ํŠธ์”ฉ ๋ฌถ์–ด์„œ ์ธ์ฝ”๋”ฉ ํ‘œ์— ๋”ฐ๋ผ ํŠน์ • ๋ฌธ์ž๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 3๋ฐ”์ดํŠธ(24๋น„ํŠธ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ 4๊ฐœ์˜ Base64 ๋ฌธ์ž๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์œ—์ค„์ด ๋น„ํŠธ์— ๋Œ€์‘๋˜๋Š” Ascii ์ฝ”๋“œ ๋ฌธ์ž์—ด, ์•„๋žซ์ค„์ด Base64 ํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Base64๋Š” 3๋ฐ”์ดํŠธ์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ฐ”์ดํŠธ ๊ธธ์ด๊ฐ€ 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ํŒจ๋”ฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ‘=’ ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ’€์ด ๋ฐฉ๋ฒ• flag_enc: IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa=== hint : ABCDEFGHIJKLMNOPQRSTUVWXYZabc..
[DreamHack - Crypto] uncommon_e Common modulus attack Common Modulus Attack RSA ์•”ํ˜ธ์—์„œ ๊ฐ™์€ N๊ณผ GCD(e1, e2)=1 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ™์€ ํ‰๋ฌธ m์„ ์•”ํ˜ธํ™”ํ•ด์„œ ๋‘ ์•”ํ˜ธ๋ฌธ c1, c2์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, ์ด๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๊ณต๊ฒฉ์ž๋Š” e1, e2๊ฐ€ ์„œ๋กœ์†Œ๋ผ๋Š” ์ ์„ ํ™œ์šฉํ•ด r*e1 + s*e2=1์ด๊ณ , (r, s) ์Œ์„ ํ™•์žฅ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ GCD ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. 106๊ณผ 16์˜ GCD๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋ชฉ๊ณผ ๋‚˜๋จธ์ง€๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ณ€์ด 0์ด ๋  ๋•Œ ๊ทธ์ „ ์‹์˜ ์šฐ๋ณ€ 2๊ฐ€ 106, 16์˜ GCD๊ฐ€ ๋œ๋‹ค. ํ’€์ด ๋ฐฉ๋ฒ• FLAG_enc1 = FLAG^e1 mod N FLAG_enc2 = FLAG^e..

๋ฐ˜์‘ํ˜•