快速修复汉澳sinox命令解释程序bash shell漏洞

2024-01-02 04:32

本文主要是介绍快速修复汉澳sinox命令解释程序bash shell漏洞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

bash是linux默认命令行管理程序shell,汉澳 sinox也安装有,虽然sinox并没有默认使用bash,但是用户一旦使用就会可能被通过漏洞入侵,所以必须快速修复。虽然sinox使用freebsd 的ports,但是freebsd已经升级到最新的软件管理pkg,ports正在被淘汰,要通过portsnap直接更新到最新的ports然后用pkg安装,不过最新的ports只是在freebsd10以上使用,对于低版本pkg可能不支持。不管怎么说,如果你要用pkg,只能用freebsd10,否则问题会很多,pkg会直接升级到软件的最新版本。pkg产生是为了实现类似yum直接更新二进制程序。要想编译最新的ports,先编译安装最新的pkg。最新的ports在sinox运行有的程序会有问题的。

既然如此,我们只能修改 sinox当前版本bash,把漏洞堵上去。先看bash漏洞。

运行env x='() { :;}; echo vulnerable’ bash -c “echo this is a test”
产生结果
vulnerable
echo this is a test
问题是,环境变量x通过() { :;}; echo vulnerable获得,但其中echo是系统命令,会执行。
如果把 echo vulnerable改成ls,pwd会怎么样,如果是sudo就会获得超级管理员的权限。网页用户可以通过cgi程序等方式使用bash运行指令控制系统。

我查阅了网上资料,堵漏洞原理就是修改程序中对引入函数的处理,并参考了最新bash ports改动方式,制定了当前版本bash堵漏洞办法。

先用make extract,make patch把代码解压出来,然后备份shell.c和variables.c为后面加.orig,然后修改shell.c和variables.c,改好后进入源码目录生成补丁。

diff -uN shell.c.orig shell.c > shell.c.patch
diff -uN variables.c.orig variables.c >variables.c.patch

把生成的patch文件放到ports源码files目录.然后在 Makefile增加这两行

EXTRA_PATCHES+= ${PATCHDIR}/shell.c.patch
EXTRA_PATCHES+= ${PATCHDIR}/variables.c.patch

现在进入目录,make clean;make。检查一下代码是否已经改正好。如果好了就make install.

为了强制安装,我在/etc/make.conf增加

FORCE_PKG_REGISTER=yes

安装好了以后,运行bash。输入上面命令行,不再出现vulnerable,修复成功。

为了用gcc4.6编译,我在make.conf设置

DISABLE_VULNERABILITIES=YES
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc46)

CC=gcc46
CXX=g++46
CPP=cpp46
.endif

下面粘贴patch文件
shell.c.patch

— shell.c.orig 2011-01-03 05:04:51.000000000 +0800
+++ shell.c 2014-10-11 17:37:30.000000000 +0800
@@ -225,7 +225,7 @@
#else
int posixly_correct = 0; /* Non-zero means posix.2 superset. */
#endif

+int import_functions = 0;//IMPORT_FUNCTIONS_DEF; //patch
/* Some long-winded argument names. These are obviously new. */
#define Int 1
#define Charp 2
@@ -244,6 +244,7 @@
{ “help”, Int, &want_initial_help, (char **)0x0 },
{ “init-file”, Charp, (int *)0x0, &bashrc_file },
{ “login”, Int, &make_login_shell, (char **)0x0 },
+ { “import-functions”, Int, &import_functions, (char **)0x0 }, //patch
{ “noediting”, Int, &no_line_editing, (char **)0x0 },
{ “noprofile”, Int, &no_profile, (char **)0x0 },
{ “norc”, Int, &no_rc, (char **)0x0 },

variables.c.patch

— variables.c.orig 2014-10-11 19:22:10.000000000 +0800
+++ variables.c 2014-10-11 19:21:34.000000000 +0800
@@ -100,6 +100,7 @@
extern int assigning_in_environment;
extern int executing_builtin;
extern int funcnest_max;
+extern int import_functions;//patch

#if defined (READLINE)
extern int no_line_editing;
@@ -312,7 +313,8 @@
char *name, *string, *temp_string;
int c, char_index, string_index, string_length;
SHELL_VAR *temp_var;

+ int skipped_import;//patch
+
create_variable_tables ();

for (string_index = 0; string = env[string_index++]; )
@@ -335,11 +337,18 @@
char_index == strlen (name) */

temp_var = (SHELL_VAR *)NULL;

+ skipped_import = 0;//patch
+reval: //patch
/* If exported function, define it now. Don’t import functions from
the environment in privileged mode. */
– if (privmode == 0 && read_but_dont_execute == 0 && STREQN (“() {“, string, 4))
+ if (skipped_import == 0 && privmode == 0 && read_but_dont_execute == 0 && STREQN (“() {“, string, 4)) //patch
{
+ if (!import_functions && !interactive_shell) { //patch————
+ skipped_import = 1;
+ //report_error (_(“Skipping importing function definition for `%s': –import-functions required.”), tname);
+ goto reval;
+ } //———–patch
+
string_length = strlen (string);
temp_string = (char *)xmalloc (3 + string_length + char_index);

我为sinox2014就是64位制作了bash修复安装包,安装命令如下|
pkg_add -f ftp://sinox.3322.org/bash-4.2.20.tbz

sinox2013没有制作修复安装包,大家可以自己按上面说明自己编译修复。

这篇关于快速修复汉澳sinox命令解释程序bash shell漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561334

相关文章

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon