我当时正在做一种黑客挑战,其中一部分发现我被困在一个受限制的 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