碳基体

奋斗在产品安全第一线的安全妹子

十、TCP/IP协议分析-RDP协议

windows上的远程桌面协议RDP remote desktop protocol比较复杂,默认端口为3389,它封装在TPKT协议中进行传输。


TPKT数据包组成:采用大端字节序 

version 长度为1个字节 : 00-只支持classic rdp; 01-支持classic rdp和ssl ;03-除上面两个之外,还支持credssp

+ reserved 长度为1个字节

+ length 长度为2个字节 

+ 数据部分  长度为length-4


其中数据部分可以解析为

COTP协议 X.224、

multipoint-communication-service T.125

generic-conference-control T.124

RDP协议


COTP X.224数据包组成: https://msdn.microsoft.com/en-us/library/cc240842.aspx

length 长度为1个字节

+PDU Type 长度为1个字节。

0xe0表示CR Connect Request 连接请求

0xd0表示CC Connect Confirm 连接确认

0xf0表示DT Data

0x80表示DR Disconnect Request

+ 数据部分(

= Destination Reference 长度为2个字节 (不一定有)

+ Source Reference 长度为2个字节 (不一定有)

+ Class and options 长度为1个字节 (不一定有)

+其他) 长度为length-1


RDP网络层次:

1.网络连接层

1)客户端->服务端:发送连接请求Connect Request,其中Cookie指定客户端用户名或客户端IP与port


用户名cookie的格式为:Cookie:[space]mstshash=[ANSI string][0x0d0a]

#e.g. "mstshash=apple"

tcpdump -r rdp_single.pcap -X dst port 3389 and tcp[37] == 0xe0

 

IP cookie的格式为:Cookie:[space]msts=[ip address].[port].[reserved][0x0d0a] 

#e.g. "msts=420247818.15629.0000";

420247818表示IP

转化成点分制: hex(420247818)=0x190c790a; int('0a',base=16)=10,int('79',base=16)=121,

int('0c',base=16)=12,int('19',base=16)=25; ip为10.121.12.25

15629表示port

转化为十进制: hex(15629)=0x3d0d; int('0d3d',base=16)=3389,端口为3389


2)服务端->客户端:发送连接确认Connect Confirm


2. ISO数据层

3. 虚拟通道层

4.加密解密层

5.功能数据层



参考:

https://msdn.microsoft.com/en-us/library/cc240445.aspx

https://wiki.wireshark.org/RDP

https://msdn.microsoft.com/en-us/library/cc240769.aspx

http://www.jasonfilley.com/rdpcookies.html

预告:十一、TCP/IP数据包分析应用-TCP会话重组

来源:碳基体

评论

热度(1)