设为首页】 【加入收藏】 【网站地图】 【商品折扣
娱乐一生 娱乐明星
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
首页  |  安全动态  |  漏洞分析  |  黑客教程  |  破解教程  |  病毒技术  |  WINDOWS视窗技术  |  DDOS技术  |  安全防护  |  漏洞快递  |  系统防护
当前位置:首页 >> 系统防护 >> 修改WindowsSMB相关服务的默认端口

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


  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   mov  word ptr [esi+1F8h], 8Bh ; 139
  66 C7 86 FA 01 00 00 89 00   mov  word ptr [esi+1FAh], 89h ; 137
  66 C7 86 FC 01 00 00 8A 00   mov  word ptr [esi+1FCh], 8Ah ; 138
  ; ------------------------------------------------------------------------
  
  显然,Opcode之间的差别也就是偏移量,所以很容易写出可以支持Windows 2000、Windows XP和Windows 2003的动态或者静态Patch代码。



 

娱乐图摘

更多 >>

靓丽清纯美女meimei

美女私房全裸照
导演劝女演员脱衣服(视频)

大胆火辣人体艺术写真(图)

黑丝妹妹热辣诱惑-丝袜美女妹妹

PLMM 漂亮妹妹图集-妹妹图库

全球美女图库-美女集中营

52MM 我爱漂亮妹妹-制服妹妹诱惑

图王图库-世界美女明星图片资料库
美女写真集锦

激情两性-解密性生活
浴室MM湿身内衣诱惑
邻家小妹洗澡被偷拍(视频)

热点文章

更多

· 使用C#控制远程计算机的服务(2)
· 入侵和入侵检测技术发展综述
· Cisco公司成功的一对一Email营销
· 深度解析恶意软件威胁方法及防护技巧
· 全方位透析“巨无霸”病毒
· 新形式下的网络营销手段:今天我们该怎样“叫卖”
· SentinelLM.软件许可证管理技术方案
· 美国拟出台两法案将要对弹出式广告动真格
· 修改WindowsSMB相关服务的默认端口
· Windows新漏洞将任意用户提升到SYSTEM级别的权限的

热点文章

更多