空格,';,`,/,\<>&;,|如何使用Bash命令绕过它们

空格,';,`,/,\<>&;,|如何使用Bash命令绕过它们,bash,Bash,我有PHP代码使用一些bash代码,PHP代码可以运行它,它有一个错误,使bash中的RCE 该命令也将执行“$(id)”命令 但是如果我执行任何其他命令,比如“ls-la”,它就有一个空间 空格将自动替换为“-” 我也检查了源代码,发现下面的字符空格,“,`,/,\,,,,,&,被过滤掉了 如何绕过它们,执行像“wget-link”这样的命令并完美地运行它 ****更新**** 下面的代码是我作为一个实例添加的。 在sendcmd函数中发送命令 `https://pastebin.com/ra

我有PHP代码使用一些bash代码,PHP代码可以运行它,它有一个错误,使bash中的RCE

该命令也将执行“$(id)”命令

但是如果我执行任何其他命令,比如“ls-la”,它就有一个空间 空格将自动替换为“-”

我也检查了源代码,发现下面的字符空格,“,`,/,\,,,,,&,被过滤掉了

如何绕过它们,执行像“wget-link”这样的命令并完美地运行它

****更新****

下面的代码是我作为一个实例添加的。 在sendcmd函数中发送命令

`https://pastebin.com/raw/1MfR6aic`
这是
id

uid=1000(ibug) gid=1000(ibug)
由于这些字符未经筛选,因此可以获得未经筛选的空格,如下所示:

ID=$(id)
echo${ID:14:1}foo
现在你有空间了。您可以使用
echo-e
eval
表达式获取几乎任何字符


我尝试了您的PHP代码,发现它可以工作:

sendcmd("http://52.27.167.139", "{echo,hello}");
然后用大括号括起来,用逗号。该壳将支撑展开至

echo hello

这比StackOverflow更适合于。SO的范围仅限于开发软件的实际问题——利用别人程序中的错误不是一回事。@thatotherguy,……OP在别人的PHP中有一个shell注入错误,但字符串是按描述的方式过滤的;他们试图确定如何升级有限的访问权限以运行任意代码。这是一个有趣的谜题,但我根本不相信这里的范围。“字符过滤”在哪里?如果HTTP头被导出到环境中,就像通过CGI接口调用PHP一样,这是一种将任意内容放入扩展的简单方法--
eval“${QUERY_STRING}”
您就在这里。字符在PHP文件端被过滤。“字符过滤”在哪里?@user2864740,在第三方中,问题中不包括有漏洞的PHP。@user2864740阅读OP的问题。@iBug,不一定是
echo-e
——为了不在输出上打印
-e
,系统需要运行一个非POSIX shell,并且典型的shell注入会得到
/bin/sh
,这比在交互实例中的可能性要小。更安全地使用
printf
@CharlesDuffy我一直在使用Bash。但是是的,
printf
是另一种解决方案。