【发布时间】:2015-04-14 06:50:47
【问题描述】:
我偶然发现了一个关于使用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 编译并给它suid(由root 运行)
这是生成的可执行文件
-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 CAN 的身份访问该文件!
注意:selinux 已禁用
想法?
【问题讨论】:
-
你应该尝试使用
vipw -sBest way to edit shadow file