๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Capture The Flag (CTF)

[UWSP Pointer Overflow CTF 2023] Unquestioned and Unrestrained Write Up

by A Lim Han 2023. 11. 12.

๐Ÿ‘จ‍๐Ÿ’ผ Unquestioned and Unrestrained Write Up

1.  ๋ฌธ์ œ ์ˆ™์ง€ ํ›„ ์•”ํ˜ธ๋ฌธ ํ™•์ธ

 

์•”ํ˜ธํ™” ๋ฐฉ์‹๊ณผ ํ‰๋ฌธ์„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์•”ํ˜ธ๋ฌธ๋งŒ์„ ๋ณด๊ณ  ํ‰๋ฌธ์„ ์œ ์ถ”ํ•˜๋Š” ๋ฌธ์ œ

++  ์œ ์ผํ•œ ํžŒํŠธ๋Š” ๋ณดํŽธ์ ์ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒƒ!

2.  ๊ฐ ์•”ํ˜ธํ™” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ณตํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•œ Python ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

# Base64

import base64

def base64_decode(encoded_text):
ใ…คใ…คdecoded_bytes = base64.b64decode(encoded_text)
ใ…คใ…คdecoded_text = decoded_bytes.decode('utf-8')
ใ…คใ…คreturn decoded_text

# ์ฃผ์–ด์ง„ ์•”ํ˜ธ๋ฌธ์— ๋Œ€ํ•ด Base64 ๋””์ฝ”๋”ฉ ์‹œ๋„
ciphertext = "cG9jdGZ7dXdzcF80MTFfeTB1Ml84NDUzXzQyM184MzEwbjlfNzBfdTV9"
decoded_text_base64 = base64_decode(ciphertext)
print("Decoded Text (Base64):", decoded_text_base64)

# ์‹œํ”„ํŠธ ์•”ํ˜ธ

def decrypt_all_shifts(ciphertext):
ใ…คใ…คfor shift in range(1, 26):
ใ…คใ…คใ…คใ…คplaintext = decrypt_caesar_cipher(ciphertext, shift)
ใ…คใ…คใ…คใ…คprint(f"์‹œํ”„ํŠธ ๊ฐ’ {shift:2d}: {plaintext}")

def decrypt_caesar_cipher(ciphertext, shift):
ใ…คใ…คplaintext = ""
ใ…คใ…คfor char in ciphertext:
ใ…คใ…คใ…คใ…คif char.isalpha():
ใ…คใ…คใ…คใ…คใ…คใ…คascii_offset = ord('A') if char.isupper() else ord('a')
ใ…คใ…คใ…คใ…คใ…คใ…คdecrypted_char = chr((ord(char) - ascii_offset - shift) % 26 + ascii_offset)
ใ…คใ…คใ…คใ…คใ…คใ…คplaintext += decrypted_char
ใ…คใ…คใ…คใ…คelse:
ใ…คใ…คใ…คใ…คใ…คใ…คplaintext += char
ใ…คใ…คreturn plaintext

# ์ฃผ์–ด์ง„ ์•”ํ˜ธ๋ฌธ์— ๋Œ€ํ•ด ๋ชจ๋“  ์‹œํ”„ํŠธ ๊ฐ’์œผ๋กœ ๋ณตํ˜ธํ™” ์‹œ๋„
ciphertext = "cG9jdGZ7dXdzcF80MTFfeTB1Ml84NDUzXzQyM184MzEwbjlfNzBfdTV9"
decrypt_all_shifts(ciphertext)

# XOR ์•”ํ˜ธํ™”

def decrypt_xor_cipher(ciphertext, key):
ใ…คใ…คdecrypted_text = ""
ใ…คใ…คfor char in ciphertext:
ใ…คใ…คใ…คใ…คdecrypted_char = chr(ord(char) ^ key)
ใ…คใ…คใ…คใ…คdecrypted_text += decrypted_char
ใ…คใ…คreturn decrypted_text

def decrypt_all_keys(ciphertext):
ใ…คใ…คfor key in range(256):  # ๋ชจ๋“  ๋‹จ์ผ ๋ฐ”์ดํŠธ ํ‚ค์— ๋Œ€ํ•ด ์‹œ๋„
ใ…คใ…คใ…คใ…คplaintext = decrypt_xor_cipher(ciphertext, key)
ใ…คใ…คใ…คใ…คprint(f"ํ‚ค ๊ฐ’ {key:02X}: {plaintext}")

# ์ฃผ์–ด์ง„ ์•”ํ˜ธ๋ฌธ์— ๋Œ€ํ•ด ๋ชจ๋“  ํ‚ค ๊ฐ’์œผ๋กœ ๋ณตํ˜ธํ™” ์‹œ๋„
ciphertext = "cG9jdGZ7dXdzcF80MTFfeTB1Ml84NDUzXzQyM184MzEwbjlfNzBfdTV9"
decrypt_all_keys(ciphertext)

 

3.  ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ, Base64 ๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์ž„์„ ํ™•์ธ

 

# ๋ฐœ๊ฒฌํ•œ FLAG
poctf{uwsp_411_y0u2_8453_423_8310n9_70_u5}

4.  ๋‹ค์‹œ ๋ฌธ์ œ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์™€ ๋ฐœ๊ฒฌํ•œ FLAG ์ž…๋ ฅ

-->  ๋ฌธ์ œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธ

 

'โœ’๏ธ Capture The Flag (CTF)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dreamhack CTF Season 3] ROT128 Write Up  (1) 2023.11.26
[Cake CTF 2023] Country DB - 92 Write Up  (0) 2023.11.11
[CSAW CTF 2023] Baby's First Write Up  (0) 2023.09.16
[Patriot CTF 2023] Python XOR Write Up  (0) 2023.09.09
[DownUnder CTF 2023] ๐• Write Up  (0) 2023.09.04