频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

SMB攻击的一些资料

来源:www.zxboy.com 作者: 出处:巧巧读书 2006-05-25 进入讨论组
上一页 1 2 3 4 5 6 下一页 

  --[ 5 - 密码

在SMB协议中,如果你想进行一次在服务器上的请求认证,你的密码可以以原码或加密后的形式发
送到服务器端。如果服务器支持加密属性,客户端必须发送一个应答信号。在negprot应答数据报中,

服务器会给客户端发送一个密钥。然后,客户端将密码加密并通过SesssetupX请求数据报发送到服务
器端。服务器将会核查密码的有效性,并由此允许或拒绝客户端的访问。

你必须知道一个SMB密码(未加密)的最大长度是14位。密钥的长度一般为8位,加密过后的口令长
度为24位。在ANSI密码中,密码中的所有位都转换成大写的形式然后再加密。

密码是以DEC编码方式进行加密的。


--[ 6 - 几种SMB数据报的描述

这一部分,我将会对SMB协议中涉及到的大多数重要的数据报类型进行分析。我知道这或许很烦,
不过这是了解SMB的工作机制和进行攻击的基础。我将会解释什么是数据报中最重要的类型。每种命
令都对应两种数据报类型,请求数据报和应答数据报。

----[ 6.1 - SMB数据报的常规特征

通常情况下,SMB运行于TCP/IP协议组之上。那么我们就假设SMB运行在TCP层之上。在TCP层上面,
你常常会发现NETBIOS(NBT)头部。在NBT上面,有SMB基础报文头部。在SMB基础报文头部之上,就是
另一种依赖于特定请求命令的头部。

----------------------
│ TCP Header │
----------------------
│ NETBIOS Header │
----------------------
│ SMB Base Header │
----------------------
│ SMB Command Header │
----------------------
│ DATA │
----------------------

“SMB Base header”包含了几种信息,像接收缓冲区的长度,允许的最大连接数目……它也包
含了一个鉴别请求命令的数字。

“SMB Command header”包含了所有的请求命令的参数(像磋商协议版本命令……)。

“DATA”容纳了请求命令的数据。

我们把“SMB packet”看成:NETBIOS Header + SMB Base Header + SMB Command Header
+ DATA。

注意:我将使用这个定义:

typedef unsigned char UCHAR; // 8 unsigned bits
typedef unsigned short USHORT; // 16 unsigned bits
typedef unsigned long ULONG; // 32 unsigned bits

而STRING被定义为以空字符结束的ASCII字符串。

----[ 6.2 - NETBIOS与SMB

NETBIOS(NETwork Basic Input and Output System)在微软的网络系统中被广泛使用。它是
一个软件接口和命名系统。每台主机都有一个长度为15个字符的NETBIOS名字,且第十六个字符用来
标志主机的类型(域名服务器,工作站……)。

第十六个字符的选择:

0x00 基础电脑,工作站。
0x20 资源共享服务器。

这还有一些其他的值可选,不过我们对这两个最感兴趣。第一个(0x00)鉴定一台工作站,第二个
(0x20)鉴定服务器。

在一个SMB数据报中,NETBIOS头部对应NETBIOS会话头部。

定义如下:

UCHAR Type; // Type of the packet
UCHAR Flags; // Flags
USHORT Length; // Count of data bytes (netbios header not included)

“Flags”域的值总是被置为0。

“Type”域有几种可能的选择:

0x81 对应一个NETBIOS会话请求。这个代码在客户端发送它的NETBIOS名字到服务器是使用。

0x82 对应一个NETBIOS会话应答。这个代码在服务器向客户端批准NETBIOS会话时使用。

0x00 对应一个会话消息。这个代码总是在SMB会话中被使用。

“Length”域包含了数据字节的长度(NETBIOS头部没有被包含在内)。数据包含在NETBIOS头部
以上的所有部分(它可能是 SMB Base Header + SMB Command Header + DATA 或 NETBIOS名字)。

NETBIOS名字与编码。

NETBIOS编码名字的长度为32字节。

NETBIOS名字总是以大写的形式存在的。

编码一个NETBIOS名字非常的简单。例如我的计算机的NETBIOS名字是“BILL”,它是一个工作
站,所以它的第十六个字符为“0x00”。

首先,如果一个NETBIOS名字比15字节短,就会在右边补填上空格。

“BILL “

十六进制为: 0x42 0x49 0x4c 0x4c 0x20 0x20 ......0x00

每个字节都分裂为4位一组:

0x4 0x2 0x4 0x9 0x4 0xc 0x4 0xc 0x2 0x0 .......

而且每个4位都要添加ASCII码‘A’的值(0x41)。

0x4 + 0x41 = 0x45 -> ASCII value = E
0x2 + 0x41 = 0x43 -> ASCII value = C
……

最后NETBIOS名字被编码为32字节长。

注意:

SMB可以直接运行于TCP之上而无须NBT(在Windows 2k和XP上它们使用455端口)。此时,
NETBIOS名字没有被限制在15字符以内。

----[ 6.3 - SMB的基础报文头部

这个头部在所有的SMB数据报中都会使用,以下是它的定义:


UCHAR Protocol[4]; // Contains 0xFF,'SMB'
UCHAR Command; // Command code
union {
struct {
UCHAR ErrorClass; // Error class
UCHAR Reserved; // Reserved for future use
USHORT Error; // Error code
} DosError;
ULONG Status; // 32-bit error code
} Status;
UCHAR Flags; // Flags
USHORT Flags2; // More flags
union {
USHORT Pad[6]; // Ensure section is 12 bytes long
struct {
USHORT PidHigh; // High part of PID
ULONG Unused; // Not used
ULONG Unused2;
} Extra;
};
USHORT Tid; // Tree identifier
USHORT Pid; // Caller's process id
USHORT Uid; // Unauthenticated user id
USHORT Mid; // multiplex id
UCHAR WordCount; // Count of parameter words
USHORT ParameterWords[ WordCount ]; // The parameter words
USHORT ByteCount; // Count of bytes
UCHAR Buffer[ ByteCount ]; // The bytes

“Protocol”域包含协议(SMB)的名字,前面放了一个0xFF。

“Command”域包含请求命令的数据。例如0x72就是“磋商协议”命令。

“Tid”域在客户端成功和一台SMB服务器上的资源建立连接后被使用的。TID数字用来鉴别资源。

“Pid”域在客户端成功在服务器上创建一个进程是使用。PID数字用来鉴别进程。

“Uid”域在一个用户被成功通过验证后被使用。UID数字用来鉴别用户。

“Mid”域在客户端拥有几个请求(进程,线程,文件访问……)是和PID同时使用。

“Flags”域也很重要,如果第15位置1,则使用UNICODE编码。

----[ 6.4 - 重要SMB命令的描述

SMB 磋商协议(negprot)

磋商协议在SMB会话建立连接的第一步时使用。

在SMB基础报文头部中的“Command”域被填充为:0x72。

下面是negprot请求与应答数据报的定义:

Request header

UCHAR WordCount; //Count of parameter words = 0
USHORT ByteCount; //Count of data bytes
struct {
UCHAR BufferFormat; //0x02 -- Dialect
UCHAR DialectName[]; //ASCII null-terminated string
} Dialects[];

这个数据报包括客户端向服务器发送的它所支持SMB协议的所有版本信息。

有三件事要说,在这个报文中:
“WordCount”域总是被置为零;
“ByteCount”域等于结构“Dialects”的长度;
“BufferFormat”域总是等于0x02。

“DialectName”包含SMB协议支持的几种版本信息。

应答数据报头部:

UCHAR WordCount; Count of parameter words = 17
USHORT DialectIndex; Index of selected dialect
UCHAR SecurityMode; Security mode:
bit 0: 0 = share, 1 = user
bit 1: 1 = encrypt passwords
USHORT MaxMpxCount; Max pending multiplexed requests
USHORT MaxNumberVcs; Max VCs between client and server
ULONG MaxBufferSize; Max transmit buffer size
ULONG MaxRawSize; Maximum raw buffer size
ULONG SessionKey; Unique token identifying this session
ULONG Capabilities; Server capabilities
ULONG SystemTimeLow; System (UTC) time of the server (low).
ULONG SystemTimeHigh; System (UTC) time of the server (high).
USHORT ServerTimeZone; Time zone of server (min from UTC)
UCHAR EncryptionKeyLength; Length of encryption key.
USHORT ByteCount; Count of data bytes
UCHAR EncryptionKey[]; The challenge encryption key
UCHAR OemDomainName[]; The name of the domain (in OEM chars)

这个数据报由服务器发出,它包含SMB协议支持的版本列表,服务器的SMB域名,如果需要还要
包含密钥。

重要的:

第一个感兴趣的域是“SecurityMode”位。如果第0位被选中,那么我们就选择了用户安全模式
如果没有,则拥有共享安全模式。如果第1位被选中,密码就使用DEC加密算法进行编码。

“SessionKey”域被用来鉴别会话。一个会话有单一的一个会话钥匙。

“Capabilities”域表明服务器是否支持UNICODE字符串,或NT LM 0.12特别的命令……

数据被放在报文头部的结束处。通过一个negprot应答,这些数据与“EncryptionKey”和
“OemDomainName”相对应。

“OemDomainName”域的长度等于(Bytecount - EncryptoinKeyLength)。

“OemDomainName”字符串包含服务器的SMB域名。

SesssetupX(Session setup and X)

SesssetupX数据报被用来处理用户鉴别,或在你访问资源时提供一个密码。

SesssetupX的命令代码是:0x73。

请求数据报头部:

UCHAR WordCount; Count of parameter words = 13
UCHAR AndXCommand; Secondary (X) command; 0xFF = none
UCHAR AndXReserved; Reserved (must be 0)
USHORT AndXOffset; Offset to next command WordCount
USHORT MaxBufferSize; Client's maximum buffer size
USHORT MaxMpxCount; Actual maximum multiplexed pending requests
USHORT VcNumber; 0=first (only),nonzero=additional VC number
ULONG SessionKey; Session key (valid iff VcNumber != 0)
USHORT CaseInsensitivePasswordLength; Account password size, ANSI
USHORT CaseSensitivePasswordLength; Account password size, Unicode
ULONG Reserved; must be 0
ULONG Capabilities; Client capabilities
USHORT ByteCount; Count of data bytes; min = 0
UCHAR CaseInsensitivePassword[]; Account Password, ANSI
UCHAR CaseSensitivePassword[]; Account Password, Unicode
STRING AccountName[]; Account Name, Unicode
STRING PrimaryDomain[]; Client's primary domain, Unicode
STRING NativeOS[]; Client's native operating system, Unicode
STRING NativeLanMan[]; Client's native LAN Manager type, Unicode

这个报文提供很多关于客户端系统的信息。

收藏地址:http://www.qqread.com/net-saft/f707113081.html 更多文章 更多内容请看DoS 拒绝服务攻击专题脚本攻击和防范DDoS攻击防御与分析专题,或进入讨论组讨论。
上一页 1 2 3 4 5 6 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章