【发布时间】:2021-03-15 18:37:17
【问题描述】:
首先很抱歉,如果有人问这个问题我找不到任何答案。
我有一个通过 uwsgi 和 nginx 提供的 Flask 应用程序(与我的问题无关)。
我面临的问题是,如果我运行:
os.system(f"grep {needle} /some/path/haystack.txt")
我的服务器会输出以下遇到的错误:
/bin/sh: 1: grep: not found.
如果我跑:
os.system(f"/usr/bin/grep {needle} /some/path/haystack.txt")
一切都按预期进行。
我知道让用户运行命令是不安全的:这是我正在为公司开发的黑客 CTF 的一部分,他们必须能够运行命令,例如 ;cat /tmp/flag.txt。 p>
我想我可以有一个命令白名单,例如 cat less more 等,如果检测到这样的命令,只需将其替换为 /usr/bin/ 变体,例如:
; cat /tmp/flag.txt
变成
os.system(f"/usr/bin/grep ; /usr/bin/cat /tmp/flag.txt /some/path/haystack.txt")
但这并不理想,我想告诉 Python 运行命令而不必指定它应该使用 /usr/bin。
非常感谢任何帮助!
【问题讨论】: