简介
NFS全称Network File System,即网络文件系统,用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程访问保存在存储设备上的数据。
CVE-2022-26937是微软5月份修复的Windows
NFS中一个对NLM响应处理不当的栈溢出漏洞,攻击者可通过精心构造RPC数据包来利用此漏洞,从而劫持程序流程令服务器失陷。本文将从介绍NFS通信流程开始,对CVE-2022-26937漏洞进行分析,希望能够帮助读者了解NFS协议以及其通信流程中可能存在的不安全问题。
问题咨询和282G网络安全资料的领取点击此处即可
**01 **NFS通信流程
NFS是基于RPC远程过程调用协议来实现通信,RPC工作机制如下:
1. 客户端程序通过执行RPC系统调用的方式发送调用号与参数到服务端。
2. 服务端在收到客户端的系统调用请求后,本地执行对应系统调用,然后将结果返回给服务进程。
3. 服务进程将收到的结果封装后发送给客户端。
4. 客户端接受执行结果,继续执行。
这其中PRC结构如下表所示
Offset Size(bytes) Description
0x00 4 XID
0x04 4 Message Type (Call: 0)
0x08 4 RPC Version
0x0C 4 Program (e.g., 100000: portmap)
0x10 4 Program Version
0x14 4 Procedure
0x18 4 Credentials Flavour (e.g., AUTH_UNIX: 1)
0x1c 4 Credentials Length (q)
0x20 q Credentials
0x20+q 4 Verifier Flavour (e.g., AUTH_NULL: 0)
0x24+q 4 Verifier Length: w
0x28+q w Verifier
0x28+q+w N Program-specific data
有了如上结构,我们就可以伪造客户端跟服务器进行通信,比如构造如下请求。
由上,我们伪造客户端发送GETPORT CALL NLM的系统调用,来获取服务器NLM运行端口,服务器执行对应系统调用后将端口号发送给客户端。
NLM结构如下表
Offset Size(bytes) Description