linux关于suid提权笔记

suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限。

设置了s位的程序在运行时,其Effective UID将会设置为这个程序的所有者。比如,/bin/ping这个程序的所有者是0(root),它设置了s位,那么普通用户在运行ping时其Effective UID就是0,等同于拥有了root权限。

这里引入了一个新的概念Effective UID。Linux进程在运行时有三个UID:

  • Real UID 执行该进程的用户实际的UID
  • Effective UID 程序实际操作时生效的UID(比如写入文件时,系统会检查这个UID是否有权限)
  • Saved UID 在高权限用户降权后,保留的其原本UID(本文中不对这个UID进行深入探讨)

 

初代版本 suid.c

int main(int argc, char* argv[]) {
    return system(argv[1]);
}

 

赋予 suid 权限 

 

gcc suid.c -o suid

chmod +s suid

 

你以为这样就可以正常的利用好suid 后门了嘛???    不不不不 开始猜坑

其实也就是一个-p的问题

 

默认这样操作,也是有些系统可以正常获取suid 的 

 

大佬帮测试的结果,保存一下

Linux发行版 输出结果
Ubuntu 14.04 uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)
Ubuntu 16.04 uid=33(www-data) gid=33(www-data) groups=33(www-data)
Ubuntu 18.04 uid=33(www-data) gid=33(www-data) groups=33(www-data)
CentOS 6 uid=33(www-data) gid=33(www-data) groups=33(www-data)
CentOS 8 uid=33(www-data) gid=33(www-data) groups=33(www-data)
Debian 6 uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)
Debian 8 uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)
Kali 2019 uid=33(www-data) gid=33(www-data) groups=33(www-data)

有些系统是root权限,有些系统仍然是原本用户权限。

 

为什么会这样呢?

https://linux.die.net/man/1/bash  bash 说明~

因为system 函数调用的形式 为  /bin/bash -c 

 

 

之前遇到老的  nmap --interactive //(+S)执行成功并没有获取到suid 的权限,  

https://www.secshi.com/33974.html

linux关于suid提权笔记

上一篇:jQuery 实现公告无缝滚动


下一篇:Linux性能监控之vmstat