分享
 
 
 

修改WindowsSMB相关服务的默认端口

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Windows NT系列操作系统的NetBT(NetBios Over Tcpip)服务,是用来处理SMB(Server Message Block)相关的服务/客户操作的。

NetBT服务对应的驱动程序文件是netbt.sys,对应的注册表项是:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT。微软的KB 120642和KB 314053分别描述了Windows NT、Windows 2000、Windows XP上该键值的部分可选参数。

NetBT服务对应的在Windows NT 4.0上对应的端口是:

NameservicePort

137/UDP

DatagramPort

138/UDP

SessionPort

139/TCP

从Windows 2000开始,微软引入了SMB Direct Over TCP的445端口。上述的137、138、139 端口虽然被保留,并可正常工作,但是默认情况下,系统总是会使用445端口进行SMB会话,仅在445端口工作失败的情形下,才会使用139端口作为SessionPort。445端口默认情况下是始终开放的。如果要关闭该端口,可以参考微软KB 301673中的方法,在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters中增加一个值:

Value Name: SmbDeviceEnabled

Type: REG_DWORD

Value Data: 0

然后重新启动系统。

顺便提一下,如果要关闭139端口,可以参考微软的KB 299977:

1、 单击开始,指向设置,然后单击网络和拨号连接。

2、 单击您希望静态配置的本地连接,单击文件菜单中的属性。

3、 单击 Internet 协议 (TCP/IP),单击属性,单击高级,然后单击 WINS 选项卡。

4、 单击禁用 TCP/IP 上的 NetBIOS。

5、 单击确定,单击确定,再次单击确定。

修改会立即生效,不必重新启动系统。

这个445 端口可不可以改成别的值呢?分析netbt.sys可知,服务初始化的时候,函数NbtReadRegistry分别调用ReadParameters和ReadSmbDeviceInfo从注册表中获取NetBT服务的配置信息:

; ------------------------------------------------------------------------

push

[ebp+Handle]

push

offset _NbtConfig

call

_ReadParameters@8

; ReadParameters(x,x)

push

[ebp+KeyHandle]

call

_ReadSmbDeviceInfo@4

; ReadSmbDeviceInfo(x)

; ------------------------------------------------------------------------

ReadParameters读取的注册表值就在上面提到的三篇KB中基本都有相关说明,但是ReadSmbDeviceInfo 所获取的信息,似乎还没有现成的文档描述。下面是逆向工程出来的5.0.2195.6783版本netbt.sys的ReadSmbDeviceInfo函数:

; ------------------------------------------------------------------------

; __stdcall ReadSmbDeviceInfo(KeyHandle)

KeyHandle = dword ptr

8

push

ebp

mov

ebp, esp

lea

eax, [ebp+KeyHandle]

push

esi

push

eax

; KeyHandle

push

offset aParametersSmb

; "Parameters\Smb"

push

[ebp+KeyHandle] ; int

call

_NbtOpenRegistry@12

; NbtOpenRegistry(x,x,x)

mov

esi, eax

test

esi, esi

jl

short SetDefaultPort

;如果键不存在则转向去设置默认值

push

1

push

1BDh

; 默认值445

push

offset aSessionport

; "SessionPort"

push

[ebp+KeyHandle]

call

_NbtReadSingleParameter@16 ; NbtReadSingleParameter(x,x,x,x)

push

1

push

1BDh

; 默认值445

push

offset aDatagramport

; "DatagramPort"

mov

word_2BA88, ax

push

[ebp+KeyHandle]

call

_NbtReadSingleParameter@16 ; NbtReadSingleParameter(x,x,x,x)

push

[ebp+KeyHandle] ; Handle

mov

word_2BA8A, ax

call

ds:__imp__ZwClose@4

; __declspec(dllimport) ZwClose(x)

jmp

short Return

SetDefaultPort:

mov

SessionPort, 1BDh

;设置SessionPort为445

mov

DatagramPort, 1BDh

;设置DatagramPort为445

Return:

mov

eax, esi

pop

esi

pop

ebp

retn

4

; ------------------------------------------------------------------------

显然,ReadSmbDeviceInfo会先试图打开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters\Smb然后分别读取SessionPort 和DatagramPort,根据其中的值来设置相关端口。如果打开键失败,则转向 SetDefaultPort,将两个端口设置为默认的445,如果读取值失败,NbtReadSingleParameter的第三型参也指定了默认的返回值445。

SessionPort 和DatagramPort分别对应TCP和UDP的端口。不过我从来没有见到过UDP的SMB会话,所以,还是SessionPort更加重要一些。

然后NbtCreateAddressObjects根据这些信息,来打开端口,创建服务:

; ------------------------------------------------------------------------

mov

eax, [ebp+var_8]

mov

cx, SessionPort

; tcp端口值

mov

esi, offset aSmbserver

; "*SMBSERVER

"

mov

[eax+1F2h], cx

mov

eax, [ebp+var_8]

mov

cx, DatagramPort

; udp端口值

mov

[eax+1F6h], cx

mov

eax, [ebp+var_8]

mov

[eax+1F4h], di

mov

eax, [ebp+var_8]

lea

edi, [eax+1F8h]

movsd

movsd

movsd

movsd

push

[ebp+var_8]

push

0

push

7F000001h

call

_NbtCreateAddressObjects@12 ; NbtCreateAddressObjects(x,x,x)

; ------------------------------------------------------------------------

明确了流程,方法也就出来了。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters\Smb这个项默认情况下是没有的,所以程序总是会转向SetDefaultPort,如果我们手工创建Smb 项和下面的两个值,系统就会按照我们创建的值来设定端口。这是最简单的办法。当然,如果你愿意,手工修改netbt.sys 也是可以的。下面是一个把端口设定为555的注册表例子:

; ------------------------------------------------------------------------

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Smb]

"SessionPort"=dword:0000022b

"DatagramPort"=dword:0000022b

; ------------------------------------------------------------------------

上面提到的修改,会同时影响服务器和客户端。也就是说,如果我们把端口改为555,那么不但本机的SMB Direct Over TCP会监听555端口,访问其他机器的SMB服务时也会尝试往555 端口连接。也就是说,假使我们将两台计算机做同样的修改,那么这两台计算机之间可以正常互访共享,但是其它计算机则不能访问它们。

修改这个端口有什么用处呢?

1、 研究中有时候需要使用本机的445端口,例如做一些SMB会话劫持的试验。

2、 如果希望通过阻塞了445、139等端口的防火墙来访问网络共享,可以将服务器和客户端的SessionPort都设为80,这样,两者之间就会通过80端口进行SMB会话。而且,一般来说,这种修改并不会影响对其他正常服务器的访问,因为对80建立连接失败后,客户端会自动转用139端口。

3、 如果我们按照一开始提到的方法,禁用139 端口,并且将一个网络内所有的系统都修改为一个共同的值,那么这些机器相互之间的共享访问仍然不受任何影响,但是任何外来的访问都会失败。这在某种程度上可以增强安全性,抵御恶意入侵和一些蠕虫。

139 端口可不可以改为其它的呢?也是可以的,不过,没有像上面那样优雅的方法,只能靠修改netbt.sys文件或者动态修改内存中相应的位置。5.0.2195.6783版本netbt.sys设定端口部分的代码如下:

; ------------------------------------------------------------------------

66 C7 86 F2 01 00 00 8B 00

mov

word ptr [esi+1F2h], 8Bh ; 139

66 C7 86 F4 01 00 00 89 00

mov

word ptr [esi+1F4h], 89h ; 137

66 C7 86 F6 01 00 00 8A 00

mov

word ptr [esi+1F6h], 8Ah ; 138

; ------------------------------------------------------------------------

Windows XP和Windows 2003上的相关结构和Windows 2000不同,代码有些差别,下面是5.2.3790.69版本netbt.sys设定端口部分的代码:

; ------------------------------------------------------------------------

66 C7 86 F8 01 00 00 8B 00

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有