为什么“echo os.system('/bin/bash')”有效?

Tot*_*tem 5 python echo restricted-shell

我正在做一种黑客挑战,其中一部分发现我被困在一个只有很少命令的受限 shell 中。可用的命令之一是echo. 在我的头撞墙几个小时后,我决定在一些提示下达到顶峰。事实证明,这echo os.system('/bin/bash')会让你摆脱受限制的外壳......只有在我看到这个之后我才能用谷歌搜索它,但我没有找到任何关于它的信息,除了你可以在一些受限的环境中做到这一点壳的情况。当我用 zsh 和 bash 尝试它时,它在我的终端上不起作用......为什么这甚至有效?这os.system部分对我来说看起来像 Python .. 有人可以向我提供一些背景知识吗?如果这是 Python,它还能如何与 echo 一起使用?

use*_*931 4

这似乎是LShell 0.9.15中存在的问题,LShell 是用 python 实现的受限 shell。

存在漏洞的函数被称为check_path(),该函数用于检查是否允许用户访问命令行上的给定路径。

问题是这个函数用作eval()从命令行中删除引号的方法,并且这也很乐意执行任何有效的 python 表达式。

        对于行中的项目:
            # 删除潜在的引号
            尝试:
                项目 = 评估(项目)
            除了:
                经过

此问题后来在以下提交中通过用eval()正则表达式替换替换调用来修复:https://github.com/ghantoos/lshell/commit/4e05ac2e9c12142beed0e0fa16331ee0fd7dbd42#diff-edb4dda47bc5b086988a93df2615df6f