微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

壳注射 – 这是安全的?

我正在解决我在Linux下使用Firefox中的Flash性能不佳的问题。

我想知道下面的代码是否安全。 input是不可信的,我觉得如果不消毒,可能是危险的。

#!/bin/bash #in="vlc://www.youtube.com/watch?v=yVpbFMhOAwE" in=$1; out=`echo $in | sed -r 's/vlc://www.youtube.com/watch?v=([-_a-zA-Z0-9]*).*$/1/g'`; vlc "http://www.youtube.com/watch?v=$out";

编辑1:基于扬·胡德克的评论,我已经到了这一步

#!/bin/bash #in="vlc://www.youtube.com/watch?v=yVpbFMhOAwE" in=$1; if [ `expr "$in" : '^vlc://www.youtube.com/watch?v=[-_a-zA-Z0-9]*$'` -gt 0 ] then vlc "http${in:3}"; fi

编辑2(可能是最后的):

更清洁的方式来编写多个sed命令?

Bash:在模式之后插入一个文件内容到另一个文件

在Bashfunction里面的Cd

Linux Bash有一个do-while循环吗?

Bash – 更正格式(sed?)

#!/bin/bash #in="vlc://www.youtube.com/watch?v=yVpbFMhOAwE" in=$1; if expr "$in" : '^vlc://www.youtube.com/watch?v=[-_a-zA-Z0-9]*$' >/dev/null then vlc "http${in:3}"; fi

bash不会执行'at -f foo.sh'命令,即使使用#!/ bin / bash shebang也是如此

在纯bash中传递一个密码给ssh

sh:2:1:未find – 将多个PHPparameter passing给bash脚本

从Bash脚本显示Unix命令的确切输出

如何在shell脚本中发送失败作业的电子邮件

我不认为这个特定的脚本可以被实际利用来做任何邪恶的事情,但是只要vlc不会在一个错误的URL上做任何恶意的事情,从正确的YouTube主机开始,但包含有趣的东西。 因为消毒是完全无效的。

有三个错误一起意味着几乎所有的东西都可以传递给vlc,并且可以使用它找到关于系统的一些信息:

一个问题是echo命令。 Echo是unix shell中最不规则的命令,在每个shell中表现得非常不同。 如果您需要将参数传递给未修改的命令的标准输入,请使用printf 。

第二个问题是它的参数没有被引用(你仍然需要在命令替换中引用变量),所以它会经历分词和文件生成(globbing)。 后者可能会被滥用以获取系统的一些信息。 只要命令只具有局部效应,这是毫无价值的,但在任何网络可观察的事物中都会有类似的错误。 另外一些shell(但不是bash)可能会允许来自文件生成的一些副作用,在这种情况下会变得危险。

最后,sed将只是返回$in的内容,当它不匹配,你直接传递给vlc比。 它在那里被正确引用,所以vlc不会将其解释为独立的URL或选项,只能作为一个有趣的,无效的URL。 所以这是不可能被利用,除非在vlc中使用一些严重的错误

我想你应该:

使用带正确引号的参数的expr命令检查参数是否采用适当的格式。

如果没有,则中止错误

因为您已经检查过前缀,并且以=结尾,所以不要仅仅使用${in#*=}删除前缀。

在bash ,不需要使用expr :

regex="^vlc://www.youtube.com/watch?v=[-_a-zA-Z0-9]*$" if [[ $in =~ $regex ]]; then

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐