Day 17 Server Message Block (SMB)相关安全

因为电脑坏掉了,所以暂时没有截图 QQ

Server Message Block (SMB)

SMB 针对网路传输档案的协定,提供给网路芳邻与印表机使用。

可透过未经身分验证的 inter-process communication (IPC) 机制,处理共享的资料。
最新的版本为 SMB 3.1.1 (Windows 10 与 Windows Server 2016)

以下为版本与作业系统:

SMB Version Windows version
CIFS Microsoft Windows NT 4.0
SMB 1.0 Windows 2000, Windows XP, Windows Server 2003 & Windows Server 2003 R2
SMB 2.0 Windows Vista & Windows Server 2008
SMB 2.1 Windows 7 & Windows Server 2008 R2
SMB 3.0 Windows 8 & Windows Server 2012
SMB 3.0.2 Windows 8.1 & Windows Server 2012 R2
SMB 3.1.1 Windows 10 & Windows Server 2016

假设使用端和服务器端使用不同的作业系统与 SMB 版本,则会以最高可支援的版本进行连线,如 Windwos 8 与 Widnow Server 2016 则会以 SMB 3.0 进行连线。

现今有许多 SMB 相关的已知漏洞,如 CVE-2017-0143,影响大量的设备与系统。

使用的 TCP 与 UDP 的 port

名称 port 说明
netbios-ns 137/tcp NETBIOS Name Service
netbios-ns 137/udp NETBIOS Name Service
netbios-dgm 138/tcp NETBIOS Datagram Service
netbios-dgm 138/udp NETBIOS Datagram Service
netbios-ssn 139/tcp NETBIOS session service
netbios-ssn 139/udp NETBIOS session service
microsoft-ds 445/tcp 用於 AD

tool:Null session with rpcclient

於 Linux 中有一个工具名 Rpcclient,可执行使用者端的 MS-RPC 的函式。

null session
null session 用於 Samba 或 SMB 服务器的连接使用,不需要密码进行身分验证,预设情况下较旧的系统为开启的,而 Windows XP SP2 和 Windows Server 2003 禁止使用。

利用空的帐号名称
rpcclient -U "" [target]

输入以上的指令,会要求输入密码,可以将密码留空。

会看到rpcclient $> 可输入指令

取得帮助清单
help

查看功能变数名称与使用者数量
rpcclient $> querydominfo

该指令可看到 Domain、Server、Comment、Total Users、Total Group、Total Aliases 等资讯

查看使用者清单
rpcclient $> enumdomusers

可看到目前使用者的清单,其中 RID 以十六进位表示(0x3E8 = 1000)
user:[fei] rid:[0x3e8]

指定使用者帐号取得资讯
rpcclient $> queryuser [username]

指定使用者 RID(binary) 取得资讯
rpcclient $> queryuser 1000

指定使用者 RID(Hex) 取得资讯
rpcclient $> queryuser 0x3e8

以上的指令可以针对该使用者,查询使用者路径、home drive、密码相关资讯。

利用 TAB 取得可用的指令

rpcclient $> enum <TAB><TAB>

enumalsgroups      enumdomgroups      enumjobs           enumprinters       enumtrust
enumdata           enumdomusers       enumkey            enumprivs         
enumdataex         enumdrivers        enummonitors       enumprocdatatypes 
enumdomains        enumforms          enumports          enumprocs

如果出现 NT_STATUS_CONNECTION_DISCONNECTED 表示可能因为 smbclient 版本太低,可以在 /etc/samba/smb.conf 编辑 client min protocol = CORE

RID Cycling

并不是每一个系统都可以使用 enumdomusers 列出所有使用者,有一些系统没有支援,没有支援的系统,若使用 querydominfo 中的使用者数量为 0。
我们需要使用 RID cycling 来取得使用者列表。

RID(relative identifier)

  • 使用者创立的时候赋予的可变长度的数
  • RID 为 SID (Security Identifier) 的一部分
  • SID 与 RID 可以识别帐号或群组
  • 如果想要查询 SID 可使用 lookupnames
  • RIDS 的总类
    • 500-1000 for System
    • 1000-10000 for Domain

查询 up name
rpcclient $> lookupnames pbx

查询 SID,会输出使用者帐号
rpcclient $> lookupsids [domain]

查询以中使用者群组
rpcclient $> lookupnames administrators

穷举 System RID
rpcclient $> lookupsids S-1-5-32-[501-1000]

Tool:Enum4linux

利用 Perl 撰写而成的 Linux 版本 enum.exe 可以列举 Windows 主机的 Samba 资讯,

./enum4linux.pl [options] [ip]

参数 说明
-U 取得使用者的清单
-M 取得机器的清单
-S 取得共享的清单
-P 取得密码策略资讯
-G 取得群组和成员列表
-d 详细资讯,使用於参数 -U 与 -S
-u user 特别指定帐号,预设为""
-p pass 特别指定密码,预设为""
-a 执行所有的猎取包含 -U -S -G -P -r -o -n -i
-o 取得作业系统资讯
-i 取得印表机资讯

基本列举
enum4linux [target]

  1. 会列举使用者、群组等详细资讯。
  2. 会针对 RID 循环查询有效的使用者帐号和群组。

Nmap SMB scripts

Nmap 中的 NSE 包含许多与 SMB 相关的扫描脚本,路径於 /usr/share/nmap/scripts/smb*

ls -ls /usr/share/nmap/scripts/smb*

若找到想要使用的扫描脚本,可利用以下的指令,指定脚本:

nmap --script=[scriptname] [target ip]

确认 SMB 版本与作业系统版本
nmap -p 139,445 --script=smb-os-discovery [target]

利用所有与 SMB 相关的脚本进行扫描

nmap -p 139,445 --script=smb-vuln* [target]

扫描结果可能有 false 或是详细的扫描资讯(State:VULNERABLE)。

确认目标是否存在 MS08-067 漏洞
nmap -p 139,445 --script=smb-vuln-ms08-067 [target]

MS17-010 Eternalblue

Eternalblue 是 2017 年 04 月利用 SMBv1 协定的漏洞,影响以下版本:

  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows Server 2003/2008/2012(R2)/2016

该漏洞将造成远端服务器任意执行指令,属高风险漏洞。

确认目标是否存在 MS17-010 漏洞
nmap -p 445 [target] --script=smb-vuln-ms17-010

可下载 NSE 到系统内部
wget https://svn.nmap.org/nmap/scripts/smb-vuln-ms17-010.nse -O /usr/share/nmap/scripts/smb-vuln-ms17-010.nse

更新 NSE 资料库
nmap --script-updatedb


<<:  [Day 17]独自一人的全端攻略(前端篇)

>>:  [DAY 17] VAE 简介

Spring Framework X Kotlin Day 21 WebSocket

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

2.4.16 Design System - Toasts / Snackbars

Toasts 有时又叫做 Snackbar 用来提醒用户一些小事的元件 也有几种不同的使用情境,在 ...

如何把D槽空间分给C槽

询问各位大大,我在网路上看到要转移空间,就是按下延伸磁碟机。 但是我的的C槽却一直无法出现,延伸磁...

[第九只羊] 迷雾森林舞会II 房间座位设定

天亮了 昨晚是平安夜 关於迷雾森林故事 粉红烟花三个月 由於黑洞把12只 animal 吸走後的烟 ...

Day24:【技术篇】设定自己的GitHub Pages

一、前言   网路上有很多创建个人 GitHub Pages 的教学文章,这边就先跳过此环节与相关原...