从Bash漏洞学Shell脚本(冒号)

前天,爆发了Bash安全漏洞,非常恐怖。在网络上开始飞速传播,附带了非常友好的检测工具。

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

看一下运行结果:

vulnerable
this is a test

我的bash是vulnerable。

看一下测试命令。(这个才是我们需要看的东西,从中学习。)开始,我比较蒙。同事给我解释了这个命令的含义和出现问题的原因。

env设置环境变量的命令。给x设置了环境变量'() { :;}; echo vulnerable'。而环境变量经过bash的执行,匿名函数通过了执行,执行了vulnerable。

对于设置环境变量,正常而言是不能执行的。我们可以设置一下函数尝试一下。执行命令

env x='e() { :;}; echo vulnerable'

命令同时会把内容打印出来看

。。。。。。。#省略一些
SHLVL=1
HOME=/root
LOGNAME=root
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
CLASSPATH=.:/usr/jdk1.7.0_07/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SSH_CONNECTION=192.168.100.231 38730 192.168.100.172 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
OLDPWD=/root
x=e(){:;};echo vulnerable

在最后x已经定义成功了。把函数和命令当做字符串进行了处理。

看到了他们当中的不同了吗?这个就是bash的漏洞的原因,引申一下:如果骇客执行了恶意程序,后果不堪设想。当然通过网络等方法是用这个漏洞,git/svn。网络服务器等互联网常用的软件,造成网络的极大不安全。

最后我们看一下,这个列子中使用的一个比较不常用的符号 :  (冒号)。在Bash里边:是一个占位符。是一个不执行的命令。这个命令对于命令输入不挑食,可以作为注释方法。

没有输出,可以对文件进行清空。

: > test.file

cat test.file

 

: your comment

 

转载于:https://www.cnblogs.com/tom-zhao/p/3994529.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值