我偶然发现了一个关于使用suid
可执行文件访问系统文件的问题。
我写了这个简短的 POC:
#include <unistd.h>
#include <stdio.h>
int main()
{
if (access("/etc/shadow", W_OK) == 0)
printf("shadow writable!\n");
else
printf("shadow not writable\n");
return 0;
}
然后我编译并用chown root:root
和chmod u+s
(由root运行)给它suid
这是生成的可执行文件
-rwsrwxr-x 1 root root 4847 Apr 14 08:40 a.out
目标文件有这些权限
-rw------- 1 root root 1836 Oct 8 2014 /etc/shadow
当我运行程序时,它给出了以下输出:
[d.berra@srvr ~]$ ./a.out
shadow not writable
为什么会这样?我的意思是...我正在访问该文件,root
并且可以在该文件上root
写入!
注:selinux
已禁用
想法?