墨者学院 - Bash漏洞分析溯源

article/2025/10/4 17:11:18

bash漏洞技术层面分析

漏洞起源:

漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令:

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


如果在一个含有版本号小于bash 4.3的linux或者unix系统上执行以上命令,可能会得到以下输出:

vulnerable
this is a test


其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。

漏洞原理及分析:

该脚本的出现引起了我技术人员的关注,其中env为一个系统命令,该命令让系统创建一个环境变量x='() { :;}; echo vulnerable'并且带着这个环境变量的值执行bash -c “echo this is a test”。第一行输出的”vulnerable”暴露了漏洞的存在,因为函数定义’() { :;};’之后的’echo vulnerable’指令本不该被执行却被执行。对bash详细分析后得知bash在处理含有函数定义诸如”() { :;};”的环境变量赋值的代码上存在设计缺陷,错误地将函数定义后面的字符串作为命令执行。
所以真正的利用与env命令无关,只要设法让系统接受一个含有”[函数定义]+[任意命令]”的环境变量赋值则可触发”[任意命令]”部分所表示的代码执行。

漏洞存在条件:

任何已知程序,只要满足以下两个条件就可以被用来通过bash漏洞导致任意命令执行:
1、程序在某一时刻使用bash作为脚本解释器处理环境变量赋值;
2、环境变量赋值字符串的提交取决于用户输入。

漏洞利用演示:

以下给出一个可能出现的应用案例,该案例通过进攻一个基于bash的cgi应用页面获取目标计算机的远程shell。
首先有一个基于bash的cgi网页应用存在于Apache服务器的cgi-bin目录下,cgi脚本内容为:

使用正常浏览器访问结果为一个普通页面:

但是我们可以通过curl等模拟http请求的工具构造一个不同寻常的http请求,命令如下:

该命令生成一个含有自定义字段”A_Custom_Header”的请求发给远程的基于Apache的cgi服务器,该字段的值被设置为一个可以触发该bash漏洞的字符串,其中的”/bin/bash......0>&1”是被执行在远程主机上的命令,作用是反弹一个远程bash shell(也可以是其它shell)到黑客主机的8080端口。被请求的cgi页面为http://10.20.230.63/cgi-bin/vul_cgi。而在黑客主机上使用netcat监听8080端口等待被黑服务器的远程连接:

执行上面的curl命令后发生了以下几件事情:
1、远程主机使用bash解释器创建一个名为”A_Custom_Header”的环境变量并赋值为”() { :;}; /bin/bash......0>&1”;
2、由于存在漏洞,bash“顺便”将’/bin/bash......0>&1’作为命令执行;
3、用户提交的恶意命令创建一个/bin/bash进程并创建socket将bash的IO链接至黑客机器10.20.230.63:8080(该测试案例中黑客机器和服务器为同一台机器,当然可以不同);
4、黑客主机的netcat收到来自被攻击服务器的socket链接,并获取远程shell的IO如下图:

获得了一个daemon用户的远程shell;
5、黑客可以使用该用户身份执行其它命令,实现了远程攻击。

 

 

 

使用curl或者抓包软件构造user-Agent(或者别的参数,比如Connection)就可以将参数传进去
注意这次实验漏洞的利用需要在闭合函数之后立即输出一个换行,用echo;或echo -e "rn";,否则会报错
换行命令后可以接/bin/cat 或者/bin/ls 来遍历文件夹、查看key

本题中

 

curl -A '() { :; }; echo -e "\r\n";/bin/cat ../../../key.txt' http://219.153.49.228:42303/cgi-bin/poc.cgi

 

 

curl命令语法   http://man.linuxde.net/curl

引用               http://www.srxh1314.com/bash-cgi-bin.html

 


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

相关文章

墨者 - Bash漏洞分析溯源

bash代码注入的安全漏洞分析 bash的环境变量 环境变量是操作系统运行shell中的变量,很多程序的运行需要获取系统的环境变量参数。具体赋值格式如下: $ var"hello world" 然后你就可以使用这个变量了,但是只是局部变量,即是当前进程…

墨者靶场 初级:Bash漏洞分析溯源

墨者靶场 初级:Bash漏洞分析溯源 题目背景介绍实训目标解题方向解题步骤 题目 背景介绍 安全工程师"墨者"对一单位业务系统进行授权测试,在测试过程中,发现存在bash命令执行漏洞。 实训目标 1、了解bash; 2、了解Bas…

Bash漏洞

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]... [NAMEVALUE]... [COMMAND [ARGS]...]Options-u …

Linux系统bash漏洞

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

Bash漏洞分析溯源

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

命令执行漏洞

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

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

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

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

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

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

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

3dmax绑定骨骼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UE4骨骼动画绑定

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

three.js进阶之骨骼绑定

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