常用服务攻击
常用服务交互
漏洞通常由使用和理解技术、协议或服务的人发现。随着我们在这一领域的不断发展,我们将发现不同的服务来交互,并且我们需要不断进化和学习新技术。
要在攻击一项服务上取得成功,我们需要了解它的用途、如何与其交互、我们可以使用哪些工具以及我们可以用它做什么。
文件共享服务
文件共享服务是一种提供、中介和监控计算机文件传输的服务类型。多年前,企业通常只使用内部服务进行文件共享,例如 SMB、NFS、FTP、TFTP、SFTP,但随着云采用的增加,现在大多数公司也拥有第三方云服务,如 Dropbox、Google Drive、OneDrive、SharePoint,或其他形式的文件存储,如 AWS S3、Azure Blob Storage 或 Google Cloud Storage。我们将接触到内部和外部文件共享服务的混合体,我们需要熟悉它们。
服务器消息块 (SMB)
SMB 常用于 Windows 网络,在 Windows 网络中我们经常可以发现共享文件夹。我们可以使用图形界面、命令行界面或工具与 SMB 进行交互。让我们介绍一些使用 Windows 和 Linux 与 SMB 交互的常见方法。
Windows
我们可以使用 Windows 以不同的方式与共享文件夹交互,我们将探讨其中几种方法。在 Windows 图形界面中,我们可以按下 [WINKEY] + [R] 打开运行对话框并输入文件共享位置,例如: \\192.168.220.129\Finance\
如果共享文件夹允许匿名认证,或者我们使用具有该共享文件夹权限的用户进行认证,那么我们将不会收到任何形式的认证请求,并且会显示共享文件夹的内容。
如果我们没有访问权限,我们将收到一个认证请求。
CMD
use
命令 net use 连接或断开计算机与共享资源,或显示计算机连接信息。我们可以使用以下命令连接到文件共享,并将其内容映射到驱动器字母 n 。
1 | net use n: \\192.168.220.129\Finance |
我们还可以提供用户名和密码以验证共享。
1 | net use n: \\192.168.220.129\Finance /user:plaintext Password123 |
dir
将共享文件夹映射为 n 驱动器后,我们可以像这个共享文件夹在我们本地计算机上一样执行 Windows 命令。让我们看看共享文件夹及其子目录包含多少个文件。
1 | dir n: /a-d /s /b | find /c ":\" |
| Syntax 语法 | Description 描述 |
|---|---|
dir |
Application 应用 |
n: |
Directory or drive to search 搜索目录或驱动器 |
/a-d |
/a is the attribute and -d means not directories /a 是属性, -d 表示不是目录 |
/s |
Displays files in a specified directory and all subdirectories 显示指定目录及其所有子目录中的文件 |
/b |
Uses bare format (no heading information or summary) 使用裸格式(不显示标题信息或摘要) |
findstr
1 | findstr /s /i cred n:\*.* |
Powershell
PowerShell 被设计用来扩展命令提示符的功能以运行 PowerShell 命令 cmdlets 。Cmdlet 类似于 Windows 命令,但提供了一个更可扩展的脚本语言。我们可以在 PowerShell 中运行 Windows 命令和 PowerShell cmdlet,但命令提示符只能运行 Windows 命令而不能运行 PowerShell cmdlet。现在让我们使用 Powershell 来复制相同的命令。
1 | Get-ChildItem \\192.168.220.129\Finance\ |
1 | New-PSDrive -Name "N" -Root "\\192.168.220.129\Finance" -PSProvider "FileSystem" |
使用 PowerShell 提供用户名和密码,我们需要创建一个 PSCredential 对象。它提供了一种集中管理用户名、密码和凭证的方式。
Windows PowerShell - PSCredential 对象
1 | $username = 'plaintext' |
Windows PowerShell - GCI
在 PowerShell 中,我们可以使用命令 Get-ChildItem 或其简写 gci 来代替命令 dir 。
1 | (Get-ChildItem -File -Recurse | Measure-Object).Count |
我们可以使用属性 -Include 来查找由 Path 参数指定的目录中的特定项。1
Get-ChildItem -Recurse -Path N:\ -Include *cred* -File
Windows PowerShell - Select-String
Select-String cmdlet 使用正则表达式匹配来搜索输入字符串和文件中的文本模式。我们可以使用 Select-String ,类似于 UNIX 中的 grep 或 Windows 中的 findstr.exe 。
1 | Get-ChildItem -Recurse -Path N:\ | Select-String "cred" -List |
CLI 使 IT 操作能够自动化用户账户管理、夜间备份或与许多文件交互等日常任务。通过使用脚本而不是用户界面或 GUI,我们可以更高效地执行操作。
Linux
Linux (UNIX) 机器也可以用来浏览和挂载 SMB 共享。请注意,无论目标服务器是 Windows 机器还是 Samba 服务器,都可以这样做。尽管一些 Linux 发行版支持图形界面,但我们将专注于使用 Linux 命令行工具和实用程序与 SMB 交互。让我们了解如何挂载 SMB 共享以在本地与目录和文件交互。
Linux - 挂载
1 | sudo mkdir /mnt/Finance |
1 | sudo mount -t cifs -o username=plaintext,password=Password123,domain=. //192.168.220.129/Finance /mnt/Finance |
作为另一种选择,我们可以使用一个凭证文件。1
mount -t cifs //192.168.220.129/Finance /mnt/Finance -o credentials=/path/credentialfile
文件 credentialfile 必须像这样结构化:
CredentialFile
1 | username=plaintext |
一旦共享文件夹挂载后,可以使用常见的 Linux 工具(如 find 或 grep )来与文件结构交互。
命令行工具
MySQL
要与 MySQL 交互,我们可以使用 Linux ( mysql ) 或 Windows ( mysql.exe ) 的 MySQL 二进制文件。某些 Linux 发行版预装了 MySQL,但我们可以使用本指南安装 Linux 或 Windows 的 MySQL 二进制文件。使用 Linux 启动交互式 SQL 会话:
1 | mysql -u username -pPassword123 -h 10.129.20.13 |
图形用户界面应用程序
数据库引擎通常有自己的 GUI 应用程序。MySQL 有 MySQL Workbench,MSSQL 有 SQL Server Management Studio 或 SSMS,我们可以在我们的攻击主机上安装这些工具并连接到数据库。
SSMS 仅在 Windows 上受支持。一个替代方案是使用社区工具,例如 dbeaver。dbeaver 是一个跨平台数据库工具,支持 Linux、macOS 和 Windows,可以连接到多个数据库引擎,如 MSSQL、MySQL、PostgreSQL 等,这使得我们作为攻击者能够轻松地与常见的数据库服务器进行交互。
攻击方向
要有效地理解针对不同服务的攻击,我们应该看看这些服务是如何被攻击的。概念是一个应用于未来项目的概述计划。
在我们的情况下,我们需要为所有可能的服务创建攻击概念,并将其分为类别,这些类别总结所有服务但保留单个攻击方法。
| Information Source 信息来源 | Description 描述 |
|---|---|
Code |
This means that the already executed program code results are used as a source of information. These can come from different functions of a program. 这意味着已经执行的程序代码结果被用作信息来源。这些可以来自程序的不同函数。 |
Libraries |
A library is a collection of program resources, including configuration data, documentation, help data, message templates, prebuilt code and subroutines, classes, values, or type specifications. 库是一组程序资源,包括配置数据、文档、帮助数据、消息模板、预构建的代码和子程序、类、值或类型规范。 |
Config |
Configurations are usually static or prescribed values that determine how the process processes information. 配置通常是静态或规定的值,它们决定了进程如何处理信息。 |
APIs |
The application programming interface (API) is mainly used as the interface of programs for retrieving or providing information. 应用程序编程接口(API)主要用作程序获取或提供信息的接口。 |
User Input |
If a program has a function that allows the user to enter specific values used to process the information accordingly, this is the manual entry of information by a person. 如果一个程序有一个函数允许用户输入特定值用于相应地处理信息,这是由人手动输入信息。 |
因此,源头就是被利用来产生漏洞的源头。无论使用哪种协议都不重要,因为 HTTP 头注入可以被手动操纵,缓冲区溢出也可以。因此,这个源头可以被归类为 Code 。
流程
Process 是关于处理从源转发过来的信息。这些信息根据程序代码确定的预定任务进行处理。对于每个任务,开发者指定如何处理信息。这可以使用具有不同功能的类、计算和循环来完成。这种可能性是多样化的,就像世界上开发者的数量一样多。因此,大多数漏洞存在于进程执行的程序代码中。
| Process Components 处理组件 | Description 描述 |
|---|---|
PID |
The Process-ID (PID) identifies the process being started or is already running. Running processes have already assigned privileges, and new ones are started accordingly. 进程 ID(PID)标识正在启动或已经运行的进程。运行中的进程已经分配了权限,新的进程也相应地启动。 |
Input |
This refers to the input of information that could be assigned by a user or as a result of a programmed function. 这指的是可以被用户分配或作为程序功能结果输入的信息。 |
Data processing |
The hard-coded functions of a program dictate how the information received is processed. 程序中的硬编码函数决定了接收到的信息如何被处理。 |
Variables |
The variables are used as placeholders for information that different functions can further process during the task. 变量用作占位符,用于存储不同函数在任务过程中进一步处理的信息。 |
Logging |
During logging, certain events are documented and, in most cases, stored in a register or a file. This means that certain information remains in the system. 在日志记录过程中,某些事件会被记录下来,并且在大多数情况下存储在寄存器或文件中。这意味着某些信息会保留在系统中。 |
权限
Privileges 存在于任何控制进程的系统之中。它们作为一种权限类型,决定了可以在系统上执行哪些任务和操作。简单来说,这可以与一张公交票相比较。如果我们使用一张针对特定区域的票,我们就能乘坐公交车,否则就不行。这些权限(或者换句话说,我们的票)也可以用于不同的交通工具,如飞机、火车、船和其他交通工具。在计算机系统中,这些权限充当控制和分割需要不同系统控制的操作的作用。因此,当进程需要完成任务时,会根据这种分类检查这些权利。如果进程满足这些权限和条件,系统就会批准所请求的操作。我们可以将这些权限分为以下领域:
| Privileges 权限 | Description 描述 |
|---|---|
System |
这些权限是可以获得的最高权限,允许进行任何系统修改。在 Windows 中,这种权限称为 SYSTEM ,在 Linux 中,它称为 root 。 |
User |
用户权限是分配给特定用户的权限。出于安全原因,在安装 Linux 发行版时,通常会为特定的服务设置单独的用户。 |
Groups |
组是将至少一个拥有执行特定操作权限的用户进行分类。 |
Policies |
策略决定了特定应用程序命令的执行,也可以应用于单个或组用户及其操作。 |
Rules |
规则是执行操作所拥有的权限,这些权限由应用程序自身处理。 |
目标
每个任务至少有一个必须完成的目的和目标。从逻辑上讲,如果任何数据集的更改丢失、未存储或未转发到任何地方,该任务通常是不必要的。此类任务的结果要么存储在某个地方,要么转发到另一个处理点。因此,我们在这里谈论的是 Destination ,更改将在这里进行。这样的处理点可以指向本地或远程过程。
因此,在本地层面,本地文件或记录可能会被过程修改,或者转发给其他本地服务以供进一步使用。然而,这并不排除同一个过程可能会重新使用这些结果数据的可能性。如果过程在数据存储或其转发完成后结束,那么导致任务完成的循环就关闭了。
| Destination 目的地 | Description 描述 |
|---|---|
Local |
本地区域是过程发生的系统环境。因此,任务的成果要么被包含数据集更改的过程进一步处理,要么被数据存储。 |
Network |
网络区域主要是一个将过程的结果转发到远程接口的问题。这可以是一个 IP 地址及其服务,甚至可以是整个网络。在特定情况下,此类过程的结果也会影响路由。 |
服务配置错误
配置错误通常发生在系统管理员、技术支持或开发人员未能正确配置应用程序、网站、桌面或服务器的安全框架时,导致未经授权的用户出现危险的开放路径。让我们探讨一些常见服务中最典型的配置错误。
验证
往年(尽管在评估时我们有时仍会看到这种情况),服务中包含默认凭证(用户名和密码)非常普遍。这存在一个安全问题,因为许多管理员会保留默认凭证不变。如今,大多数软件在安装时会要求用户设置凭证,这比使用默认凭证要好。但是,请记住我们仍会找到使用默认凭证的供应商,尤其是在较旧的应用程序上。
即使服务没有默认凭证,管理员在设置服务时也可能使用弱密码或根本不设密码,他们以为在服务设置并运行后会更改密码。
作为管理员,我们需要定义适用于我们环境中测试或安装的软件的密码策略。管理员应被要求遵守最低密码复杂度,以避免用户和密码组合,例如:
1 | admin:admin |
一旦我们获取了服务横幅,下一步应该是识别可能的默认凭证。如果没有默认凭证,我们可以尝试上述列出的弱用户名和密码组合。
匿名认证
另一个常见服务中可能存在的配置错误是匿名认证。服务可以被配置为允许匿名认证,允许任何有网络连接到该服务的人无需提示进行认证。
错误的权限配置
配置错误的访问权限是指用户帐户具有不正确的权限。更大的问题可能是赋予指挥链中较低级别的人员访问只有经理或管理员才应该拥有的私人信息。
FTP攻击
文件传输协议( FTP )是一种标准网络协议,用于在计算机之间传输文件。它还执行目录和文件操作,例如更改工作目录、列出文件以及重命名和删除目录或文件。默认情况下,FTP 在端口 TCP/21 上监听。
要攻击 FTP 服务器,我们可以利用配置错误或过度权限,利用已知漏洞或发现新漏洞。因此,在获得 FTP 服务的访问权限后,我们需要注意目录中的内容,以便我们可以搜索敏感或关键信息,正如我们之前讨论的那样。该协议设计用于通过命令触发下载和上传。因此,文件可以在服务器和客户端之间传输。用户可以使用由操作系统知晓的文件管理系统。文件可以存储在文件夹中,这些文件夹可能位于其他文件夹中。这导致了分层目录结构。大多数公司使用此服务进行软件或网站开发过程。
枚举
Nmap 默认脚本 -sC 包括了检查 FTP 服务器是否允许匿名登录的 ftp-anon Nmap 脚本。版本枚举标志 -sV 可以提供关于 FTP 服务器的有趣信息,例如 FTP 横幅,通常包含版本名称。我们可以使用 ftp 客户端或 nc 与 FTP 服务交互。默认情况下,FTP 运行在 TCP 端口 21 上。
我们可以使用nmap进行服务的扫描1
sudo nmap -sC -sV -p 21 192.168.2.142
常见的漏洞
配置错误
如我们所讨论的,可以为 FTP 等不同服务配置匿名认证。使用匿名登录时,我们可以使用 anonymous 用户名且无需密码。如果 FTP 服务的读写权限未设置正确,这对公司来说将是危险的。因为通过匿名登录,公司可能会在 FTP 服务匿名用户可以访问的文件夹中存储敏感信息。
这将使我们能够下载这些敏感信息,甚至上传危险的脚本。利用其他漏洞,例如 Web 应用程序中的路径遍历,我们将能够找出这个文件的位置,并作为 PHP 代码执行它,例如。
匿名登录
一旦我们使用匿名凭证获得 FTP 服务器的访问权限,就可以开始搜索有趣的信息。我们可以使用 ls 和 cd 命令在目录间移动,就像在 Linux 中一样。要下载单个文件,我们使用 get ;要下载多个文件,我们可以使用 mget 。对于上传操作,我们可以使用 put 上传单个文件,或使用 mput 上传多个文件。在 FTP 客户端会话中,我们可以使用 help 获取更多信息。
协议特定攻击
许多不同的攻击和方法都是基于协议的。但是,需要注意的是,我们攻击的不是协议本身,而是使用这些协议的服务。由于单个协议有数十种服务,并且它们处理相应信息的方式不同,我们将查看其中一些。
暴力破解
如果没有匿名认证可用,我们也可以使用预先生成的用户名和密码列表来暴力破解 FTP 服务的登录。有许多不同的工具可以执行暴力破解攻击。让我们探索其中一个,Medusa。使用 Medusa ,我们可以使用选项 -u 来指定单个用户进行攻击,或者你可以使用选项 -U 来提供一个包含用户名的文件。选项 -P 是用于包含密码列表的文件。我们可以使用选项 -M 和目标协议(FTP),以及选项 -h 来指定目标主机名或 IP 地址。
1 | medusa -u fiona -P /usr/share/wordlists/rockyou.txt -h 10.129.203.7 -M ftp |
FTP反弹攻击
FTP 反弹攻击是一种网络攻击,它利用 FTP 服务器将出站流量发送到网络上的另一台设备。攻击者使用 PORT 命令来欺骗 FTP 连接运行命令并从非预期服务器意图的设备获取信息。
考虑我们正在针对暴露在互联网上的 FTP 服务器 FTP_DMZ 。同一网络内的另一台设备 Internal_DMZ 没有暴露在互联网上。我们可以使用连接到 FTP_DMZ 服务器的连接,通过 FTP 反弹攻击扫描 Internal_DMZ ,并获取有关服务器开放端口的信息。然后,我们可以使用这些信息作为对基础设施攻击的一部分。
可以使用 Nmap -b 标志执行 FTP 反弹攻击:
1 | nmap -Pn -v -n -p80 -b anonymous:password@10.10.110.213 172.17.0.2 |
SMB攻击
服务器消息块(SMB)是一种通信协议,旨在为网络上的节点提供共享文件和打印机的访问。最初,它设计为在 NetBIOS over TCP/IP(NBT)之上运行,使用 TCP 端口 139 和 UDP 端口 137 和 138 。然而,随着 Windows 2000 的推出,微软增加了直接在 TCP/IP 上运行 SMB 的选项,端口为 445 ,无需额外的 NetBIOS 层。如今,现代 Windows 操作系统使用 TCP 上的 SMB,但仍然支持 NetBIOS 实现,作为备用方案。
Samba 是基于 Unix/Linux 的 SMB 协议的开源实现。它还允许 Linux/Unix 服务器和 Windows 客户端使用相同的 SMB 服务。
另一个与 SMB 常见的协议是 MSRPC(Microsoft 远程过程调用)。RPC 为应用程序开发者提供了一种通用方法,以便在本地或远程进程中执行过程(即函数),而无需理解支持通信的网络协议,如 MS-RPCE 中所述,该协议定义了在 SMB 协议上运行的 RPC,可以使用 SMB 协议命名管道作为其底层传输。
要攻击 SMB 服务器,我们需要了解其实现方式、操作系统以及我们可以使用哪些工具来利用它。与其他服务一样,我们可以利用配置错误或过度权限,利用已知漏洞或发现新漏洞。此外,在获得 SMB 服务的访问权限后,如果我们与共享文件夹交互,我们需要注意目录中的内容。最后,如果我们目标是 NetBIOS 或 RPC,需要识别我们可以获取哪些信息或在目标上执行哪些操作。
枚举
根据 SMB 实现和操作系统,使用 Nmap 将获取不同的信息。请记住,当针对 Windows 操作系统时,版本信息通常不作为 Nmap 扫描结果的一部分。相反,Nmap 会尝试猜测操作系统版本。然而,我们通常需要其他扫描来识别目标是否容易受到特定漏洞的影响。我们将在本节后面讨论搜索已知漏洞。
常见的漏洞
匿名认证
如果我们找到一个不需要用户名和密码的 SMB 服务器,或者找到有效的凭证,我们可以获取共享列表、用户名、组、权限、策略、服务等的列表。大多数与 SMB 交互的工具允许空会话连接,包括 smbclient 、 smbmap 、 rpcclient 或 enum4linux 。
文件分享
使用 smbclient ,我们可以显示服务器的共享列表,并使用选项 -L ,使用选项 -N ,我们告诉 smbclient 使用空会话。1
smbclient -N -L //10.129.14.128
Smbmap 是另一个帮助我们枚举网络共享并访问相关权限的工具。 smbmap 的优点是它为每个共享文件夹提供权限列表。1
smbmap -H 10.129.14.128
使用 smbmap 命令配合 -r 或 -R (递归)选项,可以浏览目录:1
smbmap -H 10.129.14.128 -r notes
远程过程调用(RPC)
我们可以使用 rpcclient 工具与空会话来枚举工作站或域控制器。
rpcclient 工具为我们提供了许多不同的命令,用于在 SMB 服务器上执行特定功能以收集信息或修改服务器属性,如用户名。
1 | rpcclient -U'%' 10.10.110.17 |
协议特定攻击
如果未启用空会话,我们将需要凭证才能与 SMB 协议交互。获取凭证的两种常见方法是暴力破解和密码喷洒。
暴力破解和密码喷洒
当进行暴力破解时,我们会尽可能多地尝试针对一个账户的密码,但如果达到阈值,可能会锁定账户。如果我们知道阈值,可以使用暴力破解并在达到阈值前停止。否则,我们不推荐使用暴力破解。
密码喷射是一种更好的替代方案,因为我们可以使用一个通用密码针对用户名列表进行攻击,以避免账户锁定。如果我们知道账户锁定阈值,可以尝试多个密码。通常,两次到三次尝试是安全的,前提是每次尝试之间等待 30-60 分钟。
使用 CrackMapExec (CME),我们可以针对多个 IP 地址,使用多个用户名和密码。让我们探索密码喷洒的日常用例。要对一个 IP 地址执行密码喷洒,我们可以使用 -u 选项指定包含用户列表的文件,并使用 -p 选项指定密码。这将尝试使用提供的密码对列表中的每个用户进行身份验证。
1 | crackmapexec smb 10.10.110.17 -u /tmp/userlist.txt -p 'Company01!' --local-auth |
远程代码执行
PsExec
PsExec是一个让我们能够在其他系统上执行进程的工具,支持完整的控制台应用程序交互性,无需手动安装客户端软件。它之所以能工作,是因为其可执行文件中包含了一个 Windows 服务镜像。它将这个服务部署到远程机器的 admin$共享(默认情况下)。然后,它通过 SMB 上的 DCE/RPC 接口访问 Windows 服务控制管理器 API。接下来,它在远程机器上启动 PSExec 服务。PSExec 服务随后创建一个命名管道,可以向系统发送命令。
1 | psexec 用户:密码@ip |
CrackMapExec
我们还可以使用 CrackMapExec 来运行 CMD 或 PowerShell。 CrackMapExec 的一个优点是可以在多个主机上同时运行命令。要使用它,我们需要指定协议 smb 、IP 地址或 IP 地址范围、用户名选项 -u 、密码选项 -p ,以及运行 cmd 命令的选项 -x 或运行 PowerShell 命令的大写选项 -X 。
1 | crackmapexec smb 10.10.110.17 -u Administrator -p 'Password123!' -x 'whoami' --exec-method smbexec |
枚举
我们身处一个包含多台机器的网络中。其中一些机器共享同一个本地管理员账户。在这种情况下,我们可以使用 CrackMapExec 来枚举同一网络 10.10.110.17/24 中所有机器上的已登录用户,从而加快我们的枚举过程。
1 | crackmapexec smb 10.10.110.0/24 -u administrator -p 'Password123!' --loggedon-users |
提取哈希
安全账户管理器(SAM)是一个存储用户密码的数据库文件。它可用于验证本地和远程用户。如果我们在一台机器上获得管理员权限,我们可以提取 SAM 数据库哈希值,用于不同的目的
- 以另一个用户身份进行身份验证。
- 密码破解,如果我们成功破解了密码,可以尝试将其用于其他服务或账户。
- 哈希传递
哈希传递
如果我们能够获取某个用户的 NTLM 哈希值,并且无法破解它,我们仍然可以使用该哈希值通过一种称为“哈希传递”(PtH)的技术来通过 SMB 进行身份验证。PtH 允许攻击者使用用户的密码底层 NTLM 哈希值而不是明文密码来对远程服务器或服务进行身份验证。我们可以使用任何Impacket工具、SMBMap、CrackMapExec等工具进行 PtH 攻击。以下是使用CrackMapExec进行此操作的示例:
1 | crackmapexec smb 10.10.110.17 -u Administrator -H 2B576ACBE6BCFDA7294D6BD18041B8FE |
强制认证攻击
我们还可以通过创建一个假的 SMB 服务器来利用 SMB 协议,以捕获用户的 NetNTLM v1/v2 哈希值。
执行此类操作最常见的工具是 Responder 。Responder 是一款 LLMNR、NBT-NS 和 MDNS 毒化工具,具有不同的功能,其中之一是设置虚假服务,包括 SMB,以窃取 NetNTLM v1/v2 哈希值。在其默认配置下,它会发现 LLMNR 和 NBT-NS 流量。然后,它会代表受害者正在查找的服务进行响应,并捕获它们的 NetNTLM 哈希值。
NFS
Network File System ( NFS )是由 Sun Microsystems 开发的一种网络文件系统,其目的与 SMB 相同。它的作用是在网络上访问文件系统,就像这些文件是本地的一样。不过,它使用的是完全不同的协议。NFS 主要用于 Linux 和 Unix 系统之间之间的通信。这意味着 NFS 客户端无法直接与 SMB 服务器进行通信。NFS 是一种互联网标准,用于规范分布式文件系统的相关操作。虽然 NFS 协议版本 3.0 ( NFSv3 )已经使用了很多年,并且一直被广泛应用,但自 NFSv4 版本开始,情况发生了变化。与 Windows SMB 协议类似,在这里用户也需要进行身份验证。
| Version 版本 | Features 特点 |
|---|---|
NFSv2 |
这个系统虽然更古老,但得到了许多系统的支持,并且最初是完全通过 UDP 协议来运行的。 |
NFSv3 |
它拥有更多的功能,包括可变化的文件大小以及更完善的错误报告机制。不过,它并不完全与 NFSv2 客户端兼容。 |
NFSv4 |
它包含了 Kerberos 机制,能够穿越防火墙和互联网环境;不再需要端口映射器;支持 ACL 功能;采用基于状态的运作方式;同时提供了性能提升和更高的安全性。此外,这也是第一个拥有有状态协议的版本。 |
查看
1 | showmount -e 10.129.25.127 |
挂载
1 | sudo mount -t nfs 10.129.25.127:/ ./nfs -o nolock |
攻击SQL数据库
MySQL 和 Microsoft SQL Server ( MSSQL ) 是关系型数据库管理系统,它们将数据存储在表、列和行中。许多关系型数据库系统,如 MSSQL & MySQL,使用结构化查询语言 ( SQL ) 进行数据库查询和维护。
数据库主机被认为是高价值目标,因为它们负责存储各种敏感数据,包括但不限于用户凭证、 Personal Identifiable Information (PII) 、业务相关数据和支付信息。此外,这些服务通常配置了具有高度特权的用户。如果我们获得对数据库的访问权限,我们可能会利用这些权限执行更多操作,包括横向移动和权限提升。
可以使用nmap进行枚举
认证机制
MSSQL 支持两种认证模式,这意味着用户可以在 Windows 或 SQL Server 中创建:
| Authentication Type 认证类型 | Description 描述 |
|---|---|
Windows authentication mode |
这是默认设置,通常称为 integrated 安全,因为 SQL Server 安全模型与 Windows/Active Directory 紧密集成。特定的 Windows 用户和组帐户被信任登录到 SQL Server。已经通过 Windows 认证的用户不需要提供其他凭证。 |
Mixed mode |
混合模式支持使用 Windows/Active Directory 帐户和 SQL Server 进行认证。用户名和密码对在 SQL Server 中维护。 |
