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权限,有些系统仍然是原本用户权限。
为什么会这样呢?
因为system 函数调用的形式 为 /bin/bash -c
之前遇到老的 nmap --interactive //(+S)执行成功并没有获取到suid 的权限,