首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
网络知识 :: 网络安全

SMB攻击的一些资料


http://www.gipsky.com/
--[ 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

这个报文提供很多关于客户端系统的信息。本新闻共6页,当前在第2页 1 2 3 4 5 6
<< 如何设置防火墙实现禁用QQ、MSN等 SMB攻击的一些资料 >>
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号