关于bash漏洞,谁能详细解释下这两句命令的执行流程及结果

Scholer 发布于 2014/09/26 12:23
阅读 379
收藏 1
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

env -i  X='() { (a)=>\' bash -c 'echo date'



加载中
0
实践哥
实践哥
同样求解,
0
酒逍遥
酒逍遥
Bash漏洞的攻击原理?
据  Linuxidc网站介绍 ,GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在shell被调用后会被立即执行。 
这是属于远程任意代码执行的安全漏洞,所以可以完全控制电脑。 
漏洞存在条件:
金山毒霸论坛的一名工作人员 称,任何已知程序,只要满足以下两个条件就可以被用来通过Bash漏洞导致任意命令执行: 
1、程序在某一时刻使用Bash作为脚本解释器处理环境变量赋值; 
2、环境变量赋值字符串的提交取决于用户输入。 
如何验证漏洞
那如何验证是否存在漏洞?可以使用如下命令来检查系统是否存在此漏洞: 
env x='() { :;}; echo vulnerable' bash -c "echo this is a test" 
影响范围:
GNU Bash≤4.3,此漏洞可能会影响到使用ForceCommand功能的OpenSSH sshd、使用mod_cgi或mod_cgid的Apache服务器、DHCP客户端、其他使用Bash作为解释器的应用等。 
而  另一个网站更详细的报道介绍 ,这个漏洞能影响众多的运行在GNU/Linux上的会跟BASH交互的应用程序, 
包括:
  • 在sshd配置中使用了ForceCommand用以限制远程用户执行命令,这个漏洞可以 绕过限制去执行任何命令。一些Git和Subversion部署环境的限制Shell也会出现类似情况,OpenSSH通常用法没有问题。
  • Apache服务器使用mod_cgi或者mod_cgid,如果CGI脚本在BASH或者运行在子 SHELL里都会受影响。子Shell中使用C的system/popen,Python中使用os.system/os.popen,PHP中使用system/exec(CGI模式)和Perl中使用 open/system的情况都会受此漏洞影响。
  • PHP脚本执行在mod_php不会受影响。
  • DHCP客户端调用shell脚本接收远程恶意服务器的环境变量参数值的情况会被 此漏洞利用。
  • 守护进程和SUID程序在环境变量设置的环境下执行SHELL脚本也可能受到影响。
  • 任何其他程序执行SHELL脚本时用BASH作为解释器都可能受影响。Shell脚本不 导出的情况下不会受影响。
0
酒逍遥
酒逍遥

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

这行的意思 是定义一个环境变量 x  它的内容是 () { :;}; echo vulnerable

bash -c "echo this is a test" 是通过bash执行 "echo this is a test" 

由于bash漏洞, 环境变量x的内容被当成 shell命令通过bash执行了.

这就是为什么会看到输出vulnerable 和 this is a test 的原因

0
Micooz
Micooz
看看bash源码,跟踪调试~
返回顶部
顶部