010补丁对比发现的九个漏洞(3)

04 TRANSACTION结构体中一些重要的成员变量:

* InSetup:指向transaction data buffer中接收的Setup的指针 * OutSetup:指向transaction data buffer中响应的setup的指针(当接收完所有Transaction数据且还未存入transaction data buffer时设置该指针) * InParameters:指向transaction data buffer中接收的trans_parameters的指针 * OutParameters:指向transaction data buffer中响应的trans_parameters的指针 * InData:指向transaction data buffer中接收的trans_data的指针 * OutData:指向transaction data buffer中响应的trans_data的指针 * SetupCount:Transaction请求中包含的setup元素的个数(每个元素占2字节),它决定了InSetup缓冲区的大小 * MaxSetupCount:Transaction响应中客户端能接收的setup的最大字节数,它决定了OutSetup缓冲区的大小 * ParameterCount:当前请求数据包中接收的trans_parameter的字节数,或响应数据包中trans_parameter的大小 * TotalParameterCount:同一transaction请求序列中所有SMB数据包trans_parameter全部字节数,它决定了InParameters缓冲区的大小 * MaxParameterCount:Transaction响应中客户端能接收的trans_parameter的最大字节数,它决定了OutParameters缓冲区的大小 * DataCount:当前请求数据包中接收的trans_data的字节数,或响应数据包中trans_data的大小 * TotalDataCount:同一transaction请求序列所有SMB数据包trans_data的全部字节数,它决定了InData缓冲区的大小 * MaxDataCount:Transaction响应中客户端能接收的trans_data的最大字节数,它决定了OutData缓冲区的大小 * Function:定义NT transaction下属子命令码 * Tid:Tree标识符 * Pid:进程标识符 * Uid:用户标识符 * Mid/Fid:Multiplex标识符 * AllDataReceived:当ParameterCount等于TotalParamterCount && DataCount等于TotalDataCount时,该字段被设置为1

05 在transaction data buffer中,InParameters、OutParameters、InData、OutData缓冲区有三种布局。

第一种:除TRANS_MAILSLOT_WRITE和SetupCount字段置为0的”TRANS“数据包外,其它SMB_COM_TRANSACTION数据包的内存布局如下所述,In*和 Out*缓冲区是重叠的。

+---------------+------------------------------------------------------+ |  TRANSACTION  |            transaction data buffer                  | +---------------+------------------------------------------------------+                 | InSetup |  InParameters  |      InData      |    |                 +------------------------------------------------------+                 |  OutParameters  |            OutData                |                 +------------------------------------------------------+

[译者注]  重叠的含义是指,InSetup、InParameters、InData所在内存位置,就是OutParameters、OutData所在内存位置。上图中InSetup和OutParameters的起始位置相同。简单来说,上述情况的内存布局可以具体表示为:

+---------------+------------------------------------------------------+ |  TRANSACTION  | InSetup |  InParameters  |      InData      |    | +---------------+------------------------------------------------------+

+---------------+------------------------------------------------------+ |  TRANSACTION  |  OutParameters  |            OutData                | +---------------+------------------------------------------------------+

TRANSACTION结构体中的InSetup指针和OutParameters指针在内存中指向的都是同一个内存地址。

第二种:除第一种情况外的其它SMB_COM_TRANSACTION数据包和所有SMB_COM_TRANSACTION2数据包的内存布局如下所述,所有缓冲区都不重叠。

+---------------+-------------------------------------------------------------------+ |  TRANSACTION  |                  transaction data buffer                          | +---------------+-------------------------------------------------------------------+                 | InSetup | InParameters |  InData  |  OutParameters  |  OutData  |                 +-------------------------------------------------------------------+

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2fdecb1a7e0d23e78a1017478a1e4d25.html