i love pyjails
make github issue if a ctf has some good pyjails and they should be added here
- amateurs ctf, 2023 and 2024
title | source | description/tldr |
---|---|---|
minijail | ImaginaryCTF Round 9 | eval with only the print builtin in 37 bytes |
tax evasion | ImaginaryCTF Round 11 | python audit hook function overwrite |
how r u | ImaginaryCTF Round 12 | python2.7 non-raw input is dangerous asf |
Fickle Pickles | ImaginaryCTF Round 13 | weird pickle challenge |
prison | ImaginaryCTF Round 18 | standard no builtins escape but with blacklist |
Stackless Jail | ImaginaryCTF Round 23 | read sys environ with only stack size 1 from dis.code_info |
Nameless Jail | ImaginaryCTF Round 24 | use dictionary instead of multiple variables |
_ | ImaginaryCTF Round 25 | use * for unpacking a file object |
dont-repeat-yourself | ImaginaryCTF Round 28 | only use each char once |
No Comment | ImaginaryCTF Round 32 | abuse \r in input function |
decorated | ImaginaryCTF Round 33 | use decorators on functions |
Breaking in the jail | ImaginaryCTF Round 34 | pickle jail, chain pickle modules with some dependencies to eventually get to os |
Revenge is best served pickled | ImaginaryCTF Round 34 | todo |
My Little Jail | ImaginaryCTF Round 35 | overwrite global any with all to bypass blocklist |
PyCryptoJail | ImaginaryCTF Round 36 | discrete logarithm and nfkc normalization abuse |
Exceptional Pyjail | ImaginaryCTF Round 37 | todo |
Safe Pickle | ImaginaryCTF Round 38 | vulnerability-ish in picklescan |
pickle-madness | ImaginaryCTF Round 43 | bash jail disguised as pickle jail |
Low Security Jail | ImaginaryCTF Round 44 | eval blacklist overwrite |
pygolf | ImaginaryCTF Round 44 | NFKC normalization op |
pickle overflow | ImaginaryCTF Round 49 | utf8 str encoded can be longer than 2 bytes per char |
pygolf 2 | ImaginaryCTF Round 49 | use only 25 "non-space" chars and no jail essentials also |
cipherjail | ImaginaryCTF Round 50 | monoalphabetic substitution cipher pyjail, todo |
cipherjail2 | ImaginaryCTF Round 50 | monoalphabetic substitution cipher pyjail 2, todo |
Completely new challenge | ImaginaryCTF Round 50 | golf a generator frame escape with no dunders, todo |
modjail | ImaginaryCTF Round 53 | todo |
You shall not call! | ImaginaryCTF 2023 | BUILD opcode abuse into unpickler attr overwrite with cheese-ish |
You shall not call Revenge | ImaginaryCTF 2023 | BUILD opcode abuse into unpickler attr overwrite |
Get and set | ImaginaryCTF 2023 | pydash (almost) arbitrary get and set |
pyquinejailgolf | amateursCTF 2024 | todo |
pyquinejailgolf 2 | amateursCTF 2024 | todo |
Just Another Pickle Jail | Sekai CTF 2023 | todo |
introspection | angstromCTF 2024 | find discrepancies between pickle c impl and python impl (python2) |
llama jail | vsCTF 2024 | bypass ast visitor when ast.iter_child_nodes |
llama jail revenge | vsCTF 2024 | complicated |
calc | ImaginaryCTF 2024 | bypass audit hook with signal |
ok-nice | ImaginaryCTF 2024 | division by 0 side channel |
ASTea | UIUCTF 2024 | bypass simple ast thingy |
prison | ifCTF 2023 finals | todo |
repickle | CyberSpace CTF | abuse bug in pickler |
parseltongue | jailCTF 2024 | todo |
smiley-faiss | jailCTF 2024 | todo |
parity 1 | jailCTF 2024 | todo |
parity 2 | jailCTF 2024 | todo |
MMM | jailCTF 2024 | todo |
filter'd | jailCTF 2024 | todo |
charredcoal | jailCTF 2024 | todo |
what numbers? | jailCTF 2024 | todo |
polyglo7quine | jailCTF 2024 | todo |
what flag? | jailCTF 2024 | todo |
respy evil challenge | jailCTF 2024 | todo |
void | jailCTF 2024 | todo |
respy nice challenge | jailCTF 2024 | todo |
functional programming | jailCTF 2024 | todo |
jellyjail | jailCTF 2024 | todo |
lost in transit | jailCTF 2024 | todo |
computer-monitor | jailCTF 2024 | todo |
pickled magic | jailCTF 2024 | todo |
stupid crypto chall | jailCTF 2024 | todo |
get and call | jailCTF 2024 | todo |
no nonsense | jailCTF 2024 | todo |
last message | jailCTF 2024 | todo |
axed | TCP1P CTF 2024 | python2 __metaclass__ abuse |
sym | TCP1P CTF 2024 | todo |
typically not a revenge | TCP1P CTF 2024 | sys & builtins nuked, a-zA-Z._[] allowed |
functional | TCP1P CTF 2024 | challenge copied from jailctf but with rce |
RSAjail-1 | Blue Water CTF 2024 | todo |
RSAjail-2 | Blue Water CTF 2024 | todo |
RSAjail-3 | Blue Water CTF 2024 | todo |
Prison Reform | diceCTF 2023 | match case for arb getattr |
unipickle | diceCTF quals 2024 | pickle with utf8 valid bytes |
diligent-auditor | diceCTF quals 2024 | overwrite audit hook stuff with ctypes |
IRS | diceCTF quals 2024 | bypass c audit hook with pwn |
1linepyjail | SECCON quals 2024 | use help to import anything for subclasses usage |
Don't Sandbox Python 1 | UofTCTF 2025 | use numpy module attributes to get to dangerous stuffs |
Don't Sandbox Python 2 | UofTCTF 2025 | todo (it is a 0day) |
Don't Sandbox Python 3 | UofTCTF 2025 | todo (it is a 0day) |
SSPJ | Srdnlen CTF 2025 | .lower() filter bypass and __getattr__ module attr overwrite with import |
Another Impossible Escape | Srdnlen CTF 2025 | func default dict abuse and use of gc module to recover deleted flag |