Bash远程代码执行漏洞分析



今日爆出一个Bash的RCE漏洞,威力巨大。看了看老外的分析,觉得有必要写一写自己对这个漏洞的理解。

首先,问题起因于一个命令ENV。

原型:

env [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...]

Man是这么说的:

Display, set, or remove environment variables,Run a command in a modified environment.

我的理解是使用env命令的key=value,首先会改变环境变量key,如果没有会临时创建,注意,这里是临时的改变环境变量。然后就把value后面的内容当做命令执行,类似于PHP中的eval。

测试如下:

可以看到,这个命令可以达到的作用是:在临时修改环境变量的同时,也可以执行命令。

网上流传的EXP通常会带有一个User-Agent字段然后后面跟一个字符串。严格意义上来说,这里的User-Agent完全可以使用其他的HTTP字段进行替换。

注意到,ENV本身不是漏洞的成因,漏洞的本质是代码注入。

在bash源码中的处理参数的代码段中:

这段代码是解析匿名函数的时候使用的,使用匿名函数我们才能达到执行的目的:parse_and_execute。这里的string是环境变量的value,name是环境变量的键值。由于没有进行过滤就直接传给temp_string,然后送到parse_and_execute中进行执行了。

也就是说,匿名函数执行完后面本应该结束掉,但是在bash中却又继续执行后面的参数了。

比如:TEST=() { :;};
/bin/cat /etc/passwd

在环境变量导入到bash的同时,也会执行/bin/cat /etc/passwd。

这和CGI的关系是:

对于CGI脚本来说,HTTP协议中的“key-value”都会变为shell中的“环境变量=值”。

  • Host (“www.example.com”,as REMOTE_HOST)
  • Header value (“custom-header-value”, as HTTP_CUSTOM in this example)
  • Server protocol (“HTTP/1.1”, as SERVER_PROTOCOL)

而将客户端信息导入到系统环境变量的时候就会用到ENV了。那么这样一来,我们就可以通过在客户端构造攻击向量去攻击服务器了。从CGI对HTTP参数的处理上看,使用哪个字段都是可以的。

本地测试过程如下:

构造有漏洞的CGI:

访问:http://10.10.10.132/cgi-bin/test

这里我也使用User-Agent进行测试:

结果如下,发送请求之后,服务器会爆出500出错:

但是这时候echo aaa > /tmp/test
确实执行了。

验证下:

可以看到,服务器随便报错,但是我们的代码成功执行了。

EXP:

使用nc做个反弹shell就行了,威力挺大吧。

不过这个漏洞可是不好做批量,一种思路就是爬虫+扫描进行CGI链接的获取。当然,还有一种比较无脑的,就是------------------------------------直接抓搜索引擎的。

以上为个人理解,欢迎讨论与错误指正。

时间: 2025-01-04 02:37:35

Bash远程代码执行漏洞分析的相关文章

Bash远程代码执行漏洞批量利用脚本

Bash远程代码执行漏洞的威力确实要比心脏滴血大很多,但是影响范围不是很广泛,不过昨天的分析文章Bash远程代码执行漏洞分析中末尾提到了这个漏洞的批量问题. 其中最最简单的方法就是使用搜索引擎的hacking技术,这里我使用的Google Hacking语法结合Google API来进行链接的抓取.只不过在国内的话....需要加代理. 程序中的代理是我本地的goagent代理,端口是8087.如何检测漏洞思路也很简单,我这里直接根据服务器返回码进行判断的. 思路就是以上这些,下面还是和往常一样,

小米手机MIUI远程代码执行漏洞分析

7月我在研究webview漏洞时专门挑小米手机的MIUI测试了下,发现了非常明显的安全漏洞.通过该漏洞可以远程获取本地APP的权限,突破本地漏洞和远程漏洞的界限,使本地app的漏洞远程也能被利用,达到隔山打牛的效果.在漏洞发现的第一时间,我已经将漏洞细节报告给了小米安全响应中心,目前漏洞已经修复. 测试环境:手机型号:MI 3 Android版本:4.2.1 JOP40D MIUI版本:MIUI-JXCCNBE21 内核版本:3.4.35-ga656ab9 一.   小米MIUI原生浏览器存在意

Apache Tomcat CVE-2017-12615远程代码执行漏洞分析

2017年9月19日, Apache Tomcat官方发布两个严重的安全漏洞, 其中CVE-2017-12615为远程代码执行漏洞,通过put请求向服务器上传恶意jsp文件, 再通过jsp文件在服务器上执行任意代码, 且最新的补丁未完全修复漏洞.中新网安将对该漏洞进行持续关注, 并第一时间为您更新相关漏洞信息. 漏洞编号 CVE-2017-12615 漏洞名称 Apache Tomcat 远程代码执行漏洞 漏洞评级 严重 影响范围 Apache Tomcat 7.0.0 - 7.0.79 漏洞分

CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc下载链接如下. github地址:https://github.com/edwardz246003/IIS_exploit 结合上面的POC,我们对漏洞的成因及利用过程进行了详细的分析.在分析过程中,对poc的exploit利用技巧感到惊叹,多次使用同一个漏洞函数触发,而同一个漏洞同一段漏洞利用代码

Bash远程代码执行漏洞修复

Bash漏洞 2014年9月25日,继"心脏滴血"之后,这个从澳大利亚远渡重洋而来的bash远程执行漏洞再次让互联网震惊.如果说心脏滴血只能借助窃取用户电脑信息,而bash漏洞允许黑客远程控制电脑,从而拿到系统的最高权限! 漏洞详情页面:http://seclists.org/oss-sec/2014/q3/650 Bash漏洞的原理: BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!当前版本的bash通过以函数名作为环境变量名,以"()

【转载】Joomla远程代码执行漏洞分析

利用脚本.exp:python jj.py http://123.123.123.123 ->直接GETSHELL python jj.py http://123.123.123.123 "whoami" ->执行命令#author:we8i&90sec import urllib2,urllib,base64 import cookielib,sys,re cj = cookielib.CookieJar() opener = urllib2.build_open

ECShop全系列版本远程代码执行漏洞复现

前言 问题发生在user.php的display函数,模版变量可控,导致注入,配合注入可达到远程代码执行 漏洞分析 0x01-SQL注入 先看user.php $back_act变量来源于HTTP_REFERER,我们可控. assign函数用于在模版变量里赋值 再看display函数 读取user_passport.dwt模版文件内容,显示解析变量后的html内容,用_echash做分割,得到$k然后交给isnert_mod处理,由于_echash是默认的,不是随机生成的,所以$val内容可随

Office CVE-2017-8570远程代码执行漏洞复现

实验环境 操作机:Kali Linux IP:172.16.11.2 目标机:windows7 x64 IP:172.16.12.2 实验目的 掌握漏洞的利用方法 实验工具 Metaspliot:它是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报.这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程,团队合作. 实验内容 Office CVE-2017-8570 CVE-2017-8570漏

Android WebView远程代码执行漏洞简析

0x00 本文参考Android WebView 远程代码执行漏洞简析.代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo.下面我们分析代码. 0x01 首先列出项目工程目录: MainActivity.java的代码如下: public class MainActivity extends Activity { private WebView webView; private Uri mUr