从端口扫描到权限提升:深入剖析rpcbind漏洞的攻防实战
1. 认识rpcbind:网络共享的"电话接线员"
想象一下你走进一家大型公司前台,告诉接待员你想找市场部的张经理。接待员查了通讯录后告诉你:"张经理在3楼305室,分机号3508"。这个接待员就像网络世界里的rpcbind服务——它不直接处理业务,但能告诉你该去哪里找对应的服务。
rpcbind(Remote Procedure Call Bind)是Unix/Linux系统中用于RPC服务的端口映射器,主要配合NFS(网络文件系统)工作。它默认监听111端口(TCP/UDP),就像个活页夹记录着:"文件共享服务在2049端口"、"用户验证在xxx端口"。我曾在企业内网渗透测试中发现,超过60%的NFS服务器都开着rpcbind,而管理员往往忽视它的安全配置。
这个服务本身不复杂,但问题在于:
- 版本老旧:很多服务器还在用存在已知漏洞的rpcbind 0.2.0-0.2.3
- 信息泄露:会暴露其他RPC服务的端口信息
- 连锁反应:攻破rpcbind往往能顺藤摸瓜找到NFS等敏感服务
2. 漏洞探测三板斧:从扫描到验证
2.1 基础扫描:发现目标
先来个快速全身检查:
nmap -sV -p 111 192.168.1.100这个命令就像用听诊器贴在111端口上,能听到:
- 端口开放状态
- 运行的rpcbind版本
- 使用的RPC协议版本
我上个月测试某云服务器时,就发现了个rpcbind 0.2.0,心跳顿时加速——这可是有公开漏洞的老版本。
2.2 深度探测:挖掘服务信息
光知道版本还不够,得看看它关联了哪些服务:
nmap -p 111 --script=rpcinfo 192.168.1.100这个脚本会列出所有注册的RPC服务,就像拿到了公司的部门通讯录。有次我通过这个发现了隐藏的NFS共享,里面居然有整个部门的项目源码。
2.3 漏洞验证:Searchsploit实战
知道版本后就要查"病历本":
searchsploit rpcbind典型输出会像这样:
----------------------------------------- Exploit Title | Path ----------------------------------------- rpcbind 0.1.0-0.2.1 | linux/dos/36771.txt rpcbind 2.0-4.1 | linux/remote/39568.py -----------------------------------------注意看那些标记为"remote"的条目,这些可能就是通往系统内部的钥匙。不过要提醒的是,生产环境千万别乱用DoS攻击脚本,除非你想被请去喝茶。
3. 漏洞利用实战:从信息收集到权限提升
3.1 Metasploit模块化攻击
对于不想折腾脚本的新手,Metasploit是瑞士军刀:
msfconsole use auxiliary/scanner/misc/sunrpc_portmapper set rhosts 192.168.1.100 run这个模块能帮你:
- 确认rpcbind服务真实性
- 获取所有映射的RPC服务端口
- 识别非常规端口运行的NFS服务
上周我遇到个案例,管理员把NFS改到了61000端口,以为能躲过扫描。结果通过rpcbind还是被抓出来了,因为所有RPC服务都要在这里登记。
3.2 NFS服务接力攻击
如果发现了NFS服务(通常端口2049),可以尝试:
showmount -e 192.168.1.100输出类似:
Export list for 192.168.1.100: /home/user/share * /var/log (everyone)看到(everyone)就要警惕了——这意味着任何IP都能挂载。我曾在某次授权测试中,通过挂载/var/log拿到了包含密码的日志文件。
3.3 权限提升经典路径
当获取到NFS访问权限后,可以尝试:
- 查找可写目录
- 上传恶意.so库文件
- 通过LD_PRELOAD提权
具体操作(假设已挂载到/mnt):
echo '[evil code]' > /mnt/home/user/.config/evil.c gcc -shared -o evil.so evil.c -fPIC然后在目标机上:
LD_PRELOAD=/tmp/evil.so /usr/bin/vulnerable_program这个技巧在去年某次红队演练中帮我拿下了3台服务器。关键是要找到有执行权限的程序目录。
4. 防御指南:给管理员的五个锦囊
4.1 版本升级第一原则
打开终端输入:
rpcbind -version如果版本低于2.4.0,请立即升级。就像我常跟客户说的:"用十年前的杀毒软件防今天的病毒,跟用渔网挡子弹没区别。"
4.2 防火墙最小化规则
建议的iptables规则:
iptables -A INPUT -p tcp --dport 111 -s 10.0.0.0/24 -j ACCEPT iptables -A INPUT -p udp --dport 111 -s 10.0.0.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 111 -j DROP只允许内网IP访问111端口,其他全部拒绝。有次审计时发现某公司服务器居然对0.0.0.0开放rpcbind,吓得我赶紧帮他们加了规则。
4.3 NFS配置 hardening
编辑/etc/exports时记住:
- 用
rw=明确指定可写IP - 禁用
no_root_squash - 加上
sec=krb5p加密选项
正确的配置示例:
/home/data 192.168.1.50(rw,sync,sec=krb5p)千万别学我见过的一个配置:/ *(rw,no_root_squash),这相当于把大门钥匙插在门锁上。
4.4 监控与日志审计
建议部署的监控项:
- 异常的rpcbind进程崩溃
- 非常规IP的111端口连接
- NFS挂载请求频率突增
用这个命令查可疑连接:
netstat -antp | grep rpcbind4.5 渗透测试验证
每季度至少做一次:
nmap --script "rpcinfo and safe" -p 111 YOUR_IP看看会泄露哪些信息。就像定期体检,早发现早治疗。去年有家客户就是通过定期扫描,在黑客之前发现并修补了rpcbind漏洞。
