从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=
HOME=/root
LOGNAME=root
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
CLASSPATH=.:/usr/jdk1..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 192.168.100.172
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=
_=/bin/env
OLDPWD=/root
x=e(){:;};echo vulnerable
在最后x已经定义成功了。把函数和命令当做字符串进行了处理。
看到了他们当中的不同了吗?这个就是bash的漏洞的原因,引申一下:如果骇客执行了恶意程序,后果不堪设想。当然通过网络等方法是用这个漏洞,git/svn。网络服务器等互联网常用的软件,造成网络的极大不安全。
最后我们看一下,这个列子中使用的一个比较不常用的符号 : (冒号)。在Bash里边:是一个占位符。是一个不执行的命令。这个命令对于命令输入不挑食,可以作为注释方法。
没有输出,可以对文件进行清空。
: > test.file
cat test.file
: your comment
从Bash漏洞学Shell脚本(冒号)的更多相关文章
- bash命令检测Shell脚本中的语法错误和查看详细执行过程
(1).bash命令检测Shell脚本中的语法错误 bash -v [脚本] [root@youxi1 ~]# vim a.sh #/bin/bash sum=$[$1+$2] echoo $sum ...
- Linux就该这么学--Shell脚本条件语句(二)
1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...
- Linux就该这么学--Shell脚本条件语句(一)
1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...
- Linux就该这么学--Shell脚本基本应用
1.接收用户的参数: Shell脚本为了能够让用户更灵活的完成工作需求,可以在执行命令时传递参数:(命令名 参数1 参数2...) Shell预定义变量: $0 当前执行Shell脚本的程序名 $1- ...
- java 调用bash shell脚本阻塞的小问题的解决
java 调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结 ...
- Vim编辑器与shell脚本
目录 Vim文本编辑器 Shell脚本 Shell编程变量 流程控制语句 计划任务 ...
- 简单的 Shell 脚本入门教程
Shell脚本 运作方式与解释型语言相当,如果有语言基础,学起 Shell 脚本就非常容易,但是 Shell 与常见的语言不同,一些常见的函数在 Shell 中需要组合一些命令得以实现 工具推荐 Sh ...
- Shell脚本编程具体解释
第12章 Shell脚本编程 l Shell命令行的执行 l 编写.改动权限和运行Shell程序的步骤 l 在Shell程序中使用參数和变量 l 表达式比較.循环结构语句和条件结构语句 l ...
- 介绍shell脚本
简单的说shell就是一个包含若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来, 以便日后使用.通常shell脚本以.sh为后缀.在编写shel ...
随机推荐
- Using OpenCV with gcc and CMake
Using OpenCV with gcc and CMake Note We assume that you have successfully installed OpenCV in your w ...
- Asp.Net Design Pattern Studynotes -- Part1
Asp.Net Design Pattern Studynotes -- Part1 let's start with an exampleto entry amazing OO world ! le ...
- textarea在光标位置插入文字
最近开发类似计算器界面,需要在textarea中编辑公式,涉及到 在光标位置插入 字符. 效果如下: + - * / 添加文字 // html代码如下: <!doctype html> & ...
- Hibernate查询之Criteria查询
转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式.Criteria ...
- mysql查询一天,查询一周,查询一个月的数据【转】
转自:http://www.cnblogs.com/likwo/archive/2010/04/16/1713282.html 查询一天: select * from table where to_d ...
- JMeter Tutorial的安装和具体操作
1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载: http://jm ...
- Contact Form 7邮件发送失败的解决办法
一.contact form 7无法发送邮件的原因 对mail()函数的不支持. Contact Form 7表单提交失败在使用过程中会出现,归根结底原因在于wordpress主机问题,由于国 内很多 ...
- notepad++下载Subversion插件,显示intalltion of subversion failed
notepad++安卓subversion的插件不成功,是因为我们下载TortoiseSVN客户端的版本跟subversion的版本不兼容 一.背景: 在新浪云平台上开发微信公众账号,因为要使用SVN ...
- C++中this指针的使用方法.
this指针仅仅能在一个类的成员函数中调用,它表示当前对象的地址.以下是一个样例: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 thi ...
- 偷偷mark下一个
java书单 thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程 版权声明:本文 ...