TCP 紧急指针 RCE 漏洞
TL;DR
TCP 有一种深奥的机制来传输名为紧急数据的 OOB 数据。 通过利用这种机制,攻击者可以使传递给 recv() 系统调用的长度变量即recv() 的一个参数发生下溢,这将导致传递给 recv() 系统调用的缓冲区产生攻击者可控的溢出。 这可能导致在栈、堆或全局数据部分中分配的缓冲区溢出,从而导致远程代码执行。
背景知识1 - TCP
TCP 是一种传输层协议,是面向字节流的,允许在不可靠的 IP 层上传输有序的字节流,作为 TCP 会话的一部分通过 IP 层传送的每个数据单元是称为报文段,一个 TCP 报文段分为首部和数据两部分,TCP 的全部功能体现在其首部中各字段的作用。
各字段作用的详细介绍请参考:计算机网络-谢希仁第七版-P217
根据其源/目标 IP 和源/目标端口的 4 元组,每个 TCP 报文段都被视为特定 TCP 会话的一部分。
TCP 窗口与缓存的关系请参考:计算机网络-谢希仁第七版-P223
每个端点的 TCP/IP 堆栈都拥有一个称为 TCP Window 的缓冲区,其中包含作为会话的一部分接收到但尚未由套接字用户处理的所有数据。当用户在套接字上调用 recv() 系统调用时,数据会从 TCP 窗口缓冲区中提取出来。有新的(非重复的)TCP 段到达时,就会把数据插入到该缓冲区。
TCP 可靠有序传输的实现请参考:计算机网络-谢希仁第七版-P223
背景知识2 - TCP 紧急数据(OOB)说明
TCP的一个鲜为人知的功能是可以通过现有的 TCP 连接发送和接收紧急数据(OOB)。此功能旨在解决类似以下情况出现的问题:
- 客户端通过 TCP 连接异步的向服务器发送指令。