Windows应急响应手册-6

暴力破解

暴力破解处置流程.drawio

0x00 固定证据 ¶

在发生任何安全事件时,确定安全事件真实存在以后,第一步都建议固定证据,固定证据一般有以下几种类型,受害单位可以根据实际需求选择

  • 系统快照 - 一般云环境比较方便这么做
  • 磁盘取证
  • 针对性取证 - 例如日志文件、网络信息、数据库等
  • 内存取证

系统快照 ¶

这种主要是云环境或虚拟化环境比较方便,目前似乎这类方式取证出来的内容都会丢失内存信息,属于是关机-快照-导出

虚拟机软件似乎支持例如暂停、冻结等功能,具体根据实际情况决定

磁盘取证 ¶

磁盘取证有很多工具可以考虑

  • dd
  • FTK Imager

针对性取证 ¶

这部分推荐我们自己的 NOPTrace-Collector

https://github.com/Just-Hack-For-Fun/NOPTrace-Collector

我们还推出了一套数字取证和应急响应规范,可以根据此规范自己开发取证程序

https://github.com/Just-Hack-For-Fun/OpenForensicRules

内存取证 ¶

  • DumpIt
  • FTK Imager

取证后,对证据进行分析时,需要先单独复制一份,保持所有安全人员分析的基础是相同的

0x01 暴力破解类型 ¶

暴力破解攻击主要针对

  • RDP
  • SMB
  • SNMP
  • SQL Server
  • FTP

Windows 应急响应过程中经常通过 netstat 查看网络连接情况,这里需要注意,如果一个连接没有建立成功或者完成,可能是不会显示在 netstat 中的,这一点在暴力破解排查过程中尤为显著

0x02 RDP 暴力破解 ¶

1. 网络分析 ¶

1) netstat ¶
netstat -ano | findstr "端口"

image-20231226205204562

netstat 这个命令结果和标题栏对应关系没有 Sysinternals Suite 中其他工具那么好,但是还是能看出 pid 的位置

2) Powershell ¶
Get-NetTCPConnection
Get-NetUDPEndpoint

image-20231226205702032

image-20231226205721663

3) 图形化工具 ¶

image-20231226210251647

image-20231226210327951

如果此时正在被暴力破解,应该会出现较多与 RDP 服务端口(默认3389)的连接

image-20231227181648402

通过网络信息可以获取到攻击者IP信息,进而排查该攻击者的行为

2. 登录分析 ¶

1) 查询可登录系统的账号 ¶
  • Administrators, 组内账号
  • Remote Desktop Users, 组内账号
  • 减去, 拒绝通过远程桌面服务登录, 组策略内的账号和组

详情参考知识点附录 -> 0x01 谁可以使用远程桌面服务

2) 查询当前系统登录情况 ¶

【任务管理器】

image-20231228010224889

信息不够详细,例如登录事件没有显示

【 cmd/PowerShell 】

query user

image-20231228010438274

相对来说较为详细

在 Windows Server 2016 中 query user 是可以看到 test$ 这种隐藏账户的

image-20231228010909248

3) 查看最近登录情况 ¶

查看近期登录情况需要查看登录日志

  • 打开事件查看器,可以通过在开始菜单中搜索, 事件查看器, 或运行命令, eventvwr.msc, 来打开它。
  • 在事件查看器窗口中,导航到, Windows 日志, >, 安全, 。
  • 在右侧窗格中,你将看到列出的安全事件日志。
  • 在过滤器中,选择 “筛选当前日志”。
  • 在事件, ID, 输入框中输入, 4624, ,这是与用户登录相关的事件, ID, 。
  • 单击 “确定” 按钮,将仅显示与用户登录相关的事件日志。
  • 其中登录类型为, 10, 的日志即为通过, RDP, 登录的数据包

win + r 输入 eventvwr.msc 打开事件查看器

image-20231228011055018

image-20231228011250880

image-20231228011459903

image-20231228011608279

如果一个一个点开看比较麻烦,既然我们想知道的是近期哪个用户登录成功了,可以在标题上右键,筛选显示的列

image-20231228011732349

image-20231228011758112

image-20231228011831261

不过很遗憾,Windows 的记录中,登录记录并没有把登录用户名放在用户这一栏

image-20231228012239809

随意点开一个

image-20231228012342880

可以看到,这里的标题中,没有显示登录用户的用户名的地方,所以默认情况只能一个一个点开看了

注意 4624 筛选的都是登录成功的日志(包括本地登录、RDP、SMB等)

所以这个步骤的意义在于将登录日志中的时间和用户名与运维开发等相关人员确定,是否为正常登录,否则可能是暴力破解成功或者其他方式攻击者登录

通过 RDP 进行登录并退出,共产生 5 个 4624 的记录

这里挑选我们想看的那一个给大家看一下

日志名称:          Security
来源: Microsoft-Windows-Security-Auditing
日期: 2023/12/28 1:30:43
事件 ID: 4624
任务类别: 登录
级别: 信息
关键字: 审核成功
用户: 暂缺
计算机: HELPER4A5F
描述:
已成功登录帐户。

使用者:
安全 ID: SYSTEM
帐户名称: HELPER4A5F$
帐户域: WORKGROUP
登录 ID: 0x3E7

登录信息:
登录类型: 10
受限制的管理员模式: 否
虚拟帐户: 否
提升的令牌: 否

模拟级别: 模拟

新登录:
安全 ID: HELPER4A5F\remotetest
帐户名称: remotetest
帐户域: HELPER4A5F
登录 ID: 0xC5A55F
链接的登录 ID: 0x0
网络帐户名称: -
网络帐户域: -
登录 GUID: {00000000-0000-0000-0000-000000000000}

进程信息:
进程 ID: 0x3c8
进程名称: C:\Windows\System32\svchost.exe

网络信息:
工作站名称: HELPER4A5F
源网络地址: 10.211.55.2
源端口: 0

详细的身份验证信息:
登录进程: User32
身份验证数据包: Negotiate
传递的服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

创建登录会话时,将在被访问的计算机上生成此事件。

“使用者”字段指示本地系统上请求登录的帐户。这通常是一个服务(例如 Server 服务)或本地进程(例如 Winlogon.exe 或 Services.exe)。

“登录类型”字段指示发生的登录类型。最常见的类型是 2 (交互式)和 3 (网络)。

“新登录”字段指示新登录是为哪个帐户创建的,即已登录的帐户。

“网络”字段指示远程登录请求源自哪里。“工作站名称”并非始终可用,并且在某些情况下可能会留空。

“模拟级别”字段指示登录会话中的进程可以模拟到的程度。

“身份验证信息”字段提供有关此特定登录请求的详细信息。
- “登录 GUID”是可用于将此事件与 KDC 事件关联起来的唯一标识符。
-“传递的服务”指示哪些中间服务参与了此登录请求。
-“数据包名”指示在 NTLM 协议中使用了哪些子协议。
-“密钥长度”指示生成的会话密钥的长度。如果没有请求会话密钥,则此字段将为 0。

这里信息很详细,包括账号、时间、登录方式、来源IP等

3. 日志分析 ¶

RDP 暴力破解肯定会造成非常多的登录错误日志

  • 打开事件查看器,可以通过在开始菜单中搜索 “事件查看器” 或运行命令, eventvwr.msc, 来打开它。
  • 在事件查看器窗口中,导航到 “Windows 日志” > “安全”。
  • 在右侧窗格中,你将看到列出的安全事件日志。
  • 在过滤器中,选择 “筛选当前日志”。
  • 在 “事件 ID” 输入框中输入 “4625”,这是与用户登录失败相关的事件 ID。
  • 单击 “确定” 按钮,将仅显示与用户登录失败相关的事件日志。

image-20231228180227395

帐户登录失败。

使用者:
安全 ID: NULL SID
帐户名: -
帐户域: -
登录 ID: 0x0

登录类型: 3

登录失败的帐户:
安全 ID: NULL SID
帐户名: Administrator
帐户域:

失败信息:
失败原因: 未知用户名或密码错误。
状态: 0xC000006D
子状态: 0xC000006A

进程信息:
调用方进程 ID: 0x0
调用方进程名: -

网络信息:
工作站名: -
源网络地址: 10.211.55.2
源端口: 0

详细身份验证信息:
登录进程: NtLmSsp
身份验证数据包: NTLM
传递服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

在这些错误信息中可以获取到源IP、使用的用户名、登录的类型等信息

不要只看登录类型为 10 的日志,Windows Server 2016中RDP暴力破解(登录失败)事件ID为 4625,一般情况下登录类型为 3,这样就和 RDP 协议相同了

这里需要在上面的基础上重点关注源端口为 0 的日志

所以如果存在 RDP 爆破,应该存在大量同时具备以下特征的日志

  • 事件, ID, 为, 4625
  • 登录类型为, 3
  • 源端口为, 0

详细测试情况参考 知识点附录 -> 0x02 RDP爆破登录的日志情况 知识点附录 -> 0x03 RDP和SMB登录失败日志的区别

0x03 SMB 暴力破解 ¶

1. 网络分析 ¶

1) netstat ¶
netstat -ano | findstr "端口"

image-20231226205204562

netstat 这个命令结果和标题栏对应关系没有 Sysinternals Suite 中其他工具那么好,但是还是能看出 pid 的位置

2) Powershell ¶
Get-NetTCPConnection
Get-NetUDPEndpoint

image-20231226205702032

image-20231226205721663

3) 图形化工具 ¶

image-20231226210251647

image-20231226210327951

如果此时正在被暴力破解,应该会出现较多与 SMB 服务端口(默认 445 )的连接,但是我发现 SMB 协议的爆破并不会显示在 netstat -ano 中,或者说我明知道这边在暴力破解,连续执行20次能看到一次有一个连接

image-20231228221855959

具体原因不得而知,不过这个时候就得拿出 Wireshark 了

image-20231228222028076

在 Wireshark 中,可以直观的看到暴力破解的数据流量包,尝试追踪流

image-20231228222124231

image-20231228222204569

这样可以看到暴力破解的详细过程,使用的账户是 admin 、源IP等

2. 登录分析 ¶

1) 查询可登录系统的账号 ¶
  • 服务器上的用户
  • 减去, 拒绝从网络访问这台计算机, 组策略内的账号和组(默认禁止, Guest, )
2) 查询当前系统登录情况 ¶

【 cmd 】

net session

image-20231228231810880

【 Powershell 】

Get-SmbSession

image-20231228232029631

3) 查看最近登录情况 ¶

查看近期登录情况需要查看登录日志

  • 打开事件查看器,可以通过在开始菜单中搜索 “事件查看器” 或运行命令, eventvwr.msc, 来打开它。
  • 在事件查看器窗口中,导航到, Windows 日志, >, 安全, 。
  • 在右侧窗格中,你将看到列出的安全事件日志。
  • 在过滤器中,选择 “筛选当前日志”。
  • 在 事件, ID, 输入框中输入, 4624, ,这是与用户登录相关的事件, ID, 。
  • 单击 “确定” 按钮,将仅显示与用户登录相关的事件日志。
  • 其中登录类型为, 3, 的日志主要就是, SMB, 登录日志

win + r 输入 eventvwr.msc 打开事件查看器

image-20231228011055018

image-20231228234120810

已成功登录帐户。

使用者:
安全 ID: NULL SID
帐户名称: -
帐户域: -
登录 ID: 0x0

登录信息:
登录类型: 3
受限制的管理员模式: -
虚拟帐户: 否
提升的令牌: 否

模拟级别: 模拟

新登录:
安全 ID: HELPER4A5F\demo
帐户名称: demo
帐户域: HELPER4A5F
登录 ID: 0x183F484
链接的登录 ID: 0x0
网络帐户名称: -
网络帐户域: -
登录 GUID: {00000000-0000-0000-0000-000000000000}

进程信息:
进程 ID: 0x0
进程名称: -

网络信息:
工作站名称: WINDOWS-11
源网络地址: 10.211.55.53
源端口: 50828

详细的身份验证信息:
登录进程: NtLmSsp
身份验证数据包: NTLM
传递的服务: -
数据包名(仅限 NTLM): NTLM V2
密钥长度: 128

这里信息很详细,包括账号、时间、登录方式、来源IP等

3. 日志分析 ¶

尝试使用错误的账号密码登录 SMB

image-20231228234846315

image-20231228234955999

帐户登录失败。

使用者:
安全 ID: NULL SID
帐户名: -
帐户域: -
登录 ID: 0x0

登录类型: 3

登录失败的帐户:
安全 ID: NULL SID
帐户名: demo
帐户域: 10.211.55.52

失败信息:
失败原因: 未知用户名或密码错误。
状态: 0xC000006D
子状态: 0xC000006A

进程信息:
调用方进程 ID: 0x0
调用方进程名: -

网络信息:
工作站名: WINDOWS-11
源网络地址: 10.211.55.53
源端口: 50840

详细身份验证信息:
登录进程: NtLmSsp
身份验证数据包: NTLM
传递服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

源端口不为 0 ,这有点重要

尝试使用正确的用户名密码进行登录

image-20231229001313742

事件 ID 4624 后会紧跟着一个 4776

已成功登录帐户。

使用者:
安全 ID: NULL SID
帐户名称: -
帐户域: -
登录 ID: 0x0

登录信息:
登录类型: 3
受限制的管理员模式: -
虚拟帐户: 否
提升的令牌: 否

模拟级别: 模拟

新登录:
安全 ID: HELPER4A5F\demo
帐户名称: demo
帐户域: HELPER4A5F
登录 ID: 0x19F9594
链接的登录 ID: 0x0
网络帐户名称: -
网络帐户域: -
登录 GUID: {00000000-0000-0000-0000-000000000000}

进程信息:
进程 ID: 0x0
进程名称: -

网络信息:
工作站名称: WINDOWS-11
源网络地址: 10.211.55.53
源端口: 50875

详细的身份验证信息:
登录进程: NtLmSsp
身份验证数据包: NTLM
传递的服务: -
数据包名(仅限 NTLM): NTLM V2
密钥长度: 128

如果出现暴力破解,日志情况应该是存在大量同时符合以下特征的日志

  • 事件, ID, 为, 4625
  • 登录类型为, 3
  • 源端口不为, 0

0x04 SNMP 暴力破解 ¶

SNMP 消息传输通过 UDP 协议,常用端口为 161 和 162, 主要是 161 SNMP协议相关的内容命名是最让我不理解的,不过不影响我们做应急响应排查,我只是表达不理解

1. 网络分析 ¶

1) netstat ¶
netstat -ano | findstr "端口"

image-20231226205204562

netstat 这个命令结果和标题栏对应关系没有 Sysinternals Suite 中其他工具那么好,但是还是能看出 pid 的位置

2) Powershell ¶
Get-NetTCPConnection
Get-NetUDPEndpoint

image-20231226205702032

image-20231226205721663

3) 图形化工具 ¶

image-20231226210251647

image-20231226210327951

如果此时正在被暴力破解,应该会出现较多与 SNMP 服务端口(默认 161 )的连接

但是我发现 SNMP 协议的爆破并不会显示在 netstat -ano 中,或者说我明知道这边在暴力破解,连续执行20次能看到一次有一个连接

image-20231229121332594

image-20231229121353949

可能是暴力破解软件的请求并没有构成操作系统认为的完整请求吧,不过这个时候就得拿出 Wireshark 了

image-20231229121615298

在 Wireshark 中,可以直观的看到暴力破解的数据流量包,尝试追踪流

image-20231229121808166

image-20231229121940852

UDP 协议追踪流似乎会将这些请求合在一个流里,可以相对全面地看到这些团体名

2. 登录分析 ¶

1) 查询可登录系统的账号(团体名) ¶

【 注册表 】

reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities"

image-20231229122800579

【 服务 】

搜索服务,之后按照图中内容选择

image-20231229123153058

image-20231229123309129

找到 SNMP Service ,双击即可打开属性配置窗口

image-20231229123346916

切换到安全栏

image-20231229123510630

在 接受的社区名称(N) 中配置的就是可以登录的团体名以及权限

image-20231229123622530

Windows Server 2016 中如果不配置,是没有默认的团体名的

2) 查询当前系统登录情况 ¶

SNMP 主要用于收集和传输网络设备的管理信息,例如设备的状态、性能指标和配置信息等。它通过查询和陷阱机制来获取和报告这些信息,而不涉及用户身份验证和登录会话。

3) 查看最近登录情况 ¶

SNMP 的正常访问和使用错误团体名的访问默认情况下都不记录日志,所以还是建议通过流量设备查询相关情况

0x05 FTP 暴力破解 ¶

Windows Server 2016 中,FTP服务是 IIS 服务器安装过程中的一个角色服务,文章中以自带的这个 FTP 为例

1. 网络分析 ¶

1) netstat ¶
netstat -ano | findstr "端口"

image-20231226205204562

netstat 这个命令结果和标题栏对应关系没有 Sysinternals Suite 中其他工具那么好,但是还是能看出 pid 的位置

2) Powershell ¶
Get-NetTCPConnection
Get-NetUDPEndpoint

image-20231226205702032

image-20231226205721663

3) 图形化工具 ¶

image-20231226210251647

image-20231226210327951

如果此时正在被暴力破解,应该会出现较多与 FTP 服务端口(默认 21 )的连接

image-20231229143724766

2. 登录分析 ¶

1) 查询可登录系统的账号 ¶

image-20231229144929048

image-20231229144954435

如果开启匿名身份验证,则可以匿名登录,否则只有系统上的用户账号可以登录(当然,这里是可以配置验证身份的程序的)

2) 查询当前系统登录情况 ¶

Windows 这点很好,可以直接图形化观看

搜索 IIS ,按图选择

image-20231229145623991

image-20231229145706974

在网站上左侧找到建立的 ftp 站点,点击 FTP 当前会话

image-20231229145850279

image-20231229145933364

可以看到当前登录的用户信息,包括用户名、IP、时间、操作等

3) 查看最近登录情况 ¶

查看近期登录情况需要查看登录日志

image-20231229150135233

image-20231229150242923

此处可以找到日志的位置

image-20231229150447415

日志格式是文本

image-20231229150627004

我们直接寻找状态码为 230 的登录日志即可

这里使用 Windows 中的 type 命令 + findstr 命令的组合 (也不知道为什么看文件的命令命名为 type)

type xxx.log | findstr /C:"#Fields" /C:" 230 "

image-20231229151901707

findstr 的 /C 可以同时筛选多个字符,这样可以把标题带上,大家更容易理解

可以看到前几条都是匿名登录的,因为登录用户名栏显示 - , 后面几条都是 demo 这个用户登录的了

FTP 状态码具体信息可以查看 知识点附录 -> 0x04 FTP状态码列表

3. 日志分析 ¶

匿名登录成功的日志如下

image-20231229143354923

#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2023-12-29 06:27:23
#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem sc-status sc-win32-status sc-substatus x-session x-fullpath
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 USER anonymous 331 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 PASS IEUser@ 230 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea /
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 opts utf8+on 200 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 PWD - 257 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 CWD / 250 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea /
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 TYPE A 200 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 PASV - 227 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 49906 DataChannelOpened - - 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 49906 DataChannelClosed - - 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea -
2023-12-29 06:27:23 10.211.55.53 - 10.211.55.52 21 LIST - 226 0 0 2cf9cd35-e364-4b1a-ab27-fe9050daa5ea /

解析如下:

  • 建立通道
  • 设置账户为匿名账户, anonymous
  • 设置密码为, IEUser@
  • 登录成功
  • 设置, UTF-8, 格式
  • 打印当前路径
  • 改变当前路径为, /
  • 设置传输类型为, Ascii, 模式
  • 启动被动模式 (, PASV, 模式允许客户端在数据传输之前向服务器请求打开一个被动的数据连接)
  • 数据通道打开
  • 数据通道关闭
  • 列出指定目录下的文件和子目录

由于在 ftp 目录下没有设置文件,所以看起来比较空,我们创建一个文件夹 success ,并在里面放入文本文件 demo.txt ,内容为 abc

image-20231229154214179

关闭匿名登录,使用正确的账户密码进行登录

image-20231229155811733

2023-12-29 07:56:21 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 28b55545-2e87-4a01-83b6-1964f6d931e2 -
2023-12-29 07:56:21 10.211.55.53 - 10.211.55.52 21 USER anonymous 331 0 0 28b55545-2e87-4a01-83b6-1964f6d931e2 -
2023-12-29 07:56:21 10.211.55.53 - 10.211.55.52 21 PASS IEUser@ 530 1326 42 28b55545-2e87-4a01-83b6-1964f6d931e2 -
2023-12-29 07:56:21 10.211.55.53 - 10.211.55.52 21 ControlChannelClosed - - 0 0 28b55545-2e87-4a01-83b6-1964f6d931e2 -
2023-12-29 07:56:27 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 -
2023-12-29 07:56:27 10.211.55.53 - 10.211.55.52 21 USER demo 331 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 -
2023-12-29 07:56:27 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 PASS *** 230 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 /
2023-12-29 07:56:27 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 opts utf8+on 200 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 -
2023-12-29 07:56:27 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 PWD - 257 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 -
2023-12-29 07:56:27 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 ControlChannelClosed - - 0 0 dc0d944f-3219-44b7-919c-8da320554ea7 -

我使用的是 Windows 的文件浏览器进行访问的,它默认会以匿名账户进行登录尝试,如果登录不上去,则会弹出密码验证页面

接下来打开 success 文件夹,下载 demo.txt

image-20231229160510320

2023-12-29 08:01:24 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 - 10.211.55.52 21 USER demo 331 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 PASS *** 230 0 0 a7a1e257-031a-4565-a980-d046ace326fb /
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 opts utf8+on 200 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 PWD - 257 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 CWD /success/ 250 0 0 a7a1e257-031a-4565-a980-d046ace326fb /success
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 TYPE I 200 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 PASV - 227 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 49988 DataChannelOpened - - 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 SIZE demo.txt 213 0 0 a7a1e257-031a-4565-a980-d046ace326fb /success/demo.txt
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 49988 DataChannelClosed - - 0 0 a7a1e257-031a-4565-a980-d046ace326fb -
2023-12-29 08:01:24 10.211.55.53 HELPER4A5F\demo 10.211.55.52 21 RETR demo.txt 226 0 0 a7a1e257-031a-4565-a980-d046ace326fb /success/demo.txt

尝试使用错误的密码进行登录

image-20231229161636581

2023-12-29 08:11:51 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 59aec49f-3f2b-4057-8297-a6bfe096d8e6 -
2023-12-29 08:11:51 10.211.55.53 - 10.211.55.52 21 USER anonymous 331 0 0 59aec49f-3f2b-4057-8297-a6bfe096d8e6 -
2023-12-29 08:11:51 10.211.55.53 - 10.211.55.52 21 PASS IEUser@ 530 1326 42 59aec49f-3f2b-4057-8297-a6bfe096d8e6 -
2023-12-29 08:11:51 10.211.55.53 - 10.211.55.52 21 ControlChannelClosed - - 0 0 59aec49f-3f2b-4057-8297-a6bfe096d8e6 -
2023-12-29 08:11:55 10.211.55.53 - 10.211.55.52 21 ControlChannelOpened - - 0 0 bf304234-f27d-4562-ad02-12a82db1305f -
2023-12-29 08:11:55 10.211.55.53 - 10.211.55.52 21 USER demo 331 0 0 bf304234-f27d-4562-ad02-12a82db1305f -
2023-12-29 08:11:55 10.211.55.53 - 10.211.55.52 21 PASS *** 530 1326 41 bf304234-f27d-4562-ad02-12a82db1305f -
2023-12-29 08:11:55 10.211.55.53 - 10.211.55.52 21 ControlChannelClosed - - 0 0 bf304234-f27d-4562-ad02-12a82db1305f -

除了文件浏览器自己尝试的匿名访问,可以看到就是账号密码,登录失败,比较简单,因此暴力破解部分,我们可以考虑将 530 作为筛选条件

尝试模拟暴力破解,从日志中进行筛选

type xxx.log | findstr /C:"#Fields" /C:"*** 530 "

image-20231229170149773

如果想知道某个IP的话,可以再次筛选,当然可以通过更加智能的文本编辑器进行统计

0x06 MSSQL 暴力破解 ¶

这里以 MSSQL 2016 版本为例

安装过程中会设置身份验证方式

image-20231229174158833

1. 网络分析 ¶

1) netstat ¶
netstat -ano | findstr "端口"

image-20231226205204562

netstat 这个命令结果和标题栏对应关系没有 Sysinternals Suite 中其他工具那么好,但是还是能看出 pid 的位置

2) Powershell ¶
Get-NetTCPConnection
Get-NetUDPEndpoint

image-20231226205702032

image-20231226205721663

3) 图形化工具 ¶

image-20231226210251647

image-20231226210327951

如果此时正在被暴力破解,应该会出现较多与 MSSQL 服务端口(默认 1433 )的连接

image-20231229195851610

2. 登录分析 ¶

1) 查询可登录系统的账号 ¶

如果之前设置的只有 Windows 身份验证模式,那么就只有 MSSQL 所在的操作系统上的用户在这个系统上使用程序连接 MSSQL

如果是混合模式,那至少有一个名为 sa 的账户,可以使用 SQL 查询数据库中可登录的账户

SELECT name
FROM sys.sql_logins
WHERE is_disabled = 0;

image-20231229202511390

2) 查询当前系统登录情况 ¶

还是通过 SQL 语句来完成

SELECT login_name, session_id, login_time, host_name, program_name
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;

image-20231229202927717

可以看到 helper 账户就是通过 Windows 身份验证方式登录的,而 sa 是通过 SQL Server 身份验证方式登录的

3) 查看最近登录情况 ¶

默认的情况下 MSSQL 2016 并不会记录登录成功的日志,包括通过 Windows 身份验证方式登录的和通过 SQL Server 身份验证方式登录的

3. 日志分析 ¶

在 SSMS (SQL Server Management Studio) sa 连接 MSSQL 后,打开管理就可以看到 SQL Server 日志了

image-20231229214112390

image-20231229214347521

通过 SQL Server 身份验证方式,错误的账户或密码登录记录的日志如下

12/29/2023 21:25:56,Logon,未知,Login failed for user 'sa'. 原因: 密码与所提供的登录名不匹配。 [客户端: 10.211.55.53]
12/29/2023 19:58:46,Logon,未知,Login failed for user 'demo'. 原因: 找不到与提供的名称匹配的登录名。 [客户端: 10.211.55.2]

通过 Windows 身份验证方式登录的错误日志如下

12/29/2023 21:21:58,Logon,未知,Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. [客户端: 10.211.55.53]

日志记录了时间、用户名、源IP

通过筛选源为 Logon 可以筛选出全部的登录错误日志

image-20231229214910677

image-20231229214927773

可以很清晰看出暴力破解的痕迹,如果这个搜索你觉得不好用,还可以到处日志,之后通过文字编辑器工具进行排查

image-20231229215030117

通过 Windows 身份验证方式登录 MSSQL 失败的日志还会记录在 Windows 的安全日志里

image-20231229222005354

帐户登录失败。

使用者:
安全 ID: NULL SID
帐户名: -
帐户域: -
登录 ID: 0x0

登录类型: 3

登录失败的帐户:
安全 ID: NULL SID
帐户名: join
帐户域: .

失败信息:
失败原因: 未知用户名或密码错误。
状态: 0xC000006D
子状态: 0xC0000064

进程信息:
调用方进程 ID: 0x0
调用方进程名: -

网络信息:
工作站名: WINDOWS-11
源网络地址: 10.211.55.53
源端口: 50915

详细身份验证信息:
登录进程: NtLmSsp
身份验证数据包: NTLM
传递服务: -
数据包名(仅限 NTLM): -
密钥长度: 0

登录类型也是 3 ,不过很少见到通过这种方式暴力破解的