• 从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

  • 相关阅读:
    【企业通讯录app番外篇】怎么样创建服务端?
    【android】activity的4种启动模式简介
    【android】开源一个企业通讯录app
    【android】来电悬浮窗
    【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!
    【android】开发笔记---存储篇
    【android】activity、fragment传值例子
    写给过去了的那段时光
    react前端自动化webpack配置
    玩转webpack之webpack的entry output
  • 原文地址:https://www.cnblogs.com/tom-zhao/p/3994529.html
Copyright © 2020-2023  润新知