如何从exec()越狱?

2024-09-30 01:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python片段,它对用户提供的python执行exec

import sys
import traceback

def foo():
    print("jailbreak!")

c_globals = {}
c_locals = {}

try:
    exec(compile(open("core.py", "rb").read(), "core.py", 'exec'), c_globals, c_locals)
    c_locals["update"]()
except Exception:
    print(traceback.format_exc(2))

用户提供的python是否可能“越狱”或使调用代码崩溃?我知道用户代码可以调用exit,但除此之外,用户可能会有哪些不当行为?你知道吗

我仔细阅读了这篇question,但答案似乎有些陈旧。你知道吗

说清楚一点:我不是在找防弹沙盒。我在寻找用户可能会射中自己脚的方法,这样我就可以防止他们这样做。这是为了我正在制作的一个“自食其果”的电脑游戏。你知道吗

见:https://repl.it/repls/MistyConventionalControlflowgraph


Tags: 代码用户pycoreimportfoodefsys
1条回答
网友
1楼 · 发布于 2024-09-30 01:35:17

用户提供的代码在同一进程中运行,这意味着它与您的代码具有相同的访问权限和特权。你知道吗

由于Python允许循环导入,我们可以完成您的示例:

def update():
  print("This should be impossible:")
  from main import foo
  foo()

用户还可以使用与您自己的代码相同的权限运行shell命令:

def update():
  print("This should be impossible:")
  import subprocess
  subprocess.run(["ls", "-l"])

用户还可以简单地耗尽资源。 以下将最大限度地提高单个核心的CPU使用率:

def update():
  while True:
    x*x

exec在调用代码的同一上下文中执行代码,因此默认情况下根本不提供任何“沙盒”。你知道吗

相关问题 更多 >

    热门问题