--[ 8 - 使用RAP命令列出服务器上所有可得的共享列表
这部分是上面的补充。我将会演示一个如何使用RAP命令的例子。
我们如何才能获得网络上的每人都可访问的SMB共享资源:
其实过程很简单。客户端必须在服务器上通过认证。这些在第三章里都有讲解。在服务器通过验
证后,客户端发送一个TconX请求数据报给服务器(在接收到SesssetupX应答数据报之后)。
TconX 的意思是 Tree Connect and X。
TconX请求数据报用来访问一个共享资源。
----[ 8.1 - TconX数据报
TconX数据报是建立在SMB基础报文头部之上的,命令代码为0x75。
请求数据报头部:
UCHAR WordCount; Count of parameter words = 4
UCHAR AndXCommand; Secondary (X) command; 0xFF = none
UCHAR AndXReserved; Reserved (must be 0)
USHORT AndXOffset; Offset to next command WordCount
USHORT Flags; Additional information
USHORT PasswordLength; Length of Password[]
USHORT ByteCount; Count of data bytes; min = 3
UCHAR Password[]; Password
STRING Path[]; Server name and share name
STRING Service[]; Service name
密码在会话建立过程中被发送到了服务器。如果密码的长度为1,则密码就被置为空(0x00)。
“Path”域包含了你想要访问的共享资源的名字。它使用UNICODE编码。如过我想访问一台
“myserver”服务器上的“myshare”资源,“Path”字符串就该置为“\\myserver\myshare”。
“Service”包含了请求资源的类型:
stringType of ressource
“A:” 磁盘共享.
“LPT1:” 打印机.
“IPC” 命名管道.
“COMM” 通信设备.
“?????” 任何设备类型.
如果你要扫描设备的类型,你必须在“Service”域里使用“?????”。
在你发送了一个TconX请求数据报到服务器后,它会给你发送一个TconX的应答报文。你还必须
修复“Tid”域(在SMB基础报文头部),因为它是RAP命令里的事物处理请求。你还要告诉服务器你想
获得那些你有权得到的资源名字。当然,你可以通过“NETSHAREENUM”命令来获得它们。
----[ 8.2 - RAP命令“NetshareEnum”的解释
我们将要学习RAP命令里的“NetShareEnum”。
RAP命令中的“NetShareEnum”请求:
函数NetShareEnum的16位代码: 0;
参数描述符: “WrLen”;
返回的数据描述符: “B13BWZ”;
一个16位的值为0x01的整数;
一个16位整数包含的获得数据的缓冲区长度;
在这个请求数据报中不需要任何数据,所以“DataCount”域和“TotalDataCount”域都置零。
│--------------------------------------------│
│ NETBIOS HDR │---------> 4 bytes
│--------------------------------------------│
│ SMB BASE HDR │---------> 32 Bytes
│--------------------------------------------│
│ SMB TRANSACTION REQUEST HDR │
│--------------------------------------------│
事物处理请求的“Parameters”域获得RAP请求命令的参数:
│--------------│
│ 0x0000 │ ----------------------------------------> A
│--------------│--------------│--------------│
│ W r │ L e │ h 0x00│-----------> B
│--------------│--------------│--------------│-------│
│ B 1 │ 3 B │ W Z │ 0x00 │---> C
│--------------│--------------│--------------│-------│
│ 0x0001 │ 0xffff │--------------------------> D
│--------------│--------------│
A: NetShareEnum函数代码: 0x00
B: 参数描述符
C: 数据描述符
D: 0x01(已定义值)和0xffff(获取数据报的最大长度)
服务器的应答:
“Parameters”域接收到事物处理应答报文头部信息:
一个16位整数包含了返回的状态值:
成功 0
拒绝访问 5
拒绝访问网络 65
更多数据 234
服务器已关闭 2114
事物处理配置错误 2141
一个16位的“转换字”,用来计算备注信息的偏移量。
一个16位获得返回的条目数 = 返回SHARE_INFO数据结构的数目。
一个16位获得可利用的条目数。
在事物处理应答报文的“Data”域中包含了几组SHARE_INFO的数据结构。
SHARE_INFO数据结构包含了可利用资源的信息,定义如下:
struct SHARE_INFO {
char shi1_netname[13]; /*Name of the ressource*/
char shi1_pad; /*Pad to a word*/
unsigned short shi1_type; /*Code specifies the type of the shared resssource :
0 Disk Directory tree
1 Printer queue
2 Communications device
3 IPC*/
char *shi1_remark; /*Remark on the specified ressource*/
}
shi1_remark是一个32位的字符传指针。它包含了相应资源的备注信息。你必须取出它的后16位
到“converter word”域中,以知道这个备注字符串和RAP应答报文参数头部之间的偏移量。
实际上以ASCII编码是:
│--------------------------------------------│
│ NETBIOS HDR │------------> 4 bytes
│--------------------------------------------│
│ SMB BASE HDR │------------> 32 Bytes
│--------------------------------------------│
│ SMB TRANS REPLY HDR │
│--------------------------------------------│
事物处理应答头部的“Parameters”域定义:
(对应于NetShareEnum函数返回的参数)
│--------------------------------------------│
│ status code │-------------> 2 bytes
│--------------------------------------------│
│ converted word │-------------> 2 bytes
│--------------------------------------------│
│ number of entries returned │-------------> 2 bytes
│--------------------------------------------│
│ number of entries available │-------------> 2 bytes
│--------------------------------------------│
事物处理应答报文的数据部分:
(对应于多个SHARE_INFO数据结构)
│--------------------------------------------│
│ shi1_netname │-----------> 13 bytes
│--------------------------------------------│
│ shi1_pad to pad to word │-----------> 1 byte
│--------------------------------------------│
│ type of service │-----------> 2 bytes
│--------------------------------------------│
│ pointer to remark string │-----------> 4 bytes
│--------------------------------------------│
.
其他的SHARE_INFO数据结构
.
│--------------------------------------------│
│ remark string 1 │
│--------------------------------------------│
│ another remarks strings │
│--------------------------------------------│
--[ 9 - 结论
我希望你能在这篇文章中学到些东西。如果你有任何意见,问题,请与我联系:
--[ 10 - 参考
[1] "A common Internet File System (CIFS/1.0) Protocol
Preliminary Draft", Paul J.Leach and Dilip C. Naik
http://www.snia.org/tech_activities/cifs/cifs-tr-1p00_final.pdf
[2] "CIFS Remote Administration Protocol Preliminary Draft"
Paul J.Leach and Dilip C. Naik
http://us6.samba.org/samba/ftp/specs/cifsrap2.txt
[3] RFC 1001
http://www.faqs.org/rfcs/rfc1001.html
[4] RFC 1002
http://www.faqs.org/rfcs/rfc1002.html
相关专题
- DoS 拒绝服务攻击专题 (1215篇文章)
- 脚本攻击和防范 (2353篇文章)
- DDoS攻击防御与分析 (1480篇文章)
- ARP攻击防范与解决方案 (1702篇文章)
- 端口·木马·安全·扫描应用知识 (980次浏览)
- FTP服务器-架设-配置-漏洞-管理-安全精通篇 (386次浏览)
- FTP服务器架设--安全篇 (189次浏览)
- Win2000安全设置手册 (84次浏览)
- Apache服务器的安全性及实现 (59次浏览)
- 全方位堵住Windows 2003的安全隐患 (51次浏览)
- 让我们认识病毒命名规则 (25次浏览)
- U盘病毒原理 (17次浏览)
- Windows系统用户摆脱黑客攻击的方法 (16次浏览)
- 反垃圾邮件技术:九个方法告别垃圾邮件 (16次浏览)



