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

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

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

答案1

这似乎是一个存在的问题壳牌0.9.15,一个用 python 实现的受限 shell。

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

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

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

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

相关内容